分佈式系統原理與工程實踐: 一致性、共識、Paxos、分佈式事務、服務治理、微服務、冪等、消息系統、ZooKeeper
內容描述
本書通過理論篇、實踐篇、工程篇、總結篇四篇(13章),介紹了分佈式系統的知識體系。理論篇介紹了一致性、共識、分佈式約束等知識;實踐篇介紹了分佈式鎖、分佈式事務、服務發現與調用、服務保護與網關、冪等接口等知識;工程篇介紹了消息系統中間件 RabbitMQ 和分佈式協調中間件ZooKeeper等知識;總結篇則幫助大家釐清分佈式系統的知識脈絡。本書適合想要學習分佈式系統理論、實踐、工程知識的學生、軟件開發者。
目錄大綱
目錄
理論篇
第1章 分佈式概述 2
1.1 概述 2
1.2 應用的演進歷程 3
1.2.1 單體應用 3
1.2.2 集群應用 4
1.2.3 狹義分佈式應用 9
1.2.4 微服務應用 11
1.3 分佈式系統概述 12
1.3.1 分佈式系統的定義 12
1.3.2 分佈式一致性問題 14
1.3.3 分佈式應用中的節點 15
1.4 分佈式應用的優勢 16
1.5 分佈式應用的問題 17
1.6 本章小結 20
第2章 一致性 21
2.1 一致性的概念 21
2.1.1 ACID一致性 22
2.1.2 CAP一致性 23
2.1.3 兩種一致性的關係 23
2.2 一致性的強弱 24
2.2.1 嚴格一致性 25
2.2.2 順序一致性 25
2.2.3 線性一致性 27
2.2.4 最終一致性 30
2.2.5 總結 31
2.3 一致性算法 32
2.4 兩階段提交 33
2.4.1 具體實現 33
2.4.2 線性一致性證明 35
2.4.3 優劣 39
2.5 三階段提交 39
2.5.1 具體實現 40
2.5.2 優劣 42
2.6 本章小結 44
第3章 共識 46
3.1 共識與一致性 46
3.1.1 共識的概念 47
3.1.2 再論“一致性” 49
3.2 拜占庭將軍問題 51
3.3 算法的容錯性 54
3.3.1 非拜占庭容錯算法 55
3.3.2 拜占庭容錯算法 55
3.4 共識算法 56
3.5 Paxos算法 56
3.5.1 提出與證明 57
3.5.2 算法的內容 60
3.5.3 算法實現分析 62
3.5.4 理解與示例 64
3.6 Raft算法 65
3.6.1 Raft算法的內容 66
3.6.2 Raft算法的保證 70
3.6.3 總結分析 73
3.7 本章小結 74
第4章 分佈式約束 76
4.1 CAP定理 76
4.1.1 定理的內容 76
4.1.2 示例與理解 77
4.2 從CAP定理到BASE定理 78
4.3 BASE定理 80
4.3.1 BASE定理的含義 80
4.3.2 BASE定理的應用 81
4.4 本章小結 83
實踐篇
第5章 分佈式鎖 86
5.1 產生背景 86
5.2 特性 88
5.2.1 全局性 88
5.2.2 唯一性 89
5.2.3 遵從性 90
5.3 設計要點 90
5.4 實現 91
5.4.1 邏輯分佈式鎖 91
5.4.2 唯一性索引分佈式鎖 92
5.4.3 唯一性校驗分佈式鎖 93
5.4.4 一致性分佈式鎖 94
5.5 應用場景 96
5.6 本章小結 96
第6章 分佈式事務 97
6.1 本地事務與分佈式事務 98
6.2 分佈式事務的類別 99
6.2.1 應用內多數據庫事務 99
6.2.2 單體應用間事務 99
6.2.3 分佈式系統內事務 100
6.2.4 分佈式系統間事務 101
6.3 分佈式事務的類別總結 101
6.4 應用內多數據庫事務方案 102
6.5 單體應用間事務方案 104
6.5.1 化為本地事務 104
6.5.2 化為應用內多數據庫事務 105
6.5.3 TCC 106
6.5.4 本地異步消息機制 111
6.5.5 異步消息中心機制 113
6.6 近似事務 114
6.7 本章小結 116
第7章 服務發現與調用 117
7.1 分佈式帶來的問題 117
7.2 服務發現 119
7.2.1 服務發現模型中的角色 119
7.2.2 反向代理模型 120
7.2.3 註冊中心模型 120
7.2.4 服務網格模型 122
7.2.5 三種模型的比較 123
7.3 服務調用 123
7.3.1 背景介紹 123
7.3.2 基於接口的調用 125
7.3.3 遠程過程調用 126
7.4 本章小結 130
第8章 服務保護與網關 131
8.1 服務保護 131
8.1.1 理論依據 132
8.1.2 隔離 133
8.1.3 限流 135
8.1.4 降級 139
8.1.5 熔斷 142
8.1.6 恢復 144
8.2 服務網關 145
8.2.1 產生背景 145
8.2.2 功能 146
8.2.3 結構 147
8.3 本章小結 147
第9章 冪等接口 148
9.1 概述 148
9.1.1 冪等接口概述 148
9.1.2 章節結構 150
9.2 代數係統 151
9.2.1 代數係統的定義 151
9.2.2 特殊元素 151
9.2.3 冪等 154
9.3 函數 155
9.3.1 函數的定義 155
9.3.2 複合函數 157
9.4 複合函數的冪等化 157
9.4.1 函數的么元化 157
9.4.2 函數的零元化 158
9.4.3 運算的冪等化 160
9.4.4 複合函數冪等化總結 161
9.5 接口的么元化 161
9.6 接口的零元化 162
9.7 調用的冪等化 163
9.7.1 判斷插入數據 163
9.7.2 判斷刪除數據 164
9.7.3 判斷數據版本 164
9.7.4 攔截重試調用 166
9.8 冪等接口總結 167
9.9 本章小結 168
工程篇
第10章 分佈式中間件概述 171
第11章 RabbitMQ詳解 174
11.1 消息系統概述 174
11.1.1 消息系統模型 174
11.1.2 消息系統的應用 175
11.2 RabbitMQ概述 177
11.3 RabbitMQ的組件 177
11.3.1 Exchange 177
11.3.2 Queue 178
11.3.3 Message 178
11.4 RabbitMQ的連接 179
11.4.1 生產者與Exchange 179
11.4.2 Exchange與Queue 180
11.4.3 Queue與消費者 181
11.5 附加功能 182
11.5.1 投遞確認功能 182
11.5.2 持久化功能 183
11.5.3 消費確認功能 183
11.5.4 逐條派發功能 184
11.5.5 RPC功能 184
11.6 模型與應用 185
11.6.1 點對點模型 185
11.6.2 發布訂閱模型 186
11.7 本章小結 187
第12章 ZooKeeper詳解 188
12.1 單機配置與啟動 188
12.1.1 運行配置 189
12.1.2 啟動 190
12.2 數據模型 191
12.2.1 時間語義 191
12.2.2 樹狀模型 192
12.2.3 znode的數據與狀態 192
12.2.4 znode的可選特性 194
12.2.5 znode的限額 196
12.2.6 znode權限設置 197
12.3 交互式命令行客戶端 201
12.3.1 設置命令 202
12.3.2 znode操作命令 203
12.3.3 使用示例 205
12.4 監聽器 206
12.4.1 特性 206
12.4.2 事件通知 209
12.4.3 交互式命令行客戶端中的監聽器 210
12.4.4 其他客戶端中的監聽器 210
12.5 連接與會話 211
12.5.1 連接建立 211
12.5.2 服務器切換 214
12.5.3 會話狀態 215
12.5.4 連接監聽器 216
12.6 集群模式 217
12.6.1 集群配置與啟動 217
12.6.2 一致性實現 218
12.6.3 一致性級別討論 221
12.7 應用示例 226
12.8 應用場景 230
12.8.1 節點命名 231
12.8.2 服務發現 232
12.8.3 應用配置 233
12.8.4 分佈式鎖 233
12.9 本章小結 235
總結篇
第13章 再論分佈式系統 238
13.1 分佈式與一致性 238
13.2 本書脈絡 240
13.2.1 理論篇 240
13.2.2 實踐篇 242
13.2.3 工程篇 243
13.3 總結與展望 244
13.3.1 總結 244
13.3.2 展望 245
參考文獻 247
作者介紹
崔現斌(筆名易哥),畢業於浙江大學、山東大學,高#級軟件系統架構師、網絡工程師、數據庫工程師、軟件測試工程師、註冊電氣工程師。在校成績優異,曾獲得國家獎學金兩次,一等獎學金四次,科技創新大賽一等獎三次,以及五四青年科學獎等。主要科研方向為機器學習、分佈式算法、容錯算法在無線傳感網絡中的應用,相關論文獲得IEEE通信協會#佳論文獎。具有十餘年軟件開發經驗,曾擔任網站技術部門負責人,現從事互聯網金融行業。主要負責軟件系統架構設計與後端開發,專注分佈式架構、研發協同、持續交付等領域,設計並實現應用交付流水系統、任務協作與管理系統、通用流處理ping台等眾多系統或ping台。同時也是一名活躍的開源開發#者。著有書籍《通用源碼閱讀指導書》《高性能架構之道》,兩本書籍均受到多方好評,並在台灣地區發行繁體版。