微服務之道 The Tao of Microservices

[愛爾蘭]理乍得·羅傑(Richard Rodger)

  • 微服務之道-preview-1
  • 微服務之道-preview-2
微服務之道-preview-1

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

商品描述

本書力求揭示微服務設計背後的思想,引導讀者理解和構建微服務。全書分為兩部分。第一部分介紹微服務的工程原則,從具體的案例研究引入微服務的概念及優缺點,闡示瞭如何決定要構建哪些微服務及服務間的通信,介紹了消息優先的方法,展示了微服務如何以更恰當的方式存儲和處理不同類型的數據,探討瞭如何在生產環境中運行大量微服務。第二部分介紹如何利用微服務架構的工程優勢來剋服環境帶來的挑戰,以及度量微服務系統的方法,指導讀者一步步地從老的單體系統過渡到能夠輕松適應新功能需求的微服務系統,最後使用前面章節介紹的原則,從頭開始構建了一個完整的微服務系統。

作者簡介

理查德·罗杰(Richard Rodger)曾在爱尔兰都柏林三一学院学习数学和哲学,在爱尔兰沃特福德理工学院学习计算机科学。1986 年开始在 Sinclair ZX Spectrum 上写代码至今;Seneca 微服务框架的维护者。会展业社交网络公司voxgig的首席执行官,拥有多年为大型跨国公司构建微服务系统的经验。曾任移动应用 SaaS平台 FeedHenry(后来被 Red Hat 收购)的首席技术官,后与他人联合创立了nearForm—— 关于 Node.js 和微服务的咨询公司。他还著有Mobile Application Development in the Cloud(《移动云计算应用开发入门经典》)(Wiley,2011)一书。

目錄大綱

第 一部分 構建微服務

第 1 章 美麗新世界 3

1.1 技術債務危機 3

1.2 案例研究:微博初創公司 5

1.2.1 迭代 0:發布條目 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 微服務理念 20

核心技術原則 21

1.5 實際意義 24

1.5.1 規範 25

1.5.2 部署 26

1.5.3 安全 27

1.5.4 人 27

1.6 你的錢換來了什麽 28

1.7 總結 29

第 2 章 服務 30

2.1 定義微服務 30

2.2 案例研究:數字版報紙 32

2.2.1 業務目標 32

2.2.2 非正式需求 33

2.2.3 功能分解 33

2.3 微服務架構 34

迷你 Web 服務器架構 34

2.4 微服務示意圖 35

2.5 微服務依賴樹 36

異步消息架構 39

2.6 單體項目與微服務項目 41

2.6.1 微服務如何改變項目管理 43

2.6.2 一致性使評估更容易 43

2.6.3 一次性代碼讓團隊更和諧 44

2.6.4 同質組件允許異構配置 44

2.6.5 不同類型的代碼 45

2.7 軟件單元 46

2.8 從需求到消息再到服務 47

2.9 微服務架構圖 49

繪制消息流圖 52

2.10 微服務是軟件組件 53

2.10.1 封裝 53

2.10.2 可重復使用 53

2.10.3 定義明確的接口 54

2.10.4 可組合 54

2.10.5 微服務組件實踐 54

2.11 微服務的內部結構 57

2.12 總結 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 案例研究:銷售稅規則 66

更廣泛的背景 66

3.3 模式匹配 67

3.3.1 銷售稅:從簡單開始 68

3.3.2 銷售稅:處理類別 69

3.3.3 銷售稅:走向全球 71

3.3.4 業務需求顯然會發生變化 72

3.3.5 模式匹配降低了重構的成本 72

3.4 傳輸獨立性 73

一個有用的虛構:無所不能的觀察者 73

3.5 消息模式 74

3.5.1 核心模式:一條消息/兩個服務 75

3.5.2 核心模式:兩條消息/兩個服務 77

3.5.3 核心模式:一條消息/n 個服務 79

3.5.4 核心模式:m 條消息/n 個服務 81

3.5.5 m/n:鏈 81

3.5.6 m/n:樹 82

3.5.7 擴展消息 83

3.6 當消息出問題時 84

3.6.1 常見故障場景及如何應對 85

3.6.2 請求/響應交互故障 85

3.6.3 響尾蛇交互的故障 86

3.6.4 贏家通吃交互的故障 86

3.6.5 即發即棄交互的故障 87

3.7 總結 88

第 4 章 數據 89

4.1 數據與想象不同 90

4.1.1 數據同質而非異質 90

4.1.2 數據可以私有 91

4.1.3 數據可以是本地的 92

4.1.4 數據可以自由處置 94

4.1.5 數據不一定要準確 94

4.2 微服務的數據策略 95

4.2.1 使用消息公開數據 95

4.2.2 使用組合操作數據 96

4.2.3 通過系統配置控制數據 99

4.2.4 使用弱約束來分發數據 104

4.3 重新思考傳統數據模式 105

4.3.1 主鍵 106

4.3.2 外鍵 107

4.3.3 事務 108

4.3.4 事務並不像想象的

那麽好 111

4.3.5 模式引起技術債務 112

4.4 微服務數據實用決策指南 113

4.4.1 全新項目 113

4.4.2 改造項目 114

4.5 總結 115

第 5 章 部署 116

5.1 事物的崩潰 116

5.2 從歷史中吸取教訓 117

5.2.1 三英里島 117

5.2.2 軟件系統故障模型 121

5.2.3 冗餘並不像想象的那樣 125

5.2.4 更改很可怕 126

5.3 妄想經不起反駁 128

完美軟件的成本 129

5.4 混亂的系統 129

5.5 微服務和冗餘 130

5.6 持續交付 131

5.6.1 管道 132

5.6.2 流程 133

5.6.3 保護 133

5.7 運行微服務系統 134

5.7.1 不變性 134

5.7.2 自動化 137

5.7.3 復原能力 141

5.7.4 驗證 146

5.7.5 發現 147

5.7.6 配置 148

5.7.7 安全 149

5.7.8 階段系統 150

5.7.9 開發 150

5.8 總結 152 目錄

第二部分 運行微服務

第 6 章 測量 155

6.1 傳統監控的局限性 156

6.1.1 經典配置 156

6.1.2 平均數的問題 158

6.1.3 使用百分位數 159

6.1.4 微服務配置 162

6.1.5 散點圖的威力 162

6.1.6 構建儀表板 164

6.2 微服務的測量 164

6.2.1 業務層 165

6.2.2 消息層 165

6.2.3 服務層 172

6.3 不變量的威力 175

6.3.1 從業務邏輯中尋找不變量 176

6.3.2 從系統架構中尋找不變量 177

6.3.3 可視化不變量 179

6.3.4 理解系統 179

6.3.5 合成驗證 181

6.4 總結 182

第 7 章 遷移 183

7.1 經典電子商務示例 183

7.1.1 舊架構 184

7.1.2 軟件交付過程 185

7.2 更改目標 186

在實踐中應用政治 188

7.3 開始旅程 189

7.4 扼殺者策略 190

7.4.1 部分代理 191

7.4.2 當不能遷移時該怎麽辦 192

7.4.3 新項目的策略 193

7.4.4 宏服務策略 195

7.5 優化策略 197

7.6 從一般到具體 197

7.6.1 向產品頁面添加功能 197

7.6.2 向購物車添加功能 200

7.6.3 處理橫向問題 202

7.7 總結 202

第 8 章 人 204

8.1 應對公司政治 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 團隊協作 210

8.1.11 尊重公司 211

8.2 微服務的政治 211

8.2.1 誰擁有什麽 211

8.2.2 誰在待命 213

8.2.3 誰決定代碼內容 214

8.3 總結 218

第 9 章 案例研究:Nodezoo.com 219

9.1 設計 220

9.1.1 業務需求是什麽 220

9.1.2 消息是什麽 221

9.1.3 有哪些服務 226

9.2 交付 231

9.2.1 迭代 1:本地開發 232

9.2.2 迭代 2:測試、階段系統和風險測量 243

9.2.3 迭代 3:生產路徑 248

9.2.4 迭代 4:增強和適應 253

9.2.5 迭代 5:監控和調試 258

9.2.6 迭代 6:擴展和性能 262

9.3 結語 264