書馨卡幫你省薪 2024個(gè)人購(gòu)書報(bào)告 2024中圖網(wǎng)年度報(bào)告
歡迎光臨中圖網(wǎng) 請(qǐng) | 注冊(cè)

深入理解分布式系統(tǒng)

作者:唐偉志
出版社:電子工業(yè)出版社出版時(shí)間:2022-03-01
開(kāi)本: 16開(kāi) 頁(yè)數(shù): 316
中 圖 價(jià):¥77.8(7.2折) 定價(jià)  ¥108.0 登錄后可看到會(huì)員價(jià)
加入購(gòu)物車 收藏
運(yùn)費(fèi)6元,滿39元免運(yùn)費(fèi)
?新疆、西藏除外
本類五星書更多>
買過(guò)本商品的人還買了

深入理解分布式系統(tǒng) 版權(quán)信息

深入理解分布式系統(tǒng) 本書特色

適讀人群 :本書適合對(duì)分布式感興趣的讀者面向初學(xué)者:通過(guò)理論和實(shí)踐結(jié)合的方式介紹分布式系統(tǒng),幫助讀者夯實(shí)分布式基礎(chǔ)知識(shí); 面向?qū)嵺`者:實(shí)現(xiàn)簡(jiǎn)單的Paxos共識(shí)算法,分析HDFS、ZooKeeper、etcd、Kubernetes等分布式系統(tǒng)案例。

深入理解分布式系統(tǒng) 內(nèi)容簡(jiǎn)介

《深入理解分布式系統(tǒng)》主要講解分布式系統(tǒng)常用的基礎(chǔ)知識(shí)、算法和案例,經(jīng)筆者對(duì)文獻(xiàn)海洋中晦澀艱深的原理和算法進(jìn)行提煉,輔以圖示和代碼,并結(jié)合實(shí)際經(jīng)驗(yàn)進(jìn)行分析總結(jié)而成。通過(guò)閱讀本書,讀者可以快速、輕松地掌握分布式系統(tǒng)的基本原理,以及Paxos或Raft共識(shí)算法,并通過(guò)典型的案例學(xué)習(xí)如何設(shè)計(jì)大型分布式系統(tǒng)。 《深入理解分布式系統(tǒng)》首先介紹什么是分布式系統(tǒng)、分布式系統(tǒng)帶來(lái)的挑戰(zhàn),以及如何對(duì)分布式系統(tǒng)進(jìn)行建模,這部分內(nèi)容偏向概念性介紹。接著介紹了分布式數(shù)據(jù)的基礎(chǔ)知識(shí),包括數(shù)據(jù)分區(qū)技術(shù)、數(shù)據(jù)復(fù)制技術(shù)、CAP定理、一致性模型和隔離級(jí)別,嘗試?yán)迩逡恍┦秩菀谆煜男g(shù)語(yǔ),比如一致性、線性一致性、*終一致性和一致性算法等。本書還介紹了分布式系統(tǒng)的核心算法——Paxos和Raft算法,不僅補(bǔ)充了大量圖示進(jìn)行講解,還從零實(shí)現(xiàn)了一個(gè)Paxos算法。此外,本書分析了常見(jiàn)的分布式事務(wù),并討論了分布式系統(tǒng)中的時(shí)間問(wèn)題,整理了一些實(shí)際發(fā)生的編程陷阱。*后結(jié)合一些對(duì)工業(yè)界產(chǎn)生重大影響的論文或開(kāi)源系統(tǒng),學(xué)習(xí)前人在設(shè)計(jì)大型分布式系統(tǒng)時(shí)的思路、取舍和創(chuàng)新。

深入理解分布式系統(tǒng) 目錄

第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)故障類型 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 以客戶端為中心的一致性模型 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 客戶端請(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 客戶端協(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 基于磁盤的狀態(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 寫入文件 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 客戶端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 讀寫事務(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é)
展開(kāi)全部

深入理解分布式系統(tǒng) 節(jié)選

原子提交在分布式領(lǐng)域更普遍地被稱為提交問(wèn)題(The Commit Problem)。 事務(wù)的一大好處就是保證了原子性,所有的操作要么都執(zhí)行,要么都不執(zhí)行(All Or Nothing)。原子性可以說(shuō)是事務(wù)*重要的特性,軟件開(kāi)發(fā)人員依靠事務(wù)的原子性,能夠安全地將一系列相關(guān)的、不可分割的操作組合成一個(gè)整體,實(shí)現(xiàn)許多業(yè)務(wù)需求。 但保證原子性并非易事—不僅僅是在分布式系統(tǒng)中,在單機(jī)系統(tǒng)中亦如此。原因是原子性涉及了硬件和軟件,而兩者都可能出現(xiàn)意外故障。即使是向文件中寫入一些簡(jiǎn)單的字節(jié),也需要額外的工作來(lái)保證寫入的原子性,保證即使硬盤在執(zhí)行寫入操作的時(shí)候出現(xiàn)故障,文件也不會(huì)被損壞。 我們先簡(jiǎn)單回顧單機(jī)事務(wù)的原子性的實(shí)現(xiàn)。 常見(jiàn)的機(jī)械磁盤一般可以保證512字節(jié)的原子寫,所謂原子寫也就是說(shuō),即便遭遇突然斷電等意外情況,一般的機(jī)械磁盤也可以保證當(dāng)前512字節(jié)的成功寫入;如果寫入的數(shù)據(jù)大于512字節(jié),則原子寫得不到保障。 為了在更通用的情況下實(shí)現(xiàn)原子性,常見(jiàn)方法是使用日志或WAL這類技術(shù)。簡(jiǎn)單地說(shuō),先將操作的元數(shù)據(jù)寫入一個(gè)單獨(dú)的日志文件,同時(shí)還有表示操作是否完成的標(biāo)記。倘若系統(tǒng)在寫入過(guò)程中發(fā)生故障,那么基于這些數(shù)據(jù),系統(tǒng)恢復(fù)后依然能夠識(shí)別出哪些操作在故障發(fā)生前已完成,然后通過(guò)撤銷所有的操作來(lái)回滾事務(wù);或者通過(guò)完成剩余未執(zhí)行的操作來(lái)繼續(xù)提交事務(wù)。基于硬盤原子寫和日志文件來(lái)實(shí)現(xiàn)事務(wù)原子性的方法,在文件系統(tǒng)和數(shù)據(jù)庫(kù)中廣泛使用。 但分布式系統(tǒng)中的原子性問(wèn)題更加復(fù)雜,因?yàn)楣?jié)點(diǎn)分布在不可靠的網(wǎng)絡(luò)中。此外,我們不僅需要確保一個(gè)操作在一個(gè)節(jié)點(diǎn)上的原子性,還要確保一個(gè)操作在多個(gè)節(jié)點(diǎn)上的原子性,也就是說(shuō),操作要么在所有的節(jié)點(diǎn)上都生效,要么不在任何一個(gè)節(jié)點(diǎn)上生效,每個(gè)節(jié)點(diǎn)提交或中止事務(wù)的操作要保持一致。 我們還是用銀行轉(zhuǎn)賬來(lái)舉例。假設(shè)一個(gè)分布式系統(tǒng)中的兩臺(tái)服務(wù)器,用戶A的賬戶余額存儲(chǔ)在服務(wù)器N1上,用戶B的賬戶余額存儲(chǔ)在服務(wù)器N2上,他們的賬戶上都有100元。 接下來(lái)用戶A要轉(zhuǎn)賬10元給用戶B,事務(wù)需要同時(shí)修改用戶A和用戶B的數(shù)據(jù)。假設(shè)事務(wù)先給服務(wù)器N2上用戶B的賬戶加上10元,再給服務(wù)器N1上用戶A的賬戶減去10元。由于數(shù)據(jù)分布在兩臺(tái)完全不同的服務(wù)器上,很可能出現(xiàn)一些意想不到的故障,可能在給用戶B的賬戶加上10元后,服務(wù)器N1宕機(jī)了,無(wú)法對(duì)用戶A扣錢;甚至服務(wù)器沒(méi)有宕機(jī)也可能觸發(fā)異常,例如可能在請(qǐng)求服務(wù)器N1的時(shí)候發(fā)現(xiàn)用戶A的賬戶余額已經(jīng)不足10元了,不能再對(duì)用戶A的賬戶減去10元(數(shù)據(jù)庫(kù)約束賬戶不能為負(fù)數(shù))。不管怎樣,服務(wù)器N1沒(méi)有完成它在事務(wù)中的那部分工作,但服務(wù)器N2又完成了它的任務(wù)。 分布式事務(wù)的原子性通過(guò)原子提交協(xié)議(Atomic Commit Protocol,ACP)來(lái)實(shí)現(xiàn),原子提交協(xié)議也叫原子提交算法,原子提交協(xié)議必須滿足以下三個(gè)特性: ?? 協(xié)定性(Agreement)。所有進(jìn)程都決議出同一個(gè)值,相當(dāng)于所有進(jìn)程要么一起提交事務(wù),要么一起中止事務(wù),不存在兩個(gè)進(jìn)程一個(gè)提交事務(wù)另一個(gè)中止事務(wù)的情況。 ?? 有效性(Validity)。如果所有進(jìn)程都決定提交事務(wù)并且沒(méi)有任何故障發(fā)生,那么*終整個(gè)系統(tǒng)將提交事務(wù);只要有一個(gè)進(jìn)程決定中止事務(wù),系統(tǒng)*終將中止事務(wù)。 ?? 終止性(Termination)。終止性又分為弱終止條件(Weak Termination Condition)和強(qiáng)終止條件(Strong Termination Condition)。弱終止條件是指,如果沒(méi)有任何故障發(fā)生,那么所有進(jìn)程*終都會(huì)做出決議(提交或終止事務(wù));強(qiáng)終止條件也稱為非阻塞條件(Non-Blocking Condition),是指沒(méi)有發(fā)生故障的進(jìn)程*終會(huì)做出決議。 滿足強(qiáng)終止條件的提交算法被稱作非阻塞提交算法,而滿足弱終止條件但不滿足強(qiáng)終止條件的提交算法被稱作阻塞提交算法。值得注意的是,協(xié)定性約束了兩個(gè)進(jìn)程不能決議出不同的值,因此,原子提交協(xié)議嚴(yán)格不允許一個(gè)出錯(cuò)的進(jìn)程和一個(gè)正確的進(jìn)程做出不同的決定。如果一個(gè)進(jìn)程出錯(cuò)一段時(shí)間后又恢復(fù),則會(huì)導(dǎo)致提交算法出現(xiàn)不一致。 其實(shí)從這三個(gè)特性可以看出,原子提交協(xié)議實(shí)際上解決了分布式共識(shí)問(wèn)題(見(jiàn)第4章)的一個(gè)子類,即對(duì)事務(wù)的提交或中止達(dá)成共識(shí)。

深入理解分布式系統(tǒng) 作者簡(jiǎn)介

唐偉志,曾任網(wǎng)易游戲、騰訊基礎(chǔ)架構(gòu)工程師。畢業(yè)后一直從事分布式系統(tǒng)相關(guān)工作,在知乎和公眾號(hào)“多顆糖”上分享對(duì)分布式系統(tǒng)論文的解讀和算法的講解。開(kāi)源愛(ài)好者、TiDB Reviewer和Kubernetes Contributor。

商品評(píng)論(0條)
暫無(wú)評(píng)論……
書友推薦
本類暢銷
返回頂部
中圖網(wǎng)
在線客服