分布式系統(tǒng)是一門(mén)理論模型與工程技法并重的學(xué)科,現(xiàn)在的互聯(lián)網(wǎng)從業(yè)的開(kāi)發(fā)人員,很難繞過(guò)分布式系統(tǒng),或多或少會(huì)在面試、工作中接觸到分布式系統(tǒng)的知識(shí)。本書(shū)主要通過(guò)理論和實(shí)踐結(jié)合的方式介紹分布式系統(tǒng)。主要內(nèi)容有分布式系統(tǒng)基礎(chǔ)知識(shí):分布式系統(tǒng)模型、分區(qū)、一致性哈希、主從復(fù)制、一致性級(jí)別、分布式共識(shí)、分布式事務(wù)、分布式系統(tǒng)中的時(shí)間等,幫助讀者夯實(shí)分布式基礎(chǔ)知識(shí);本書(shū)也面向?qū)嵺`者:實(shí)現(xiàn)簡(jiǎn)單的 Paxos 共識(shí)算法、HDFS、ZooKeeper、etcd、Kubernetes 等分布式系統(tǒng)案例研究等。
唐偉志,曾任網(wǎng)易游戲、騰訊基礎(chǔ)架構(gòu)工程師。畢業(yè)后一直從事分布式系統(tǒng)相關(guān)工作,在知乎和公眾號(hào)“多顆糖”上分享對(duì)分布式系統(tǒng)論文的解讀和算法的講解。開(kāi)源愛(ài)好者、TiDB Reviewer和Kubernetes Contributor。
第1章 認(rèn)識(shí)分布式系統(tǒng)
1.1 什么是分布式系統(tǒng)
1.2 為什么需要分布式系統(tǒng)
1.3 分布式系統(tǒng)的示例
1.3.1 搜索引擎
1.3.2 加密貨幣
1.4 分布式系統(tǒng)的挑戰(zhàn)
1.4.1 網(wǎng)絡(luò)延遲問(wèn)題
1.4.2 部分失效問(wèn)題
1.4.3 時(shí)鐘問(wèn)題
1.5 每個(gè)程序員都應(yīng)該知道的數(shù)字
1.6 本章小結(jié)
第2章 分布式系統(tǒng)模型
2.1 兩將軍問(wèn)題
2.2 拜占庭將軍問(wèn)題
2.3 系統(tǒng)模型
2.3.1 網(wǎng)絡(luò)鏈路模型
2.3.2 節(jié)點(diǎn)故障類(lèi)型
2.3.3 按時(shí)間劃分系統(tǒng)模型
2.4 消息傳遞語(yǔ)義
2.5 本章小結(jié)
第3章 分布式數(shù)據(jù)基礎(chǔ)
3.1 分區(qū)
3.1.1 水平分區(qū)算法
3.1.2 分區(qū)的挑戰(zhàn)
3.2 復(fù)制
3.2.1 單主復(fù)制
3.2.2 多主復(fù)制
3.2.3 無(wú)主復(fù)制
3.3 CAP定理
3.3.1 PACELC定理
3.3.2 BASE
3.4 一致性模型
3.4.1 線性一致性
3.4.2 實(shí)現(xiàn)線性一致性
3.4.3 線性一致性的代價(jià)
3.4.4 順序一致性
3.4.5 因果一致性
3.4.6 最終一致性
3.4.7 以客戶(hù)端為中心的一致性模型
3.5 隔離級(jí)別
3.6 一致性和隔離級(jí)別的對(duì)比
3.7 本章小結(jié)
第4章 分布式共識(shí)
4.1 分布式共識(shí)簡(jiǎn)介
4.1.1 什么是分布式共識(shí)
4.1.2 為什么要達(dá)成共識(shí)
4.2 異步系統(tǒng)中的共識(shí)
4.2.1 FLP不可能定理
4.2.2 故障屏蔽
4.2.3 使用故障檢測(cè)器
4.2.4 使用隨機(jī)性算法
4.3 同步系統(tǒng)中的共識(shí)
4.4 Paxos
4.4.1 基本概念
4.4.2 問(wèn)題描述
4.4.3 Paxos算法實(shí)現(xiàn)流程
4.4.4 案例
4.4.5 活鎖
4.5 實(shí)驗(yàn):使用Go語(yǔ)言實(shí)現(xiàn)Paxos共識(shí)算法
4.5.1 定義相關(guān)結(jié)構(gòu)體
4.5.2 定義消息結(jié)構(gòu)體
4.5.3 算法實(shí)現(xiàn)流程
4.5.4 學(xué)習(xí)提案
4.5.5 實(shí)現(xiàn)單元測(cè)試
4.6 Multi-Paxos
4.6.1 確定日志索引
4.6.2 領(lǐng)導(dǎo)者選舉
4.6.3 減少請(qǐng)求
4.6.4 副本的完整性
4.6.5 客戶(hù)端請(qǐng)求
4.6.6 配置變更
4.6.7 完整實(shí)現(xiàn)
4.6.8 Paxos練習(xí)題
4.7 其他Paxos變體
4.7.1 Disk Paxos
4.7.2 Cheap Paxos
4.7.3 Fast Paxos
4.7.4 Mencius
4.7.5 EPaxos
4.7.6 Flexible Paxos
4.7.7 WPaxos
4.7.8 CASPaxos
4.7.9 其他
4.8 Raft算法
4.8.1 系統(tǒng)模型
4.8.2 基本概念
4.8.3 領(lǐng)導(dǎo)者選舉
4.8.4 日志復(fù)制
4.8.5 領(lǐng)導(dǎo)者更替
4.8.6 選舉限制舉例
4.8.7 延遲提交之前任期的日志條目
4.8.8 清理不一致的日志
4.8.9 處理舊領(lǐng)導(dǎo)者
4.8.10 客戶(hù)端協(xié)議
4.8.11 實(shí)現(xiàn)線性一致性
4.8.12 配置變更
4.8.13 配置變更存在的Bug
4.8.14 極端情況下的活性問(wèn)題
4.8.15 日志壓縮
4.8.16 基于內(nèi)存的狀態(tài)機(jī)的快照
4.8.17 基于磁盤(pán)的狀態(tài)機(jī)的快照
4.8.18 性能優(yōu)化
4.8.19 Raft練習(xí)題
4.9 Paxos vs Raft
4.10 拜占庭容錯(cuò)和PBFT算法
4.11 本章小結(jié)
第5章 分布式事務(wù)
5.1 什么是分布式事務(wù)
5.2 原子提交
5.2.1 兩階段提交
5.2.2 三階段提交
5.2.3 Paxos提交算法
5.2.4 基于Quorum的提交協(xié)議
5.2.5 Saga事務(wù)
5.3 并發(fā)控制
5.3.1 兩階段鎖
5.3.2 樂(lè)觀并發(fā)控制
5.3.3 多版本并發(fā)控制
5.4 Percolator
5.5 本章小結(jié)
第6章 時(shí)間和事件順序
6.1 物理時(shí)鐘
6.2 時(shí)鐘同步
6.3 邏輯時(shí)鐘
6.4 向量時(shí)鐘
6.5 分布式快照
6.6 本章小結(jié)
第7章 案例研究
7.1 分布式文件系統(tǒng)
7.1.1 GFS的目標(biāo)
7.1.2 架構(gòu)
7.1.3 讀取文件
7.1.4 寫(xiě)入文件
7.1.5 一致性模型
7.1.6 其他
7.2 分布式協(xié)調(diào)服務(wù)
7.2.1 ZooKeeper架構(gòu)
7.2.2 數(shù)據(jù)模型
7.2.3 ZooKeeper實(shí)現(xiàn)
7.2.4 客戶(hù)端API
7.2.5 其他
7.3 分布式表格存儲(chǔ)Bigtable
7.3.1 數(shù)據(jù)模型
7.3.2 架構(gòu)
7.3.3 SSTable和LSM Tree
7.3.4 其他優(yōu)化
7.4 分布式鍵值存儲(chǔ)Dynamo
7.4.1 架構(gòu)
7.4.2 請(qǐng)求協(xié)調(diào)
7.4.3 成員管理和故障檢測(cè)
7.5 分布式NoSQL數(shù)據(jù)庫(kù)Cassandra
7.5.1 數(shù)據(jù)模型
7.5.2 架構(gòu)
7.5.3 協(xié)調(diào)請(qǐng)求
7.5.4 一致性級(jí)別
7.5.5 輕量級(jí)事務(wù)
7.5.6 二級(jí)索引
7.5.7 批處理
7.6 分布式數(shù)據(jù)庫(kù)Spanner
7.6.1 數(shù)據(jù)模型
7.6.2 架構(gòu)
7.6.3 TrueTime
7.6.4 讀寫(xiě)事務(wù)
7.6.5 只讀事務(wù)
7.6.6 快照讀和模式變更事務(wù)
7.7 分布式批處理
7.7.1 MapReduce
7.7.2 Spark
7.8 分布式流處理框架Flink
7.8.1 計(jì)算模型
7.8.2 系統(tǒng)架構(gòu)
7.8.3 時(shí)間處理
7.8.4 分布式快照
7.8.5 端到端的精確一次語(yǔ)義
7.9 本章小結(jié)