本書分析了分布式一致性Raft算法以及Raft算法所依賴的理論,在此基礎(chǔ)上講解并實現(xiàn)Raft算法以及基于Raft算法的KV服務(wù)。通過本書,你可以深入了解Raft算法的運行機制,也可以學(xué)習(xí)到如何正確地實現(xiàn)Raft。
本書分為11章,第一章介紹分布式一致性算法,第二章詳細分析Raft算法,第三章在第二章基礎(chǔ)上整體設(shè)計,第四章到第八章逐個講解基于Raft算法的KV服務(wù)的各個組件的實現(xiàn),第九章講解Raft算法的主要優(yōu)化之一的日志快照,第十章是生產(chǎn)環(huán)境必須的服務(wù)器成員變更功能,最后一章介紹其他一些相關(guān)的Raft優(yōu)化。
本書詳細介紹了Raft的核心算法、服務(wù)器成員變更以及各種優(yōu)化的實現(xiàn),適合想嘗試實現(xiàn)Raft算法或者在生產(chǎn)環(huán)境中加入Raft算法的讀者,以及對于分布式一致性算法有興趣的讀者。
趙辰,男,1989年生于上海,軟件工程師。曾在支付寶(現(xiàn)在的螞蟻金服)工作四年,擅長基于Java語言的后端開發(fā),對Java語言下的多線程編程、分布式計算、多核編程有深入研究。
第1章 分布式一致性與共識算法簡介 /1
1.1 CAP定理 /2
1.2 共識算法 /3
1.3 本章小結(jié) /6
第2章 Raft核心算法分析 /7
2.1 不考慮分布式一致性的集群 /8
2.2 日志狀態(tài)機模型 /8
2.3 基于Quorum機制的寫入 /9
2.4 基于日志比較的選舉 /10
2.5 Raft算法中的選舉 /13
2.6 Raft算法中的日志復(fù)制 /18
2.7 Raft算法中的一些細節(jié)問題 /21
2.8 本章小結(jié) /25
第3章 整體設(shè)計 /27
3.1 設(shè)計目標(biāo) /28
3.2 設(shè)計和實現(xiàn)順序 /29
3.3 參考實現(xiàn) /29
3.4 狀態(tài)數(shù)據(jù)分析 /30
3.5 靜態(tài)數(shù)據(jù)分析 /32
3.6 集群成員與映射表 /34
3.7 組件分析 /38
3.8 如何解耦組件間的雙向調(diào)用關(guān)系 /39
3.9 線程模型分析 /43
3.10 項目準(zhǔn)備 /48
3.11 本章小結(jié) /56
第4章 選舉實現(xiàn) /58
4.1 角色建模 /59
4.2 定時器組件 /63
4.3 消息建!/67
4.4 關(guān)聯(lián)組件和工具 /70
4.5 一致性(核心)組件 /78
4.6 測試 /91
4.7 本章小結(jié) /103
第5章 日志實現(xiàn) /104
5.1 日志實現(xiàn)要求 /105
5.2 日志實現(xiàn)分析 /105
5.3 日志條目序列 /110
5.4 日志實現(xiàn) /133
5.5 與選舉部分對接 /142
5.6 測試 /146
5.7 本章小結(jié) /159
第6章 通信實現(xiàn) /160
6.1 通信接口分析 /161
6.2 序列化與反序列化 /162
6.3 通信實現(xiàn)分析 /165
6.4 通信組件的實現(xiàn) /168
6.5 測試 /186
6.6 本章小結(jié) /188
第7章 基于Raft算法的KV服務(wù) /189
7.1 服務(wù)設(shè)計 /190
7.2 服務(wù)實現(xiàn) /200
7.3 Node的組裝與服務(wù)的啟動 /213
7.4 關(guān)于測試 /221
7.5 本章小結(jié) /221
第8章 客戶端和整體測試 /222
8.1 客戶端設(shè)計與實現(xiàn) /223
8.2 客戶端的啟動和基本操作 /231
8.3 單機模式 /234
8.4 集群模式 /238
8.5 本章小結(jié) /258
第9章 日志快照 /259
9.1 日志快照的分析和設(shè)計 /260
9.2 日志快照的實現(xiàn) /267
9.3 測試 /289
9.4 本章小結(jié) /296
第10章 集群成員變更 /297
10.1 集群成員的安全變更 /298
10.2 成員變更的一些細節(jié)問題 /304
10.3 成員組件修改 /307
10.4 日志組件修改 /311
10.5 增加節(jié)點 /324
10.6 移除節(jié)點 /340
10.7 測試 /344
10.8 本章小結(jié) /357
第11章 Raft算法的優(yōu)化 /358
11.1 PreVote /359
11.2 ReadIndex /368
11.3 其他優(yōu)化 /383
11.4 本章小結(jié) /386