Go微服務實戰

劉金亮 著

立即出貨

買這商品的人也買了...

相關主題

商品描述

書共分21章。
分為四篇進行介紹:語言基礎篇、語言進階篇、微服務知識篇、微服務實戰篇。
第一篇包括6章:Go程序基礎、基本數據類型、字符串及復合數據類型、函數、方法、接口及反射、並發。
通過本篇的開發,可以讓不是很熟悉Go語言的工程師掌握語法基礎。
第二篇包括3章:Go Web編程、並發編程模式、分佈式系統。
通過本篇的學習可以讓讀者了解使用Go語言如何進行Web開發、
Go並發模式如何設計、分佈式系統使用Go如何設計。
第三篇包括5章:微服務介紹、Linux基礎、Docker、Kubernetes、Go常用微服務框架。
本篇是用Go進行微服務開發的基本知識儲備,知識面教光,避免讀者查閱多本資料,整篇學習完就可以達到微服務開發的技能入門水平。
第四篇包括7章:生產環境Docker及Kubernetes安裝、基於Docker及Goland的開發測試環境搭建、
測試驅動開發和IM系統核心功能的微服務化、持續化交付、事件驅動架構、日誌和監控、安全。
本篇是微服務實戰,以IM系統為例,從系統安裝、如何測試、如何迭代、如何運維都進行了介紹。

作者簡介

劉金亮

研究生畢業於北京大學,現任用友集團架構師。
曾經參與IBM、Accenture、Capgemini的軟件系統諮詢和開發項目,對複雜業務系統的架構和設計有豐富的經驗,
著有《Odoo快速入門與實戰》。

目錄大綱

前言
第一部分 Go語言基礎
第1章 Go語言程序基礎 2
1.1 Hello,World! 2
1.2 變量、指針及賦值 5
1.2.1 變量和常量 5
1.2.2 指針 8
1.2.3 賦值 9
1.3 包及作用域 10
1.4 選擇和循環 12
1.5 垃圾回收 13
1.6 小結 15

第2章 基本數據類型 16
2.1 整型 17
2.1.1 整型取值範圍 17
2.1.2 運算符 18
2.2 浮點型 19
2.3 復數和布爾類型 21
2.4 格式化說明符 22
2.5 小結 22

第3章 字符串與復合數據類型 23
3.1 字符串和數組 23
3.1.1 字符串 24
3.1.2 數組 26
3.2 slice 27
3.2.1 結構定義 27
3.2.2 基本操作 28
3.2.3 append 30
3.2.4 copy 31
3.2.5 其他 32
3.3 map 33
3.3.1 定義 33
3.3.2 基本操作 33
3.4 struct 35
3.4.1 結構定義 36
3.4.2 基本操作 37
3.4.3 組合 38
3.5 JSON 40
3.6 小結 40

第4章 函數、方法、接口和反射 41
4.1 函數 41
4.1.1 函數的定義 41
4.1.2 閉包 42
4.1.3 作用域 43
4.1.4 多返回值及變長參數 45
4.1.5 defer關鍵字 46
4.2 方法 46
4.3 接口 50
4.4 反射 54
4.5 小結 57

第5章 並發編程 59
5.1 協程 59
5.1.1 核心概念 60
5.1.2 goroutine的基本使用 60
5.1.3 sync.WaitGroup 62
5.2 通道 64
5.2.1 channel寫入數據 64
5.2.2 channel接收數據 65
5.2.3 以channel作為函數參數 66
5.2.4 緩存channel 67
5.2.5 select 70
5.2.6 超時檢查 71
5.3 pipeline 74
5.4 小結 76

第6章 包和代碼測試 77
6.1 包及Go工具 77
6.1.1 包導入 78
6.1.2 Go工具 79
6.2 代碼優化 84
6.2.1 Go代碼的優化 84
6.2.2 性能分析 84
6.3 測試 90
6.3.1 功能測試函數 91
6.3.2 基準測試函數 93
6.3.3 示例函數 96
6.4 小結 98
第7章 綜合實戰案例 99
7.1 案例需求 99
7.2 通信協議 100
7.3 服務器端 104
7.4 客戶端 109
7.5 小結 116

第二部分 Go語言進階
第8章 並發編程進階 118
8.1 競態與並發模式 118
8.1.1 數據競態 118
8.1.2 並發原理 123
8.2 sync包 126
8.2.1 sync.Mutex互斥鎖 126
8.2.2 sync.RWMutex多讀寫鎖 128
8.2.3 sync.Once 130
8.2.4 sync.Cond 131
8.2.5 sync.Pool 134
8.2.6 sync.Map 136
8.3 context包 138
8.3.1 應用場景 138
8.3.2 定義 139
8.3.3 繼承 141
8.3.4 示例 142
8.4 工作池 145
8.5 小結 151

第9章 Go Web編程 152
9.1 net/http包 152
9.1.1 Go Web工作的基本原理 152
9.1.2 http詳解 156
9.2 Web框架 162
9.2.1 選擇框架 162
9.2.2 httprouter框架 163
9.3 Web底層服務 165
9.3.1 Scoket簡介 165
9.3.2 TCP Socket 166
9.3.3 UDP Socket 169
9.3.4 WebSocket 171
9.4 中間件 174
9.4.1 基本用法 174
9.4.2 進階用法 176
9.5 數據庫訪問 179
9.5.1 database/sql接口 180
9.5.2 sqlx 182
9.6 小結 183

第10章 綜合案例 184
10.1 案例需求 184
10.2 項目代碼佈局 186
10.3 配置和日誌 187
10.3.1 配置 188
10.3.2 日誌 190
10.4 模型 191
10.5 gin框架 193
10.6 小結 196

第三部分 微服務理論
第11章 微服務 198
11.1 微服務簡介 198
11.1.1 什麽是微服務 198
11.1.2 微服務的由來 198
11.1.3 微服務與微服務架構 199
11.2 系統架構的演進 199
11.2.1 單體架構 200
11.2.2 垂直架構 201
11.2.3 SOA 201
11.2.4 微服務架構 202
11.3 小結 205

第12章 微服務化策略 206
12.1 微服務架構風格 206
12.1.1 每個服務都擁有獨立的數據庫 206
12.1.2 基於API的模塊化 207
12.2 微服務化進程中的重點問題 207
12.2.1 微服務的通信 207
12.2.2 事務管理的一致性 208
12.2.3 微服務數據查詢 208
12.2.4 微服務部署 208
12.2.5 微服務生產環境監控 209
12.2.6 微服務的自動化測試 209
12.3 微服務的拆分 209
12.3.1 拆分的指導原則 210
12.3.2 依據業務能力拆分 210
12.3.3 依據領域驅動設計拆分 211
12.3.4 服務API的定義 213
12.4 小結 214

第13章 微服務中的進程間通信 215
13.1 微服務中的進程間通信概述 215
13.1.1 交互模式 215
13.1.2 API定義 217
13.2 protobuf格式 217
13.2.1 protobuf簡介 217
13.2.2 protobuf的簡單使用 217
13.3 gRPC包 219
13.3.1 net/rpc包 219
13.3.2 gRPC簡介 221
13.3.3 Go語言實現gRPC調用 222
13.4 微服務發現:consul 224
13.5 小結 226

第14章 微服務中的分佈式事務管理 227
14.1 微服務下的事務管理 227
14.1.1 面臨的難題 227
14.1.2 SRP的折衷 228
14.2 微服務中處理事務的幾種方式 229
14.2.1 避免跨微服務的事務 229
14.2.2 基於XA協議的兩階段提交協議 229
14.2.3 最終一致性和補償 231
14.3 Saga模式 234
14.3.1 Saga模式介紹 234
14.3.2 編排模式 235
14.3.3 編配模式 237
14.4 Saga模式的Go語言示例 238
14.4.1 Saga對象的Go語言實現 238
14.4.2 中央協調器的Go語言實現 239
14.5 小結 243

第15章 領域驅動設計的Go語言實現 244
15.1 聚合模式介紹 244
15.2 使用聚合模式 247
15.2.1 聚合擁有明確的邊界 247
15.2.2 聚合的規則 248
15.2.3 聚合顆粒度 250
15.2.4 使用聚合設計業務邏輯 250
15.3 領域事件 251
15.4 Go語言領域模型的模擬實現 252
15.4.1 聚合 253
15.4.2 實體和值對象 253
15.4.3 服務 255
15.5 小結 257

第16章 微服務中的測試 258
16.1 測試金字塔 258
16.2 單元測試 260
16.3 依賴註入和mock測試 263
16.4 行為驅動開發 266
16.5 使用Docker Compose測試 272
16.6 小結 275

第17章 微服務運行環境:Docker 276
17.1 Docker介紹 276
17.1.1 Docker引擎 276
17.1.2 守護進程 277
17.1.3 鏡像及容器 277
17.1.4 倉庫 278
17.1.5 數據捲 278
17.2 運行第一個Docker容器 279
17.2.1 Docker安裝 279
17.2.2 HelloWorld程序示例 279
17.2.3 運行復雜一點的容器 280
17.3 Docker數據持久化 282
17.3.1 數據捲 282
17.3.2 bind mount 284
17.4 Docker網絡 285
17.4.1 橋接驅動及自定義bridge 285
17.4.2 Host模式、Overlay模式及None模式 288
17.5 小結 289

第18章 Go語言基於ES-CQRS的微服務實踐 290
18.1 理論介紹 290
18.1.1 事件溯源 290
18.1.2 命令查詢職責分離 291
18.2 ES-CQRS在Go語言中的實現示例 292
18.2.1 需求 293
18.2.2 分析與設計 293
18.2.3 核心實現 296
18.3 小結 299

第四部分 微服務實戰
第19章 生產環境的微服務安全 302
19.1 加密和簽名 302
19.1.1 對稱密鑰加密 302
19.1.2 公鑰密碼 303
19.1.3 X.509數字證書 303
19.1.4 TLS/SSL 304
19.2 外部安全 304
19.2.1 防火牆 304
19.2.2 頁面應用的防火牆 305
19.2.3 API網關 305
19.2.4 DDoS保護 306
19.3 應用安全 307
19.3.1 攻擊者如何繞過防火牆 308
19.3.2 輸入校驗 308
19.3.3 TLS 310
19.3.4 在rest中進行數據保護 313
19.3.5 JWT 314
19.3.6 大消息的非對稱加密 315
19.4 運維安全 316
19.4.1 修補容器 316
19.4.2 軟件更新 317
19.4.3 修補應用程序代碼 317
19.4.4 日誌 317
19.5 小結 317

第20章 日誌和監控 318
20.1 日誌最佳實踐 319
20.2 指標 319
20.2.1 指標數據類型 320
20.2.2 命名約定 320
20.2.3 存儲和查詢 322
20.2.4 Grafana 323
20.3 日誌記錄 326
20.3.1 具有關聯ID的分佈式跟蹤 326
20.3.2 ElasticSearch、Logstash和Kibana 327
20.3.3 Kibana 328
20.4 異常 330
20.5 小結 332

第21章 持續交付 333
21.1 持續交付簡介 333
21.1.1 手動部署 334
21.1.2 持續交付的好處 334
21.1.3 持續交付面面觀 335
21.1.4 持續交付的過程 337
21.2 容器編排的選項和基礎架構 338
21.3 Terraform 339
21.3.1 提供者 340
21.3.2 Terraform配置入口點 341
21.3.3 VPC模塊 342
21.3.4 輸出變量 346
21.3.5 創建基礎架構 348
21.4 應用範例 348
21.4.1 持續部署的工作流程 349
21.4.2 構建 352
21.4.3 測試 353
21.4.4 基準測試 354
21.4.5 靜態代碼測試 354
21.4.6 集成測試 355
21.4.7 部署 356
21.4.8 冒煙測試 357
21.4.9 監控和預警 357
21.5 小結 359

第22章 使用Go kit框架構建微服務 360
22.1 創建服務 361
22.1.1 測試 361
22.1.2 Go語言中的構造函數 362
22.1.3 使用bcrypt進行Hash處理並驗證密碼 363
22.2 使用請求和響應對方法調用進行建模 364
22.2.1 Go kit中的端點 365
22.2.2 為服務方法設定終點 366
22.2.3 不同級別的錯誤 366
22.2.4 將端點包裝到服務實現中 367
22.3 使用Go kit實現一個HTTP服務器 368
22.4 Go kit中的gRPC服務器 368
22.5 創建服務器命令 371
22.5.1 使用Go kit端點 373
22.5.2 運行HTTP服務器 373
22.5.3 運行gRPC服務器 373
22.5.4 防止main函數突然終止 374
22.5.5 通過HTTP使用服務 374
22.6 構建一個gRPC客戶端 375
22.6.1 使用服務的命令行工具 376
22.6.2 在CLI中解析參數 377
22.7 服務中間件的速率限制 378
22.7.1 Go kit中的中間件 378
22.7.2 速率限制 380
22.8 小結 380
附錄 Go語言中的關鍵字 381