本書(shū)力求揭示微服務(wù)設(shè)計(jì)背后的思想,引導(dǎo)讀者理解和構(gòu)建微服務(wù)。全書(shū)分為兩部分。第一部分介紹微服務(wù)的工程原則,從具體的案例研究引入微服務(wù)的概念及優(yōu)缺點(diǎn),闡示了如何決定要構(gòu)建哪些微服務(wù)及服務(wù)間的通信,介紹了消息優(yōu)先的方法,展示了微服務(wù)如何以更恰當(dāng)?shù)姆绞酱鎯?chǔ)和處理不同類型的數(shù)據(jù),探討了如何在生產(chǎn)環(huán)境中運(yùn)行大量微服務(wù)。第二部分介紹如何利用微服務(wù)架構(gòu)的工程優(yōu)勢(shì)來(lái)克服環(huán)境帶來(lái)的挑戰(zhàn),以及度量微服務(wù)系統(tǒng)的方法,指導(dǎo)讀者一步步地從老的單體系統(tǒng)過(guò)渡到能夠輕松適應(yīng)新功能需求的微服務(wù)系統(tǒng),最后使用前面章節(jié)介紹的原則,從頭開(kāi)始構(gòu)建了一個(gè)完整的微服務(wù)系統(tǒng)。
1.微服務(wù)專家理查德·羅杰(Richard Rodger)的寶貴經(jīng)驗(yàn)的結(jié)晶,手把手教你如何構(gòu)建微服務(wù)系統(tǒng)
2.內(nèi)容豐富,知識(shí)點(diǎn)系統(tǒng)、有條理,力求揭示微服務(wù)設(shè)計(jì)背后的思想
3.提供案例的源代碼和文檔資源,易學(xué)易用
理查德·羅杰(Richard Rodger)曾在愛(ài)爾蘭都柏林三一學(xué)院學(xué)習(xí)數(shù)學(xué)和哲學(xué),在愛(ài)爾蘭沃特福德理工學(xué)院學(xué)習(xí)計(jì)算機(jī)科學(xué)。1986 年開(kāi)始在 Sinclair ZX Spectrum 上寫(xiě)代碼至今;Seneca 微服務(wù)框架的維護(hù)者。會(huì)展業(yè)社交網(wǎng)絡(luò)公司voxgig的首席執(zhí)行官,擁有多年為大型跨國(guó)公司構(gòu)建微服務(wù)系統(tǒng)的經(jīng)驗(yàn)。曾任移動(dòng)應(yīng)用 SaaS平臺(tái) FeedHenry(后來(lái)被 Red Hat 收購(gòu))的首席技術(shù)官,后與他人聯(lián)合創(chuàng)立了nearForm—— 關(guān)于 Node.js 和微服務(wù)的咨詢公司。他還著有Mobile Application Development in the Cloud(《移動(dòng)云計(jì)算應(yīng)用開(kāi)發(fā)入門經(jīng)典》)(Wiley,2011)一書(shū)。
第 一部分 構(gòu)建微服務(wù)
第 1 章 美麗新世界 3
1.1 技術(shù)債務(wù)危機(jī) 3
1.2 案例研究:微博初創(chuàng)公司 5
1.2.1 迭代 0:發(fā)布條目 6
1.2.2 迭代 1:搜索索引 9
1.2.3 迭代 2:簡(jiǎn)單組合 11
1.2.4 迭代 3:時(shí)間線 14
1.2.5 迭代 4:擴(kuò)展 16
1.3 單體如何違背組件的承諾 18
1.4 微服務(wù)理念 20
核心技術(shù)原則 21
1.5 實(shí)際意義 24
1.5.1 規(guī)范 25
1.5.2 部署 26
1.5.3 安全 27
1.5.4 人 27
1.6 你的錢換來(lái)了什么 28
1.7 總結(jié) 29
第 2 章 服務(wù) 30
2.1 定義微服務(wù) 30
2.2 案例研究:數(shù)字版報(bào)紙 32
2.2.1 業(yè)務(wù)目標(biāo) 32
2.2.2 非正式需求 33
2.2.3 功能分解 33
2.3 微服務(wù)架構(gòu) 34
迷你 Web 服務(wù)器架構(gòu) 34
2.4 微服務(wù)示意圖 35
2.5 微服務(wù)依賴樹(shù) 36
異步消息架構(gòu) 39
2.6 單體項(xiàng)目與微服務(wù)項(xiàng)目 41
2.6.1 微服務(wù)如何改變項(xiàng)目管理 43
2.6.2 一致性使評(píng)估更容易 43
2.6.3 一次性代碼讓團(tuán)隊(duì)更和諧 44
2.6.4 同質(zhì)組件允許異構(gòu)配置 44
2.6.5 不同類型的代碼 45
2.7 軟件單元 46
2.8 從需求到消息再到服務(wù) 47
2.9 微服務(wù)架構(gòu)圖 49
繪制消息流圖 52
2.10 微服務(wù)是軟件組件 53
2.10.1 封裝 53
2.10.2 可重復(fù)使用 53
2.10.3 定義明確的接口 54
2.10.4 可組合 54
2.10.5 微服務(wù)組件實(shí)踐 54
2.11 微服務(wù)的內(nèi)部結(jié)構(gòu) 57
2.12 總結(jié) 57
第 3 章 消息 59
3.1 消息是一等公民 59
3.1.1 同步和異步 60
3.1.2 何時(shí)使用同步消息 61 2
3.1.3 何時(shí)使用異步消息 62
3.1.4 從第 一天開(kāi)始就思考
分布式 63
3.1.5 減少失敗的策略 65
3.2 案例研究:銷售稅規(guī)則 66
更廣泛的背景 66
3.3 模式匹配 67
3.3.1 銷售稅:從簡(jiǎn)單開(kāi)始 68
3.3.2 銷售稅:處理類別 69
3.3.3 銷售稅:走向全球 71
3.3.4 業(yè)務(wù)需求顯然會(huì)發(fā)生變化 72
3.3.5 模式匹配降低了重構(gòu)的成本 72
3.4 傳輸獨(dú)立性 73
一個(gè)有用的虛構(gòu):無(wú)所不能的觀察者 73
3.5 消息模式 74
3.5.1 核心模式:一條消息/兩個(gè)服務(wù) 75
3.5.2 核心模式:兩條消息/兩個(gè)服務(wù) 77
3.5.3 核心模式:一條消息/n 個(gè)服務(wù) 79
3.5.4 核心模式:m 條消息/n 個(gè)服務(wù) 81
3.5.5 m/n:鏈 81
3.5.6 m/n:樹(shù) 82
3.5.7 擴(kuò)展消息 83
3.6 當(dāng)消息出問(wèn)題時(shí) 84
3.6.1 常見(jiàn)故障場(chǎng)景及如何應(yīng)對(duì) 85
3.6.2 請(qǐng)求/響應(yīng)交互故障 85
3.6.3 響尾蛇交互的故障 86
3.6.4 贏家通吃交互的故障 86
3.6.5 即發(fā)即棄交互的故障 87
3.7 總結(jié) 88
第 4 章 數(shù)據(jù) 89
4.1 數(shù)據(jù)與想象不同 90
4.1.1 數(shù)據(jù)同質(zhì)而非異質(zhì) 90
4.1.2 數(shù)據(jù)可以私有 91
4.1.3 數(shù)據(jù)可以是本地的 92
4.1.4 數(shù)據(jù)可以自由處置 94
4.1.5 數(shù)據(jù)不一定要準(zhǔn)確 94
4.2 微服務(wù)的數(shù)據(jù)策略 95
4.2.1 使用消息公開(kāi)數(shù)據(jù) 95
4.2.2 使用組合操作數(shù)據(jù) 96
4.2.3 通過(guò)系統(tǒng)配置控制數(shù)據(jù) 99
4.2.4 使用弱約束來(lái)分發(fā)數(shù)據(jù) 104
4.3 重新思考傳統(tǒng)數(shù)據(jù)模式 105
4.3.1 主鍵 106
4.3.2 外鍵 107
4.3.3 事務(wù) 108
4.3.4 事務(wù)并不像想象的
那么好 111
4.3.5 模式引起技術(shù)債務(wù) 112
4.4 微服務(wù)數(shù)據(jù)實(shí)用決策指南 113
4.4.1 全新項(xiàng)目 113
4.4.2 改造項(xiàng)目 114
4.5 總結(jié) 115
第 5 章 部署 116
5.1 事物的崩潰 116
5.2 從歷史中吸取教訓(xùn) 117
5.2.1 三英里島 117
5.2.2 軟件系統(tǒng)故障模型 121
5.2.3 冗余并不像想象的那樣 125
5.2.4 更改很可怕 126
5.3 妄想經(jīng)不起反駁 128
完美軟件的成本 129
5.4 混亂的系統(tǒng) 129
5.5 微服務(wù)和冗余 130
5.6 持續(xù)交付 131
5.6.1 管道 132
5.6.2 流程 133
5.6.3 保護(hù) 133
5.7 運(yùn)行微服務(wù)系統(tǒng) 134
5.7.1 不變性 134
5.7.2 自動(dòng)化 137
5.7.3 復(fù)原能力 141
5.7.4 驗(yàn)證 146
5.7.5 發(fā)現(xiàn) 147
5.7.6 配置 148
5.7.7 安全 149
5.7.8 階段系統(tǒng) 150
5.7.9 開(kāi)發(fā) 150
5.8 總結(jié) 152 目錄
第二部分 運(yùn)行微服務(wù)
第 6 章 測(cè)量 155
6.1 傳統(tǒng)監(jiān)控的局限性 156
6.1.1 經(jīng)典配置 156
6.1.2 平均數(shù)的問(wèn)題 158
6.1.3 使用百分位數(shù) 159
6.1.4 微服務(wù)配置 162
6.1.5 散點(diǎn)圖的威力 162
6.1.6 構(gòu)建儀表板 164
6.2 微服務(wù)的測(cè)量 164
6.2.1 業(yè)務(wù)層 165
6.2.2 消息層 165
6.2.3 服務(wù)層 172
6.3 不變量的威力 175
6.3.1 從業(yè)務(wù)邏輯中尋找不變量 176
6.3.2 從系統(tǒng)架構(gòu)中尋找不變量 177
6.3.3 可視化不變量 179
6.3.4 理解系統(tǒng) 179
6.3.5 合成驗(yàn)證 181
6.4 總結(jié) 182
第 7 章 遷移 183
7.1 經(jīng)典電子商務(wù)示例 183
7.1.1 舊架構(gòu) 184
7.1.2 軟件交付過(guò)程 185
7.2 更改目標(biāo) 186
在實(shí)踐中應(yīng)用政治 188
7.3 開(kāi)始旅程 189
7.4 扼殺者策略 190
7.4.1 部分代理 191
7.4.2 當(dāng)不能遷移時(shí)該怎么辦 192
7.4.3 新項(xiàng)目的策略 193
7.4.4 宏服務(wù)策略 195
7.5 優(yōu)化策略 197
7.6 從一般到具體 197
7.6.1 向產(chǎn)品頁(yè)面添加功能 197
7.6.2 向購(gòu)物車添加功能 200
7.6.3 處理橫向問(wèn)題 202
7.7 總結(jié) 202
第 8 章 人 204
8.1 應(yīng)對(duì)公司政治 204
8.1.1 接受硬性限制 205
8.1.2 尋找支持者 205
8.1.3 保持溝通合作 207
8.1.4 以價(jià)值為中心的交付 207
8.1.5 可接受的錯(cuò)誤率 208
8.1.6 刪減功能 208
8.1.7 停止抽象 209
8.1.8 反灌輸 209
8.1.9 外部認(rèn)可 210
8.1.10 團(tuán)隊(duì)協(xié)作 210
8.1.11 尊重公司 211
8.2 微服務(wù)的政治 211
8.2.1 誰(shuí)擁有什么 211
8.2.2 誰(shuí)在待命 213
8.2.3 誰(shuí)決定代碼內(nèi)容 214
8.3 總結(jié) 218
第 9 章 案例研究:Nodezoo.com 219
9.1 設(shè)計(jì) 220
9.1.1 業(yè)務(wù)需求是什么 220
9.1.2 消息是什么 221
9.1.3 有哪些服務(wù) 226
9.2 交付 231
9.2.1 迭代 1:本地開(kāi)發(fā) 232
9.2.2 迭代 2:測(cè)試、階段系統(tǒng)和風(fēng)險(xiǎn)測(cè)量 243
9.2.3 迭代 3:生產(chǎn)路徑 248
9.2.4 迭代 4:增強(qiáng)和適應(yīng) 253
9.2.5 迭代 5:監(jiān)控和調(diào)試 258
9.2.6 迭代 6:擴(kuò)展和性能 262
9.3 結(jié)語(yǔ) 264