第一部分 概述
第1章 微服務的設計與運行 3
1.1 什麼是微服務應用 4
1.1.1 通過分解來實現擴展 6
1.1.2 核心原則 7
1.1.3 誰在使用微服務 9
1.1.4 為什麼微服務是一個明智的選擇 10
1.2 微服務的挑戰 12
1.2.1 設計挑戰 13
1.2.2 運維挑戰 15
1.3 微服務開發生命周期 16
1.3.1 微服務設計 17
1.3.2 微服務部署 18
1.3.3 服務監控 21
1.4 有責任感和運維意識的工程師文化 22
1.5 小結 23
第2章 SimpleBank公司的微服務 24
2.1 SimpleBank公司的業務範圍 24
2.2 微服務是否是正確的選擇 25
2.2.1 金融軟件的風險和惰性 26
2.2.2 減少阻力和持續交付價值 27
2.3 開發新功能 27
2.3.1 通過領域建模識彆微服務 28
2.3.2 服務協作 30
2.3.3 服務編排 32
2.4 嚮外界開放服務 34
2.5 將功能發布到生産環境中 35
2.5.1 高質量的自動化部署 37
2.5.2 可恢復性 37
2.5.3 透明性 38
2.6 大規模微服務開發 39
2.6.1 技術分歧 40
2.6.2 孤立 40
2.7 接下來的內容 41
2.8 小結 41
第二部分 設計
第3章 微服務應用的架構 45
3.1 整體架構 45
3.1.1 從單體應用到微服務 46
3.1.2 架構師的角色 47
3.1.3 架構準則 47
3.1.4 微服務應用的4層架構 48
3.2 微服務平颱 49
3.3 服務層 51
3.3.1 功能 51
3.3.2 聚閤與多元服務 52
3.3.3 關鍵路徑和非關鍵路徑 53
3.4 通信 54
3.4.1 何時使用同步消息 54
3.4.2 何時使用異步消息 55
3.4.3 異步通信模式 55
3.4.4 服務定位 57
3.5 服務邊界 58
3.5.1 API網關 60
3.5.2 服務於前端的後端 61
3.5.3 消費者驅動網關 62
3.6 客戶端 63
3.6.1 前端單體 63
3.6.2 微前端 64
3.7 小結 65
第4章 新功能設計 66
4.1 SimpleBank的新功能 67
4.2 按業務能力劃分 68
4.2.1 能力和領域建模 69
4.2.2 創建投資策略 70
4.2.3 內嵌型上下文和服務 75
4.2.4 挑戰和不足 76
4.3 按用例劃分 77
4.3.1 按投資策略下單 77
4.3.2 動作和存儲 82
4.3.3 編配與編排 83
4.4 按易變性劃分 84
4.5 按技術能力劃分 85
4.5.1 發送通知 85
4.5.2 何時使用技術能力 86
4.6 處理不確定性 87
4.6.1 從粗粒度服務開始 88
4.6.2 準備進一步分解 88
4.6.3 下綫和遷移 89
4.7 組織中的服務所有權 91
4.8 小結 92
第5章 微服務的事務與查詢 93
5.1 分布式應用的事務一緻性 94
5.2 基於事件的通信 96
5.3 Saga 98
5.3.1 編排型Saga 100
5.3.2 編配型Saga 102
5.3.3 交織型Saga 104
5.3.4 一緻性模式 105
5.3.5 事件溯源 106
5.4 分布式世界中的查詢操作 107
5.4.1 保存數據副本 108
5.4.2 查詢和命令分離 110
5.4.3 CQRS挑戰 112
5.4.4 分析和報錶 114
5.5 延伸閱讀 114
5.6 小結 114
第6章 設計高可靠服務 116
6.1 可靠性定義 117
6.2 哪些會齣錯 119
6.2.1 故障源 119
6.2.2 連鎖故障 122
6.3 設計可靠的通信方案 125
6.3.1 重試 126
6.3.2 後備方案 128
6.3.3 超時 130
6.3.4 斷路器 132
6.3.5 異步通信 134
6.4 最大限度地提高服務可靠性 135
6.4.1 負載均衡與服務健康 135
6.4.2 限流 136
6.4.3 驗證可靠性和容錯性 137
6.5 默認安全 140
6.5.1 框架 140
6.5.2 服務網格 141
6.6 小結 142
第7章 構建可復用的微服務框架 143
7.1 微服務底座 144
7.2 微服務底座的目的 146
7.2.1 降低風險 147
7.2.2 快速啓動 147
7.3 設計服務底座 148
7.3.1 服務發現 149
7.3.2 可觀測性 153
7.3.3 平衡和限流 159
7.4 探索使用底座實現的特性 161
7.5 差異性是否是微服務的承諾 163
7.6 小結 164
第三部分 部署
第8章 微服務部署 167
8.1 部署的重要性 167
8.2 微服務生産環境 169
8.2.1 微服務生産環境的特點 169
8.2.2 自動化和速度 170
8.3 部署服務的快捷方式 171
8.3.1 服務啓動 171
8.3.2 配置虛擬機 172
8.3.3 運行多個服務實例 173
8.3.4 添加負載均衡器 175
8.3.5 開發者學到瞭什麼 177
8.4 構建服務工件 178
8.4.1 工件的組成 179
8.4.2 不可變性 179
8.4.3 服務工件的類型 180
8.4.4 配置 184
8.5 服務與主機關係模型 185
8.5.1 單服務主機 185
8.5.2 單主機多靜態服務 185
8.5.3 單主機多調度化服務 186
8.6 不停機部署服務 187
8.7 小結 190
第9章 基於容器和調度器的部署 191
9.1 服務容器化 192
9.1.1 鏡像使用 192
9.1.2 構建鏡像 194
9.1.3 運行容器 197
9.1.4 鏡像存儲 199
9.2 集群部署 200
9.2.1 pod的設計與運行 201
9.2.2 負載均衡 204
9.2.3 快速揭秘 205
9.2.4 健康檢查 208
9.2.5 部署新版本服務 210
9.2.6 迴滾 215
9.2.7 連接多個服務 215
9.3 小結 216
第10章 構建微服務交付流水綫 217
10.1 讓部署變得平淡 217
10.2 使用Jenkins構建流水綫 219
10.2.1 構建流水綫配置 220
10.2.2 構建鏡像 223
10.2.3 運行測試 224
10.2.4 發布工件 226
10.2.5 部署到預發布環境 227
10.2.6 預發布環境 230
10.2.7 部署生産環境 230
10.3 構建可復用的流水綫步驟 233
10.4 降低部署影響以及實現功能發布的技術 235
10.4.1 暗發布 235
10.4.2 功能標記 236
10.5 小結 237
第四部分 可觀測性和所有權
第11章 構建監控係統 241
11.1 穩固的監控技術棧 241
11.1.1 良好的分層監控 243
11.1.2 黃金標誌 244
11.1.3 度量指標的類型 244
11.1.4 實踐建議 245
11.2 利用Prometheus和Grafana監控SimpleBank 246
11.2.1 配置度量指標收集基礎設施 247
11.2.2 收集基礎設施度量指標——RabbitMQ 253
11.2.3 監控下單功能 255
11.2.4 告警設置 257
11.3 生成閤理的可執行的告警 261
11.3.1 係統齣錯時哪些人需要知悉 261
11.3.2 癥狀,而非原因 262
11.4 監測整個應用 262
11.5 小結 264
第12章 使用日誌和鏈路追蹤瞭解係統行為 265
12.1 瞭解服務間的行為 265
12.2 生成一緻的、結構化的、人類可讀的日誌 268
12.2.1 日誌中的有用信息 268
12.2.2 結構化和可讀性 269
12.3 為SimpleBank配置日誌基礎設施 271
12.3.1 基於ELK和Fluentd的解決方案 272
12.3.2 配置日誌解決方案 274
12.3.3 配置應收集哪些日誌 276
12.3.4 大海撈針 279
12.3.5 記錄閤適的信息 281
12.4 服務間的跟蹤交互 281
12.4.1 請求關聯:trace和span 282
12.4.2 在服務內配置鏈路追蹤 283
12.5 鏈路追蹤可視化 287
12.6 小結 291
第13章 微服務團隊建設 292
13.1 建設高效團隊 292
13.1.1 康威定律 294
13.1.2 高效團隊原則 294
13.2 團隊模型 296
13.2.1 按職能分組 296
13.2.2 跨職能分組 298
13.2.3 設置團隊邊界 299
13.2.4 基礎設施、平颱和産品 300
13.2.5 誰負責值班 302
13.2.6 知識共享 303
13.3 微服務團隊的實踐建議 304
13.3.1 微服務變更的驅動力 305
13.3.2 架構的角色 305
13.3.3 同質性與技術靈活性 307
13.3.4 開源模型 307
13.3.5 設計評審 308
13.3.6 動態文檔 309
13.3.7 迴答應用的問題 310
13.4 延伸閱讀 311
13.5 小結 311
附錄A 在Minikube上安裝Jenkins 312
· · · · · · (
收起)