本書力求揭示微服務(wù)設(shè)計背后的思想,引導讀者理解和構(gòu)建微服務(wù)。全書分為兩部分。第一部分介紹微服務(wù)的工程原則,從具體的案例研究引入微服務(wù)的概念及優(yōu)缺點,闡示了如何決定要構(gòu)建哪些微服務(wù)及服務(wù)間的通信,介紹了消息優(yōu)先的方法,展示了微服務(wù)如何以更恰當?shù)姆绞酱鎯吞幚聿煌愋偷臄?shù)據(jù),探討了如何在生產(chǎn)環(huán)境中運行大量微服務(wù)。第二部分介紹如何利用微服務(wù)架構(gòu)的工程優(yōu)勢來克服環(huán)境帶來的挑戰(zhàn),以及度量微服務(wù)系統(tǒng)的方法,指導讀者一步步地從老的單體系統(tǒng)過渡到能夠輕松適應(yīng)新功能需求的微服務(wù)系統(tǒng),最后使用前面章節(jié)介紹的原則,從頭開始構(gòu)建了一個完整的微服務(wù)系統(tǒng)。
1.微服務(wù)專家理查德·羅杰(Richard Rodger)的寶貴經(jīng)驗的結(jié)晶,手把手教你如何構(gòu)建微服務(wù)系統(tǒng)
2.內(nèi)容豐富,知識點系統(tǒng)、有條理,力求揭示微服務(wù)設(shè)計背后的思想
3.提供案例的源代碼和文檔資源,易學易用
理查德·羅杰(Richard Rodger)曾在愛爾蘭都柏林三一學院學習數(shù)學和哲學,在愛爾蘭沃特福德理工學院學習計算機科學。1986 年開始在 Sinclair ZX Spectrum 上寫代碼至今;Seneca 微服務(wù)框架的維護者。會展業(yè)社交網(wǎng)絡(luò)公司voxgig的首席執(zhí)行官,擁有多年為大型跨國公司構(gòu)建微服務(wù)系統(tǒng)的經(jīng)驗。曾任移動應(yīng)用 SaaS平臺 FeedHenry(后來被 Red Hat 收購)的首席技術(shù)官,后與他人聯(lián)合創(chuàng)立了nearForm—— 關(guān)于 Node.js 和微服務(wù)的咨詢公司。他還著有Mobile Application Development in the Cloud(《移動云計算應(yīng)用開發(fā)入門經(jīng)典》)(Wiley,2011)一書。
第 一部分 構(gòu)建微服務(wù)
第 1 章 美麗新世界 3
1.1 技術(shù)債務(wù)危機 3
1.2 案例研究:微博初創(chuàng)公司 5
1.2.1 迭代 0:發(fā)布條目 6
1.2.2 迭代 1:搜索索引 9
1.2.3 迭代 2:簡單組合 11
1.2.4 迭代 3:時間線 14
1.2.5 迭代 4:擴展 16
1.3 單體如何違背組件的承諾 18
1.4 微服務(wù)理念 20
核心技術(shù)原則 21
1.5 實際意義 24
1.5.1 規(guī)范 25
1.5.2 部署 26
1.5.3 安全 27
1.5.4 人 27
1.6 你的錢換來了什么 28
1.7 總結(jié) 29
第 2 章 服務(wù) 30
2.1 定義微服務(wù) 30
2.2 案例研究:數(shù)字版報紙 32
2.2.1 業(yè)務(wù)目標 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ù)依賴樹 36
異步消息架構(gòu) 39
2.6 單體項目與微服務(wù)項目 41
2.6.1 微服務(wù)如何改變項目管理 43
2.6.2 一致性使評估更容易 43
2.6.3 一次性代碼讓團隊更和諧 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 可重復使用 53
2.10.3 定義明確的接口 54
2.10.4 可組合 54
2.10.5 微服務(wù)組件實踐 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 何時使用同步消息 61 2
3.1.3 何時使用異步消息 62
3.1.4 從第 一天開始就思考
分布式 63
3.1.5 減少失敗的策略 65
3.2 案例研究:銷售稅規(guī)則 66
更廣泛的背景 66
3.3 模式匹配 67
3.3.1 銷售稅:從簡單開始 68
3.3.2 銷售稅:處理類別 69
3.3.3 銷售稅:走向全球 71
3.3.4 業(yè)務(wù)需求顯然會發(fā)生變化 72
3.3.5 模式匹配降低了重構(gòu)的成本 72
3.4 傳輸獨立性 73
一個有用的虛構(gòu):無所不能的觀察者 73
3.5 消息模式 74
3.5.1 核心模式:一條消息/兩個服務(wù) 75
3.5.2 核心模式:兩條消息/兩個服務(wù) 77
3.5.3 核心模式:一條消息/n 個服務(wù) 79
3.5.4 核心模式:m 條消息/n 個服務(wù) 81
3.5.5 m/n:鏈 81
3.5.6 m/n:樹 82
3.5.7 擴展消息 83
3.6 當消息出問題時 84
3.6.1 常見故障場景及如何應(yīng)對 85
3.6.2 請求/響應(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ù)不一定要準確 94
4.2 微服務(wù)的數(shù)據(jù)策略 95
4.2.1 使用消息公開數(shù)據(jù) 95
4.2.2 使用組合操作數(shù)據(jù) 96
4.2.3 通過系統(tǒng)配置控制數(shù)據(jù) 99
4.2.4 使用弱約束來分發(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ù)實用決策指南 113
4.4.1 全新項目 113
4.4.2 改造項目 114
4.5 總結(jié) 115
第 5 章 部署 116
5.1 事物的崩潰 116
5.2 從歷史中吸取教訓 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 保護 133
5.7 運行微服務(wù)系統(tǒng) 134
5.7.1 不變性 134
5.7.2 自動化 137
5.7.3 復原能力 141
5.7.4 驗證 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 開發(fā) 150
5.8 總結(jié) 152 目錄
第二部分 運行微服務(wù)
第 6 章 測量 155
6.1 傳統(tǒng)監(jiān)控的局限性 156
6.1.1 經(jīng)典配置 156
6.1.2 平均數(shù)的問題 158
6.1.3 使用百分位數(shù) 159
6.1.4 微服務(wù)配置 162
6.1.5 散點圖的威力 162
6.1.6 構(gòu)建儀表板 164
6.2 微服務(wù)的測量 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 合成驗證 181
6.4 總結(jié) 182
第 7 章 遷移 183
7.1 經(jīng)典電子商務(wù)示例 183
7.1.1 舊架構(gòu) 184
7.1.2 軟件交付過程 185
7.2 更改目標 186
在實踐中應(yīng)用政治 188
7.3 開始旅程 189
7.4 扼殺者策略 190
7.4.1 部分代理 191
7.4.2 當不能遷移時該怎么辦 192
7.4.3 新項目的策略 193
7.4.4 宏服務(wù)策略 195
7.5 優(yōu)化策略 197
7.6 從一般到具體 197
7.6.1 向產(chǎn)品頁面添加功能 197
7.6.2 向購物車添加功能 200
7.6.3 處理橫向問題 202
7.7 總結(jié) 202
第 8 章 人 204
8.1 應(yīng)對公司政治 204
8.1.1 接受硬性限制 205
8.1.2 尋找支持者 205
8.1.3 保持溝通合作 207
8.1.4 以價值為中心的交付 207
8.1.5 可接受的錯誤率 208
8.1.6 刪減功能 208
8.1.7 停止抽象 209
8.1.8 反灌輸 209
8.1.9 外部認可 210
8.1.10 團隊協(xié)作 210
8.1.11 尊重公司 211
8.2 微服務(wù)的政治 211
8.2.1 誰擁有什么 211
8.2.2 誰在待命 213
8.2.3 誰決定代碼內(nèi)容 214
8.3 總結(jié) 218
第 9 章 案例研究:Nodezoo.com 219
9.1 設(shè)計 220
9.1.1 業(yè)務(wù)需求是什么 220
9.1.2 消息是什么 221
9.1.3 有哪些服務(wù) 226
9.2 交付 231
9.2.1 迭代 1:本地開發(fā) 232
9.2.2 迭代 2:測試、階段系統(tǒng)和風險測量 243
9.2.3 迭代 3:生產(chǎn)路徑 248
9.2.4 迭代 4:增強和適應(yīng) 253
9.2.5 迭代 5:監(jiān)控和調(diào)試 258
9.2.6 迭代 6:擴展和性能 262
9.3 結(jié)語 264