分布式數(shù)據(jù)服務(wù):事務(wù)模型、處理語言、一致性與體系結(jié)構(gòu) 徐子晨 柳杰 婁俊升
定 價:79 元
- 作者:徐子晨 柳杰 婁俊升
- 出版時間:2024/2/1
- ISBN:9787111737377
- 出 版 社:機械工業(yè)出版社
- 中圖法分類:TP274
- 頁碼:
- 紙張:膠版紙
- 版次:
- 開本:16開
隨著物聯(lián)網(wǎng)、云計算、大數(shù)據(jù)與人工智能等技術(shù)的蓬勃發(fā)展,計算服務(wù)逐漸從計算密集型向數(shù)據(jù)密集型(Data Intensive)轉(zhuǎn)變。高性能、高通量的數(shù)據(jù)服務(wù)關(guān)鍵技術(shù)成為智慧城市、智能制造、智慧農(nóng)業(yè)等國家重大需求解決方案的核心基礎(chǔ)。并行與分布式數(shù)據(jù)處理的概念啟發(fā)于上世紀80年代,源自討論在內(nèi)存及二級存儲極為有限的條件下如何跨越“內(nèi)存墻”,完成計算任務(wù)的優(yōu)化技術(shù)。而今,互聯(lián)網(wǎng)與私有網(wǎng)絡(luò)數(shù)據(jù)指數(shù)級增長、數(shù)據(jù)服務(wù)的事務(wù)性需求復(fù)雜多變、跨地域數(shù)據(jù)同步需求動態(tài)不統(tǒng)一、如何應(yīng)對當前及未來大數(shù)據(jù)服務(wù)及其上的人工智能計算對并行與分布式數(shù)據(jù)服務(wù)提出了新的問題與挑戰(zhàn)。本書從并行與分布式數(shù)據(jù)服務(wù)的基礎(chǔ)理論、事務(wù)模型、數(shù)據(jù)處理語言等基礎(chǔ)內(nèi)容,并進一步討論分布式數(shù)據(jù)一致性模型及全觀性的數(shù)據(jù)處理架構(gòu)方面的先進及實用的研究及系統(tǒng)軟件相關(guān)知識,,對分布式數(shù)據(jù)服務(wù)的其他研究也進行了概述,并對其未來發(fā)展方向進行展望。本書可以作為計算機、數(shù)據(jù)科學(xué)與大數(shù)據(jù)技術(shù)、人工智能等相關(guān)專業(yè)的高年級本科生與研究生在數(shù)據(jù)庫理論及分布式系統(tǒng)等課程上的輔助教材,也可以為物聯(lián)網(wǎng)、云計算、大數(shù)據(jù)與人工智能等領(lǐng)域的科研人員及從業(yè)者提供創(chuàng)新研究與技術(shù)應(yīng)用的參考。
?本書主要圍繞分布式數(shù)據(jù)服務(wù)進行闡述,對分布式數(shù)據(jù)服務(wù)相關(guān)系統(tǒng)、算法以及體系結(jié)構(gòu)進行了全面的解讀。
?本書加入了大量的實踐實訓(xùn)環(huán)節(jié),引導(dǎo)讀者從零到一構(gòu)建一種強一致性協(xié)議并實現(xiàn)其運行框架。
?本書中的硬核技術(shù)是互聯(lián)網(wǎng)大廠亟需的分布式基礎(chǔ)架構(gòu)開發(fā)技術(shù),為相關(guān)從業(yè)人員提供了全面而系統(tǒng)的學(xué)習(xí)資源。
寫作是一件痛苦的事情,這不僅僅是自己思考的模態(tài)轉(zhuǎn)換,更是對自身學(xué)術(shù)認知的重新梳理。大概在12年前,我還是一個學(xué)生,在某次學(xué)術(shù)會議上遇到了Leslie Lamport博士。那時他已經(jīng)70歲高齡,臉上溝壑縱橫,但眼神仍然犀利,對探討的話題反饋依舊敏銳。當時是我第一次聽到Paxos Island的故事,并從此進入了分布式一致性協(xié)議優(yōu)化的“深淵巨口”。時間如白駒過隙,十多年過去了,我們在分布式一致性協(xié)議上做了各種工作,有些是對數(shù)學(xué)模型的探討,有些是對具體實現(xiàn)的優(yōu)化,還有一些是人生哲學(xué)上的引申。我們想留下這些心得體會,并分享給更多人。
本書主要圍繞Raft和Paxos兩個協(xié)議進行闡述。與其他相關(guān)圖書不同的是,書中加入了大量的實踐實訓(xùn)環(huán)節(jié),引導(dǎo)讀者從零到一構(gòu)建一種強一致性協(xié)議并實現(xiàn)其運行框架。這種技術(shù)是硬核的,是很多互聯(lián)網(wǎng)企業(yè)急需的,是值得學(xué)習(xí)的。這與我們成書的起源相關(guān)。2017年,我回國開始創(chuàng)辦泛在數(shù)據(jù)處理與優(yōu)化實驗室,開始只有幾個本科生跟著我做一些超出他們學(xué)習(xí)范圍的工作。其中就有本書的另一作者——柳杰。年輕人對未知知識是如此渴望,但是對復(fù)雜數(shù)學(xué)模型又是如此畏懼。在共同協(xié)作下,我們復(fù)現(xiàn)了Raft(Paxos協(xié)議的一種變形)、Paxos,甚至提出了更加泛化、更簡單好用的eRaft一致性協(xié)議及其實現(xiàn),并且eRaft被收錄于斯坦福大學(xué)的一致性協(xié)議公開庫中。整體工作共用了大概5年時間。在此基礎(chǔ)上,我們可以對分布式數(shù)據(jù)庫,特別是分布式數(shù)據(jù)庫函數(shù)級服務(wù),實現(xiàn)更好更寬泛的支持。希望本書可以幫助更多學(xué)生,實現(xiàn)復(fù)雜的一致性協(xié)議,同時對學(xué)生學(xué)習(xí)分布式系統(tǒng)、分布式數(shù)據(jù)庫等高階知識起到幫助作用。
較早的時候,機械工業(yè)出版社的編輯找到我,希望我寫一本關(guān)于數(shù)據(jù)庫先進技術(shù)的書。我答應(yīng)了,決定把這本書寫出來。在編寫本書的過程中,崔傲、譚國龍、姜文靜、向紫芊、肖欣雨等同學(xué)幫忙搜集資料,黃嘉誠、劉必勇、吳偉正等同學(xué)幫忙構(gòu)建系統(tǒng),吳偉正、曾燾、舒磊明、許可、李江波、李冰雁、孫珍齡等同學(xué)幫忙完成協(xié)調(diào)、編纂、校對、驗證代碼等一系列煩瑣的工作。在成書的過程中,得到了中國人民大學(xué)杜小勇老師,上海交通大學(xué)過敏意老師、陳全老師、李超老師、陳海波老師、王肇國老師,中國科學(xué)技術(shù)大學(xué)李誠老師,國防科技大學(xué)董德尊老師,北京理工大學(xué)王國仁老師、袁野老師,北京航空航天大學(xué)馬帥老師等各位師長的建議和指導(dǎo),在此一并感謝。
表文云,“麗文幽質(zhì),唯道可度,歡同隕世,大道不稱”。共勉之。
徐子晨
2023年4月20日
徐子晨:
教授、博士生導(dǎo)師。2016年6月畢業(yè)于美國俄亥俄州立大學(xué)獲博士學(xué)位,F(xiàn)為南昌大學(xué)數(shù)學(xué)與計算機學(xué)院副院長,高層次引進人才,學(xué)科方向帶頭人,江西省“雙千計劃”首批入選者。在南昌大學(xué)任職期間教授本科生及研究生系統(tǒng)類課程二十余門。
主要從事包括數(shù)據(jù)密集計算,智能計算,高能效計算及分布式數(shù)據(jù)存儲等數(shù)據(jù)庫系統(tǒng)軟件相關(guān)方面的教研工作。以第一作者發(fā)表數(shù)據(jù)庫、分布式系統(tǒng)體系結(jié)構(gòu)等方向高水平期刊、會議文章50余篇。服務(wù)于IEEE/ACM TKDE/TC/TPDS/TCC等旗艦期刊,擔任過IEEE ICDE,INFOCOM,BigData,IWQoS,ICDCS等國際旗艦會議的程序委員會副主席及委員等相關(guān)工作。是計算機數(shù)據(jù)庫系統(tǒng)研究者。
柳杰:
國內(nèi)互聯(lián)網(wǎng)大廠分布式緩存服務(wù)高級工程師,前滴滴出行高級軟件開發(fā)工程師,曾參與并主導(dǎo)了滴滴出行底層鍵值存儲系統(tǒng)分布式資源編排系統(tǒng)的重構(gòu)方案設(shè)計,并負責開發(fā)實現(xiàn),在分布式系統(tǒng)架構(gòu)領(lǐng)域有深入研究。是開源項目eraft(https://eraft.cn/)主要代碼貢獻者,該項目被收錄于斯坦福大學(xué)Raft協(xié)議官方庫,亦是本書的實踐主體。
婁俊升:
2021級南昌大學(xué)軟件工程碩士,研究方向為分布式系統(tǒng)一致性算法優(yōu)化。曾參與多個國家級、省級項目研發(fā),從中學(xué)習(xí)與總結(jié)了許多分布式系統(tǒng)領(lǐng)域相關(guān)的理論和實踐經(jīng)驗,對分布式一致性算法性能優(yōu)化有深入研究。
序
前言
第一部分 分布式系統(tǒng)基礎(chǔ)與理論
第1章 分布式系統(tǒng)基礎(chǔ)2
1.1 概述2
1.2 分布式設(shè)計目標4
1.2.1 一致性4
1.2.2 可用性6
1.2.3 分區(qū)容錯性8
1.2.4 可擴展性9
1.3 數(shù)據(jù)模型10
1.3.1 關(guān)系模型10
1.3.2 文檔模型12
1.3.3 圖狀數(shù)據(jù)模型14
1.4 數(shù)據(jù)存儲15
1.4.1 數(shù)據(jù)庫內(nèi)部的數(shù)據(jù)結(jié)構(gòu)17
1.4.2 列式存儲20
1.5 數(shù)據(jù)冗余與副本25
1.6 本章小結(jié)27
第2章 分布式數(shù)據(jù)處理語言29
2.1 SQL29
2.1.1 SQL基礎(chǔ)30
2.1.2 SQL的查詢語句33
2.1.3 SQL表的連接42
2.1.4 SQL的其他語句48
2.2 NoSQL52
2.2.1 鍵值數(shù)據(jù)庫處理語言53
2.2.2 文檔數(shù)據(jù)庫處理語言56
2.2.3 列族數(shù)據(jù)庫處理語言61
2.2.4 圖數(shù)據(jù)庫處理語言65
2.3 本章小結(jié)72
第3章 分布式查詢過程73
3.1 分布式連接問題74
3.1.1 直接連接算法77
3.1.2 半連接算法78
3.1.3 布隆連接算法80
3.2 多關(guān)系連接83
3.2.1 分布式查詢優(yōu)化的目標83
3.2.2 分布式查詢優(yōu)化的基本方法84
3.2.3 局部處理優(yōu)化85
3.2.4 基于直接連接的多連接查詢優(yōu)化87
3.2.5 基于半連接的多連接查詢優(yōu)化90
3.3 關(guān)系連接算法91
3.3.1 嵌套循環(huán)連接算法92
3.3.2 哈希連接算法93
3.3.3 排序歸并連接算法95
3.4 本章小結(jié)97
第4章 分布式環(huán)境下的事務(wù)處理99
4.1 深入理解事務(wù)100
4.1.1 本地事務(wù)100
4.1.2 全局事務(wù)111
4.1.3 分布式事務(wù)112
4.2 原子提交協(xié)議和分布式事務(wù)
解決方案113
4.2.1 2PC協(xié)議113
4.2.2 3PC協(xié)議118
4.2.3 Best Efforts 1 PC事務(wù)120
4.2.4 TCC事務(wù)121
4.2.5 SAGA事務(wù)123
4.3 并發(fā)控制協(xié)議125
4.3.1 悲觀并發(fā)控制協(xié)議126
4.3.2 樂觀并發(fā)控制協(xié)議134
4.3.3 多版本并發(fā)控制協(xié)議136
4.4 本章小結(jié)138
第5章 分布式數(shù)據(jù)服務(wù)一致性139
5.1 數(shù)據(jù)同步方法139
5.1.1 主從復(fù)制139
5.1.2 多主復(fù)制141
5.1.3 無主復(fù)制143
5.2 分布式數(shù)據(jù)一致性級別144
5.2.1 線性一致性145
5.2.2 順序一致性和PRAM一致性147
5.2.3 因果一致性149
5.2.4 最終一致性和弱一致性152
5.3 分布式數(shù)據(jù)一致性/共識算法154
5.3.1 ViewStamped Replication算法157
5.3.2 Paxos算法161
5.3.3 Practical Byzantine Fault Tolerance算法167
5.3.4 Raft算法171
5.4 本章小結(jié)177
第二部分 分布式系統(tǒng)經(jīng)典案例學(xué)習(xí)與實戰(zhàn)
第6章 分布式系統(tǒng)案例分析——GFS180
6.1 GFS的設(shè)計目標180
6.2 GFS的master節(jié)點181
6.3 GFS讀文件182
6.4 GFS寫文件182
6.5 GFS的一致性183
6.6 本章小結(jié)185
第7章 面向分布式系統(tǒng)設(shè)計的Go語言基礎(chǔ)知識186
7.1 Go 語言的優(yōu)勢186
7.2 切片189
7.2.1 Go語言中的數(shù)組189
7.2.2 切片的聲明190
7.2.3 切片的追加190
7.2.4 切片的截取192
7.2.5 修改切片元素193
7.3 Goroutine和通道194
7.3.1 Goroutine簡介195
7.3.2 Goroutine 的使用196
7.3.3 通道簡介200
7.3.4 通道實現(xiàn)同步202
7.4 調(diào)度器203
7.4.1 調(diào)度器的設(shè)計決策203
7.4.2 Go語言調(diào)度器模型204
7.5 本章小結(jié)213
第8章 構(gòu)建強一致性算法庫214
8.1 核心數(shù)據(jù)結(jié)構(gòu)設(shè)計214
8.2 協(xié)程模型215
8.3 RPC定義217
8.3.1 日志條目:Entry217
8.3.2 投票請求:Request-Vote217
8.3.3 追加日志:Append-Entries218
8.4 Leader 選舉實現(xiàn)分析219
8.5 日志復(fù)制實現(xiàn)分析224
8.6 Raft快照實現(xiàn)分析228
8.7 本章小結(jié)230
第9章 基于強一致性算法庫構(gòu)建分布式鍵值存儲系統(tǒng)231
9.1 eraftkv架構(gòu)及運行流程231
9.2 eraftkv環(huán)境配置232
9.3 讓系統(tǒng)運行起來233
9.4 對外接口定義234
9.5 服務(wù)端核心實現(xiàn)分析235
9.6 本章小結(jié)239
第10章強一致性算法Raft的優(yōu)化設(shè)計與實現(xiàn):Multi-Raft240
10.1 設(shè)計思考240
10.2 配置服務(wù)器實現(xiàn)分析241
10.3 分片服務(wù)器實現(xiàn)分析242
10.4 客戶端實現(xiàn)分析246
10.5 本章小結(jié)248
參考文獻249