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