《微服務(wù)實戰(zhàn)》主要介紹如何開發(fā)和維護(hù)基于微服務(wù)的應(yīng)用。本書源自作者從日常開發(fā)中得到的積累和感悟,其中給出的案例覆蓋從微服務(wù)設(shè)計到部署的各個階段,能夠帶給你真實的沉浸式體驗。通過閱讀本書,你不僅能夠了解用微服務(wù)搭建高效的持續(xù)交付流水線的方法,還能夠運(yùn)用Kubernetes、Docker 以及Google Container Engine 進(jìn)一步探索書中的示例。
·本書涵蓋微服務(wù)設(shè)計到部署的各個階段,貫穿全書的真實案例,實戰(zhàn)性較強(qiáng)。
·本書作者技術(shù)背景深厚,均在英國著名身份識別與認(rèn)證公司Onfido擔(dān)任技術(shù)方向的負(fù)責(zé)人。該公司用機(jī)器學(xué)習(xí)主要從事圖像識別、面部識別等技術(shù)的開發(fā)。
·源自作者日常開發(fā)中得到的積累和感悟,帶給你真實的沉浸式體驗。
·示例代碼基于Python語言,可在異步社區(qū)輕松下載。
摩根·布魯斯 (Morgan Bruce)和保羅·A. 佩雷拉 (Paulo A. Pereira)都是經(jīng)驗豐富的開發(fā)團(tuán)隊領(lǐng)導(dǎo)者,他們的主要工作是運(yùn)用本書中介紹的技術(shù)將微服務(wù)應(yīng)用到生產(chǎn)環(huán)境中。
第 一部分 概述
第 1章 微服務(wù)的設(shè)計與運(yùn)行 3
1.1 什么是微服務(wù)應(yīng)用 4
1.1.1 通過分解來實現(xiàn)擴(kuò)展 6
1.1.2 核心原則 7
1.1.3 誰在使用微服務(wù) 9
1.1.4 為什么微服務(wù)是一個明智的選擇 10
1.2 微服務(wù)的挑戰(zhàn) 12
1.2.1 設(shè)計挑戰(zhàn) 13
1.2.2 運(yùn)維挑戰(zhàn) 15
1.3 微服務(wù)開發(fā)生命周期 16
1.3.1 微服務(wù)設(shè)計 17
1.3.2 微服務(wù)部署 18
1.3.3 服務(wù)監(jiān)控 21
1.4 有責(zé)任感和運(yùn)維意識的工程師文化 22
1.5 小結(jié) 23
第 2章 SimpleBank公司的微服務(wù) 24
2.1 SimpleBank公司的業(yè)務(wù)范圍 24
2.2 微服務(wù)是否是正確的選擇 25
2.2.1 金融軟件的風(fēng)險和惰性 26
2.2.2 減少阻力和持續(xù)交付價值 27
2.3 開發(fā)新功能 27
2.3.1 通過領(lǐng)域建模識別微服務(wù) 28
2.3.2 服務(wù)協(xié)作 30
2.3.3 服務(wù)編排 32
2.4 向外界開放服務(wù) 34
2.5 將功能發(fā)布到生產(chǎn)環(huán)境中 35
2.5.1 高質(zhì)量的自動化部署 37
2.5.2 可恢復(fù)性 37
2.5.3 透明性 38
2.6 大規(guī)模微服務(wù)開發(fā) 39
2.6.1 技術(shù)分歧 40
2.6.2 孤立 40
2.7 接下來的內(nèi)容 41
2.8 小結(jié) 41
第二部分 設(shè)計
第3章 微服務(wù)應(yīng)用的架構(gòu) 45
3.1 整體架構(gòu) 45
3.1.1 從單體應(yīng)用到微服務(wù) 46
3.1.2 架構(gòu)師的角色 47
3.1.3 架構(gòu)準(zhǔn)則 47
3.1.4 微服務(wù)應(yīng)用的4層架構(gòu) 48
3.2 微服務(wù)平臺 49
3.3 服務(wù)層 51
3.3.1 功能 51
3.3.2 聚合與多元服務(wù) 52
3.3.3 關(guān)鍵路徑和非關(guān)鍵路徑 53
3.4 通信 54
3.4.1 何時使用同步消息 54
3.4.2 何時使用異步消息 55
3.4.3 異步通信模式 55
3.4.4 服務(wù)定位 57
3.5 服務(wù)邊界 58
3.5.1 API網(wǎng)關(guān) 60
3.5.2 服務(wù)于前端的后端 61
3.5.3 消費(fèi)者驅(qū)動網(wǎng)關(guān) 62
3.6 客戶端 63
3.6.1 前端單體 63
3.6.2 微前端 64
3.7 小結(jié) 65
第4章 新功能設(shè)計 66
4.1 SimpleBank的新功能 67
4.2 按業(yè)務(wù)能力劃分 68
4.2.1 能力和領(lǐng)域建!69
4.2.2 創(chuàng)建投資策略 70
4.2.3 內(nèi)嵌型上下文和服務(wù) 75
4.2.4 挑戰(zhàn)和不足 76
4.3 按用例劃分 77
4.3.1 按投資策略下單 77
4.3.2 動作和存儲 82
4.3.3 編配與編排 83
4.4 按易變性劃分 84
4.5 按技術(shù)能力劃分 85
4.5.1 發(fā)送通知 85
4.5.2 何時使用技術(shù)能力 86
4.6 處理不確定性 87
4.6.1 從粗粒度服務(wù)開始 88
4.6.2 準(zhǔn)備進(jìn)一步分解 88
4.6.3 下線和遷移 89
4.7 組織中的服務(wù)所有權(quán) 91
4.8 小結(jié) 92
第5章 微服務(wù)的事務(wù)與查詢 93
5.1 分布式應(yīng)用的事務(wù)一致性 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 保存數(shù)據(jù)副本 108
5.4.2 查詢和命令分離 110
5.4.3 CQRS挑戰(zhàn) 112
5.4.4 分析和報表 114
5.5 延伸閱讀 114
5.6 小結(jié) 114
第6章 設(shè)計高可靠服務(wù) 116
6.1 可靠性定義 117
6.2 哪些會出錯 119
6.2.1 故障源 119
6.2.2 連鎖故障 122
6.3 設(shè)計可靠的通信方案 125
6.3.1 重試 126
6.3.2 后備方案 128
6.3.3 超時 130
6.3.4 斷路器 132
6.3.5 異步通信 134
6.4 最大限度地提高服務(wù)可靠性 135
6.4.1 負(fù)載均衡與服務(wù)健康 135
6.4.2 限流 136
6.4.3 驗證可靠性和容錯性 137
6.5 默認(rèn)安全 140
6.5.1 框架 140
6.5.2 服務(wù)網(wǎng)格 141
6.6 小結(jié) 142
第7章 構(gòu)建可復(fù)用的微服務(wù)框架 143
7.1 微服務(wù)底座 144
7.2 微服務(wù)底座的目的 146
7.2.1 降低風(fēng)險 147
7.2.2 快速啟動 147
7.3 設(shè)計服務(wù)底座 148
7.3.1 服務(wù)發(fā)現(xiàn) 149
7.3.2 可觀測性 153
7.3.3 平衡和限流 159
7.4 探索使用底座實現(xiàn)的特性 161
7.5 差異性是否是微服務(wù)的承諾 163
7.6 小結(jié) 164
第三部分 部署
第8章 微服務(wù)部署 167
8.1 部署的重要性 167
8.2 微服務(wù)生產(chǎn)環(huán)境 169
8.2.1 微服務(wù)生產(chǎn)環(huán)境的特點 169
8.2.2 自動化和速度 170
8.3 部署服務(wù)的快捷方式 171
8.3.1 服務(wù)啟動 171
8.3.2 配置虛擬機(jī) 172
8.3.3 運(yùn)行多個服務(wù)實例 173
8.3.4 添加負(fù)載均衡器 175
8.3.5 開發(fā)者學(xué)到了什么 177
8.4 構(gòu)建服務(wù)工件 178
8.4.1 工件的組成 179
8.4.2 不可變性 179
8.4.3 服務(wù)工件的類型 180
8.4.4 配置 184
8.5 服務(wù)與主機(jī)關(guān)系模型 185
8.5.1 單服務(wù)主機(jī) 185
8.5.2 單主機(jī)多靜態(tài)服務(wù) 185
8.5.3 單主機(jī)多調(diào)度化服務(wù) 186
8.6 不停機(jī)部署服務(wù) 187
8.7 小結(jié) 190
第9章 基于容器和調(diào)度器的部署 191
9.1 服務(wù)容器化 192
9.1.1 鏡像使用 192
9.1.2 構(gòu)建鏡像 194
9.1.3 運(yùn)行容器 197
9.1.4 鏡像存儲 199
9.2 集群部署 200
9.2.1 pod的設(shè)計與運(yùn)行 201
9.2.2 負(fù)載均衡 204
9.2.3 快速揭秘 205
9.2.4 健康檢查 208
9.2.5 部署新版本服務(wù) 210
9.2.6 回滾 215
9.2.7 連接多個服務(wù) 215
9.3 小結(jié) 216
第 10章 構(gòu)建微服務(wù)交付流水線 217
10.1 讓部署變得平淡 217
10.2 使用Jenkins構(gòu)建流水線 219
10.2.1 構(gòu)建流水線配置 220
10.2.2 構(gòu)建鏡像 223
10.2.3 運(yùn)行測試 224
10.2.4 發(fā)布工件 226
10.2.5 部署至預(yù)發(fā)布環(huán)境 227
10.2.6 預(yù)發(fā)布環(huán)境 230
10.2.7 部署生產(chǎn)環(huán)境 230
10.3 構(gòu)建可復(fù)用的流水線步驟 233
10.4 降低部署影響以及實現(xiàn)功能發(fā)布的
技術(shù) 235
10.4.1 暗發(fā)布 235
10.4.2 功能標(biāo)記 236
10.5 小結(jié) 237
第四部分 可觀測性和所有權(quán)
第 11章 構(gòu)建監(jiān)控系統(tǒng) 241
11.1 穩(wěn)固的監(jiān)控技術(shù)!241
11.1.1 良好的分層監(jiān)控 243
11.1.2 黃金標(biāo)志 244
11.1.3 度量指標(biāo)的類型 244
11.1.4 實踐建議 245
11.2 利用Prometheus和Grafana監(jiān)控
SimpleBank 246
11.2.1 配置度量指標(biāo)收集基礎(chǔ)
設(shè)施 247
11.2.2 收集基礎(chǔ)設(shè)施度量
指標(biāo)——RabbitMQ 253
11.2.3 監(jiān)控下單功能 255
11.2.4 告警設(shè)置 257
11.3 生成合理的可執(zhí)行的告警 261
11.3.1 系統(tǒng)出錯時哪些人需要
知悉 261
11.3.2 癥狀,而非原因 262
11.4 監(jiān)測整個應(yīng)用 262
11.5 小結(jié) 264
第 12章 使用日志和鏈路追蹤了解系統(tǒng)
行為 265
12.1 了解服務(wù)間的行為 265
12.2 生成一致的、結(jié)構(gòu)化的、人類可讀的
日志 268
12.2.1 日志中的有用信息 268
12.2.2 結(jié)構(gòu)化和可讀性 269
12.3 為SimpleBank配置日志基礎(chǔ)設(shè)施 271
12.3.1 基于ELK和Fluentd的解決
方案 272
12.3.2 配置日志解決方案 274
12.3.3 配置應(yīng)收集哪些日志 276
12.3.4 大海撈針 279
12.3.5 記錄合適的信息 281
12.4 服務(wù)間的跟蹤交互 281
12.4.1 請求關(guān)聯(lián):trace和span 282
12.4.2 在服務(wù)內(nèi)配置鏈路追蹤 283
12.5 鏈路追蹤可視化 287
12.6 小結(jié) 291
第 13章 微服務(wù)團(tuán)隊建設(shè) 292
13.1 建設(shè)高效團(tuán)隊 292
13.1.1 康威定律 294
13.1.2 高效團(tuán)隊原則 294
13.2 團(tuán)隊模型 296
13.2.1 按職能分組 296
13.2.2 跨職能分組 298
13.2.3 設(shè)置團(tuán)隊邊界 299
13.2.4 基礎(chǔ)設(shè)施、平臺和產(chǎn)品 300
13.2.5 誰負(fù)責(zé)值班 302
13.2.6 知識共享 303
13.3 微服務(wù)團(tuán)隊的實踐建議 304
13.3.1 微服務(wù)變更的驅(qū)動力 305
13.3.2 架構(gòu)的角色 305
13.3.3 同質(zhì)性與技術(shù)靈活性 307
13.3.4 開源模型 307
13.3.5 設(shè)計評審 308
13.3.6 動態(tài)文檔 309
13.3.7 回答應(yīng)用的問題 310
13.4 延伸閱讀 311
13.5 小結(jié) 311
附錄A 在Minikube上安裝Jenkins 312