分散式系統與一致

分散式系統與一致

《分散式系統與一致》是2021年電子工業出版社出版的圖書。

基本介紹

  • 中文名:分散式系統與一致
  • 作者:陳東明
  • 出版社:電子工業出版社
  • 出版時間:2021年5月
  • ISBN:9787121410413
內容簡介,圖書目錄,作者簡介,

內容簡介

一致性是非常重要的分散式技術。眾所周知,分散式系統有很多特性,如可用性、可靠性等,這些特性多多少少會與一致性產生關係,受到一致性的影響。要全面研究、掌握分散式技術,一致性是繞不開的一個話題,也是*難解決的一個問題。本書主要介紹GFS、HDFS、BigTable、MongoDB、RabbitMQ、ZooKeeper、Spanner、CockroachDB系統與一致性有關的實現細節,以及非常重要的Paxos、Raft、Zab分散式算法;本書還介紹了事務一致性與隔離級別、順序一致性、線性一致性與強一致性相關內容,以及架構設計中的權衡等。從分散式技術的角度來說,本書講解了分散式領域比較高階的內容,但是從分散式一致性的角度來說,本書仍然是一致性的入門書。

圖書目錄

第1部分 開 篇
第1章 分散式系統的核心特性:一致性 2
1.1 拆分是解決大規模套用的本質 2
1.2 分散式技術是大規模套用的後一個考驗 4
1.3 一致性是這個考驗的核心 6
第2部分 系統案例
第2章 Google的檔案系統 8
2.1 GFS的外部接口和架構 8
2.1.1 GFS的外部接口 8
2.1.2 GFS的架構 9
2.2 GFS的寫流程細節 11
2.2.1 名字空間管理和鎖保護 11
2.2.2 租約 11
2.2.3 變更及變更次序 11
2.3 GFS的原子性 13
2.3.1 write和record append的區別 13
2.3.2 GFS中原子性的含義 14
2.3.3 GFS中多副本之間不具有原子性 15
2.4 GFS的鬆弛一致性 15
2.4.1 元數據的一致性 15
2.4.2 檔案數據的一致性 15
2.4.3 適應GFS的鬆弛一致性 16
2.4.4 GFS的設計哲學 17
參考文獻 18
第3章 開源的檔案系統HDFS 19
3.1 HDFS的外部接口和架構 19
3.1.1 HDFS的外部接口 19
3.1.2 HDFS的架構 20
3.2 HDFS的寫流程細節 21
3.2.1 打開檔案 22
3.2.2 pipeline寫入 22
3.2.3 上報block狀態 24
3.2.4 關閉檔案 24
3.2.5 DN定期上報信息 24
3.3 HDFS的錯誤處理 25
3.3.1 DN的錯誤 25
3.3.2 NN的錯誤 26
3.3.3 客戶端的錯誤 26
參考文獻 29
第4章 Google的BigTable系統 30
4.1 BigTable的外部接口和架構 30
4.1.1 表 30
4.1.2 數據 31
4.1.3 原子性 32
4.1.4 時間戳 32
4.1.5 BigTable的數據模型 33
4.1.6 BigTable的架構 34
4.2 BigTable的實現 35
4.2.1 tablet location 35
4.2.2 tablet的指派 36
4.2.3 載入tablet 36
4.2.4 tablet的讀/寫操作 37
4.2.5 合併 38
參考文獻 38
第5章 文檔資料庫MongoDB 39
5.1 MongoDB的外部接口和架構 39
5.1.1 MongoDB的基本概念 39
5.1.2 MongoDB的架構 39
5.2 MongoDB的standalone模式 40
5.2.1 MongoDB的寫入過程 40
5.2.2 無確認導致的丟失更新異常 40
5.2.3 未持久化導致的丟失更新異常 41
5.3 MongoDB的replica set模式 42
5.3.1 MongoDB的複製過程 43
5.3.2 無副本確認導致的丟失更新異常 44
5.3.3 不正確選主導致的丟失更新異常 45
5.3.4 腦裂導致的丟失更新異常 47
5.3.5 缺失任期信息導致的丟失更新異常 48
5.3.6 髒讀異常 51
5.3.7 陳舊讀異常 52
第6章 訊息系統RabbitMQ 54
6.1 RabbitMQ簡述 54
6.1.1 關於broker 54
6.1.2 RabbitMQ的接口 55
6.1.3 鏡像佇列 55
6.2 RabbitMQ的基本實現 55
6.2.1 鏡像複製 55
6.2.2 鏡像加入佇列 56
6.2.3 鏡像同步過程 56
6.3 master切換及RabbitMQ的異常處理 57
6.3.1 意外宕機後的master切換 57
6.3.2 主動運維後的master切換 57
6.3.3 意外宕機與主動運維的默認行為差異 58
6.3.4 網路分區後的master切換 58
6.4 確認機制 59
第7章 協調服務ZooKeeper 60
7.1 協調服務的套用場景 60
7.2 ZooKeeper簡述 61
7.2.1 ZooKeeper的數據模型 61
7.2.2 ZooKeeper的外部接口 62
7.2.3 ZooKeeper的架構 63
7.3 ZooKeeper的實現細節 65
7.3.1 客戶端異步處理 65
7.3.2 請求處理器 65
7.3.3 原子廣播 67
參考文獻 68
第8章 Google的Spanner資料庫 69
8.1 Spanner的數據模型 69
8.1.1 帶模式的半關係型表 69
8.1.2 通用事務 71
8.2 Spanner的架構 72
8.3 Spanner的實現 73
8.3.1 tablet與存儲 73
8.3.2 複製 73
8.3.3 TrueTime 74
8.3.4 事務 75
8.3.5 目錄 80
8.3.6 Paxos的作用 80
8.4 TrueTime的作用 81
8.4.1 Spanner的外部一致性 81
8.4.2 TrueTime生成事務時間戳 82
8.4.3 TrueTime管理leader租約 83
8.4.4 TrueTime作用的總結 85
參考文獻 85
第9章 分散式資料庫CockroachDB 86
9.1 CockroachDB的接口和數據模型 86
9.2 CockroachDB的架構 87
9.3 元數據存儲的實現 88
9.4 多副本存儲的實現 90
9.5 事務的實現 92
9.5.1 單個事務的執行 92
9.5.2 多個事務串列執行 94
9.5.3 事務的並發執行 96
參考文獻 106
第3部分 分散式算法
第10章 共識算法Paxos 108
10.1 Paxos的歷史 108
10.2 Consensus vs Paxos 110
10.3 Basic Paxos算法 111
10.3.1 共識問題 111
10.3.2 算法簡述 113
10.3.3 選擇值過程 115
10.4 Multi Paxos 算法 132
10.4.1 多個實例 132
10.4.2 獨立實例運行的完整Paxos算法 132
10.4.3 只運行一次prepare訊息的完整Paxos算法 137
10.5 複製狀態機 144
10.6 Paxos算法與複製狀態機 146
10.6.1 Paxos算法實現複製狀態機 146
10.6.2 空洞處理 147
10.7 原子廣播 148
10.7.1 原子廣播協定 148
10.7.2 原子廣播的模型 148
10.7.3 原子廣播的特性 149
10.8 Paxos算法與原子廣播 149
10.8.1 Paxos consensus實例與原子廣播 149
10.8.2 Paxos的角色與原子廣播 150
參考文獻 151
第11章 複製日誌算法Raft 152
11.1 Raft是複製日誌的算法 152
11.2 Raft算法的組成 153
11.3 複製過程 153
11.4 選舉過程 154
11.4.1 選舉的基本條件 154
11.4.2 任期 155
11.4.3 完整的選舉過程 156
11.5 異常處理 157
11.5.1 不一致異常 157
11.5.2 一致性檢查 160
11.5.3 不提交舊的leader的entry 160
參考文獻 162
第12章 原子廣播算法Zab 163
12.1 Zab算法簡述 163
12.1.1 設計的Zab算法與ZooKeeper中實現的Zab算法 163
12.1.2 Zab算法的階段 164
12.2 各版本Zab算法的共有部分 164
12.2.1 Zab算法的基本概念 164
12.2.2 Zab算法的broadcast階段 166
12.2.3 Zab算法的訊息通道 169
12.2.4 Zab算法的broadcast階段的特性 170
12.2.5 已提交的提議 170
12.2.6 故障處理 170
12.3 設計的Zab算法 172
12.3.1 Phase0:election階段 173
12.3.2 Phase1:discovery階段 174
12.3.3 Phase2:synchronization階段 174
12.3.4 Phase3:broadcast階段 175
12.3.5 設計的Zab算法的問題 176
12.3.6 設計的Zab算法處理leader故障 176
12.4 Zab Pre 1.0算法 177
12.4.1 leader election階段 177
12.4.2 recovery階段 177
12.4.3 Zab Pre 1.0算法處理leader宕機故障 178
12.4.4 Zab Pre 1.0算法的缺陷 179
12.5 Zab 1.0算法 179
12.5.1 Phase0:leader election階段 180
12.5.2 Phase1:discovery階段 180
12.5.3 Phase2:synchronization階段 181
12.5.4 Zab 1.0算法處理leader宕機故障 181
參考文獻 182
第4部分 一 致 性
第13章 事務一致性與隔離級別 184
13.1 ANSI的隔離級別 185
13.1.1 ANSI的隔離級別定義 185
13.1.2 對一致性的破壞 186
13.1.3 髒寫 188
13.1.4 鎖機制 188
13.2 SI和SSI隔離級別 190
13.2.1 MVCC 190
13.2.2 SI隔離級別 190
13.2.3 SSI隔離級別 192
參考文獻 192
第14章 順序一致性 193
14.1 順序一致性的正式定義 193
14.1.1 順序一致性套用的範圍 193
14.1.2 順序一致性的定義 194
14.1.3 核心概念的解釋 195
14.1.4 定義解析 198
14.1.5 在分散式系統中的定義 200
14.1.6 舉例說明 200
14.2 理解順序一致性 202
14.2.1 順序排序 202
14.2.2 程式順序 202
14.2.3 順序一致性是嚴苛的 203
14.3 順序一致性的其他描述 204
14.3.1 種描述:全局視角一致 204
14.3.2 第二種描述:允許重排序 205
14.4 順序一致性的作用 206
14.4.1 並發條件 206
14.4.2 原子性 207
參考文獻 209
第15章 線性一致性與強一致性 210
15.1 什麼是線性一致性 210
15.1.1 預備概念 211
15.1.2 定義 213
15.2 判斷系統是否滿足線性一致性 213
15.3 對線性一致性的理解與強一致性 216
15.3.1 線性一致性的其他描述 216
15.3.2 線性一致性與順序一致性的比較 217
15.3.3 強一致性 218
15.4 ZooKeeper的一致性分析 219
15.4.1 ZooKeeper是順序一致性的 219
15.4.2 ZooKeeper的一致性的作用 221
15.4.3 ZooKeeper的一致性的描述 222
參考文獻 223
第16章 架構設計中的權衡 225
16.1 什麼是CAP定理 225
16.1.1 CAP歷史:從原則到定理 225
16.1.2 CAP的定義 226
16.1.3 CAP定理下的三種系統 226
16.1.4 深入理解CAP定理中的P和A 227
16.2 關於CAP定理的錯誤理解 228
16.2.1 不是三選二,不能不選P 228
16.2.2 不是三分法 229
16.2.3 不該輕易放棄任何一個屬性 230
16.3 CAP中的權衡 230
16.3.1 弱CAP原則 230
16.3.2 CAP推動NoSQL 231
16.3.3 分散式系統中的可用性和一致性 231
16.4 進一步權衡:HAT和PACELC 231
16.4.1 HAT 232
16.4.2 權衡 234
16.4.3 PACELC 234
參考文獻 235

作者簡介

陳東明: 餓了么北京技術中心架構組負責人,負責餓了么的產品線架構設計以及基礎架構研發工作,主導開發eleme key-value資料庫。曾任百度架構師負責百度即時通訊產品的架構設計。具有豐富的大規模系統構建和基礎架構的?x發經驗,善於複雜業務需求下的大並發、分散式系統設計和持續最佳化。

相關詞條

熱門詞條

聯絡我們