前 言Preface
為什么寫這本書
現(xiàn)代的分布式技術(shù)在互聯(lián)網(wǎng)應(yīng)用的驅(qū)動下,在CAP理論的引領(lǐng)下,已經(jīng)有了很多新的內(nèi)涵和外延。而分布式技術(shù)體系下,分布式數(shù)據(jù)庫技術(shù)的發(fā)展方興未艾,其中有很多新問題正在被研究,例如:CAP理論中代表分布式一致性的C和事務(wù)ACID中的C之間是什么關(guān)系?是否存在可結(jié)合之處?當(dāng)然,也有很多新技術(shù)正在發(fā)展中。但是,在分布式數(shù)據(jù)庫領(lǐng)域缺少體系化的、深入剖析數(shù)據(jù)庫原理的書籍,使得這個領(lǐng)域的技術(shù)傳播偏弱,尤其是分布式數(shù)據(jù)庫領(lǐng)域的一致性等相關(guān)技術(shù),存在概念混雜、理解不一的問題。筆者基于對該領(lǐng)域多年的科研和實踐,歷經(jīng)數(shù)年,把對分布式數(shù)據(jù)庫領(lǐng)域一些重要技術(shù)的理解和在實踐中所得的經(jīng)驗整理成冊,期待以圖書的形式幫到更多讀者。本書若是能促進(jìn)分布式數(shù)據(jù)庫的進(jìn)一步發(fā)展,筆者將不勝榮幸。
本書主要內(nèi)容
本書主要討論如下3個話題。
分布式數(shù)據(jù)庫中存在的問題和原理?茖W(xué)研究,始于問題。本書首先對分布式數(shù)據(jù)庫技術(shù)中一些典型問題進(jìn)行分析,以明確本書所要研究和解決問題的技術(shù)方向。之后討論CAP原理與ACID技術(shù)結(jié)合后的一些問題(重點是一致性問題)及技術(shù),以及業(yè)界在這方面的科研成果和工程實現(xiàn)思路。
分布式數(shù)據(jù)庫架構(gòu)。從分布式數(shù)據(jù)庫架構(gòu)的角度,討論影響架構(gòu)的內(nèi)在、外在技術(shù)因素,內(nèi)在因素如強一致性、高可靠性、高可用性,外在因素如云計算、Serverless需
求等。
分布式數(shù)據(jù)庫案例實踐。從工程實踐的角度,以案例的形式討論諸多分布式系統(tǒng)的實現(xiàn)技術(shù),涉及的數(shù)據(jù)庫包括Spanner、CockroachDB、HBase、Greenplum等。
本書主要特色
本書以前沿技術(shù)和工程實踐為抓手,通過問題確認(rèn)、原理闡述、架構(gòu)剖析、實例分析,有深度地進(jìn)行了以下三項工作。
深入經(jīng)典技術(shù):對經(jīng)典技術(shù)進(jìn)行深度探索,如剖析CAP原理的發(fā)展過程,深度解讀事務(wù)處理技術(shù)(如MVCC、OCC、DTA等技術(shù))的發(fā)展和相關(guān)研究。
前沿探索:按照本書的內(nèi)容規(guī)劃,對前沿技術(shù)方向與內(nèi)容從廣度層面進(jìn)行剖析和介紹,以開闊讀者的思路和眼界。前沿內(nèi)容散布于各個章節(jié),與各章節(jié)主題互相映襯。
原理、案例相結(jié)合:立足原理,對分布式數(shù)據(jù)庫的架構(gòu)進(jìn)行深度剖析,并對業(yè)界多個產(chǎn)品從問題、原理、前沿技術(shù)研究成果、架構(gòu)相關(guān)因素等角度進(jìn)行深度分析。用多個案例多樣化地印證其他部分介紹的原理和前沿技術(shù)。
本書面向的主要讀者
分布式數(shù)據(jù)庫的設(shè)計者和開發(fā)者;
分布式數(shù)據(jù)庫前沿技術(shù)的研究者;
其他對分布式數(shù)據(jù)庫感興趣的讀者。
如何閱讀本書
本書沒有涉及編程實現(xiàn)的細(xì)節(jié),而是從整體上對分布式數(shù)據(jù)庫一致性等重要問題逐步展開介紹。全書分為三篇原理、架構(gòu)和典型案例。其中原理篇對經(jīng)典的分布式數(shù)據(jù)庫理論和技術(shù)進(jìn)行剖析。
基于原理篇,架構(gòu)篇從兩個角度對分布式數(shù)據(jù)庫架構(gòu)進(jìn)行剖析:一是影響數(shù)據(jù)庫內(nèi)核設(shè)計的理念(第5章);二是影響數(shù)據(jù)庫架構(gòu)設(shè)計的外在環(huán)境(第6章)。這兩個方面的內(nèi)容可幫助讀者深入理解數(shù)據(jù)庫內(nèi)核的框架結(jié)構(gòu)及設(shè)計思想。
典型案例篇則結(jié)合原理,對部分經(jīng)典的分布式數(shù)據(jù)庫系統(tǒng)展開討論,以幫助讀者把理論和實踐相結(jié)合。閱讀案例時,如能時時重溫原理篇的內(nèi)容,則學(xué)習(xí)效果更佳。
本書不僅給出了大量的參考文獻(xiàn)及其概述,還將這些參考文獻(xiàn)和本書內(nèi)容相結(jié)合,兩者相互印證,進(jìn)而使本書內(nèi)容更充實。限于篇幅,書中不可能對所有內(nèi)容都充分展開,所以如果您期望更加深入地掌握和理解相關(guān)內(nèi)容,可進(jìn)一步閱讀相應(yīng)參考文獻(xiàn)。
資源及勘誤
由于筆者的水平有限,書中難免存在錯誤,若您在閱讀時發(fā)現(xiàn)任何問題,都可發(fā)送電子郵件到database_XX@163.com,筆者不勝感謝。有了您的幫助和支持,本書定能更加完善。由于時間有限,也許筆者不能一一回復(fù)所有的電子郵件,但是一定會定期整理并匯總信息到華章網(wǎng)站(http://www.hzbook.com)本書的頁面下。
致謝
在多年的研究和實踐工作中,承蒙中國人民大學(xué)杜小勇教授的悉心指導(dǎo),筆者獲益良多,本書能面世也與杜教授的指導(dǎo)息息相關(guān),在此深表感謝。另外,要特別感謝杜教授在百忙之中抽出時間,專門為本書作序。
本書承蒙武漢大學(xué)彭智勇教授、易鯨捷信息技術(shù)有限公司CEO武新博士、CSDN創(chuàng)始人兼董事長蔣濤先生作序推薦,在此致以誠摯的感謝。
感謝筆者的父母、妻女。筆者傾注于寫作本書的時光,本應(yīng)是陪伴親人們的歲月,筆者因此愧疚不已。
感謝華章公司編輯楊福川先生和孫海亮先生為本書付出的努力與耗費的心血,筆者出版了數(shù)本書,都得到他們無私、有價值的幫助。
感謝每一位讀者,讀者的口碑促使筆者不斷努力,每一位讀者都是筆者繼續(xù)進(jìn)步的不竭動力。期待本書對讀者有所幫助。
李海翔
Contents目 錄
序一
序二
序三
序四
前言
篇 原理
第1章 分布式數(shù)據(jù)庫系統(tǒng)的
挑戰(zhàn)和原理 3
1.1 分布式數(shù)據(jù)庫系統(tǒng)的挑戰(zhàn) 3
1.1.1 分布式系統(tǒng)面臨的問題 4
1.1.2 數(shù)據(jù)庫面臨的一致性問題 7
1.1.3 分布式數(shù)據(jù)庫系統(tǒng)面臨的問題 15
1.2 分布式理論 20
1.2.1 ACID、BASE與CAP簡析 21
1.2.2 CAP分布式理論 23
1.2.3 PACELC理論和CAP新進(jìn)展 29
1.3 分布式系統(tǒng)一致性的本質(zhì) 30
1.3.1 偏序與全序 30
1.3.2 有序與并發(fā) 31
第2章 深入研究一致性 33
2.1 概述 34
2.1.1 常見的分布式一致性 35
2.1.2 科研情況一覽 38
2.2 結(jié)果一致性 41
2.2.1 共識問題形象化描述:拜占庭將軍問題 42
2.2.2 結(jié)果一致性的應(yīng)用 42
2.3 次序一致性 43
2.3.1 線性一致性 43
2.3.2 順序一致性 47
2.3.3 因果一致性 47
2.3.4 會話一致性 48
2.4 分布式事務(wù)一致性 49
2.4.1 單機事務(wù)的一致性 49
2.4.2 分布式事務(wù)的一致性 52
2.4.3 分布式一致性與分布式事務(wù)一致性的關(guān)系 52
2.5 架構(gòu)一致性 54
2.5.1 分布式系統(tǒng)主備一致性 54
2.5.2 去中心化的分布式系統(tǒng)一致性 55
第3章 一致性問題的解法 56
3.1依賴物理時間引發(fā)的問題 56
3.2邏輯時鐘 57
3.2.1 因果(happened-before)模型 57
3.2.2邏輯時鐘的實現(xiàn) 58
3.2.3邏輯時鐘的缺點 58
3.2.4物理時鐘與同步問題 59
3.3向量時鐘 59
3.4混合邏輯時鐘 61
3.5Paxos協(xié)議 64
3.5.1 Paxos協(xié)議解決問題的背景 64
3.5.2Paxos協(xié)議中的角色 64
3.5.3 Basic Paxos協(xié)議 66
3.5.4Paxos協(xié)議改進(jìn)與擴(kuò)展 67
3.6Raft算法 74
3.6.1Raft算法基礎(chǔ) 74
3.6.2Raft算法詳解 75
3.6.3 Paxos算法與Raft算法的比較 78
第4章 分布式事務(wù)原理 81
4.1 概述 82
4.1.1 單機事務(wù)處理技術(shù) 82
4.1.2 分布式事務(wù)處理技術(shù) 85
4.2 基本的分布式事務(wù)并發(fā)訪問控制機制 89
4.2.1 封鎖并發(fā)訪問控制算法 90
4.2.2 TO相關(guān)算法 91
4.2.3 CO算法 92
4.3 OCC算法 95
4.3.1 OCC算法的優(yōu)勢與不足 95
4.3.2 基本的OCC算法 97
4.3.3 改進(jìn)的OCC算法 103
4.3.4 OCC算法與其他并發(fā)算法的融合 110
4.3.5 分布式OCC算法 117
4.4 MVCC技術(shù) 121
4.4.1 MVCC技術(shù)解決了
什么問題 122
4.4.2 MVCC技術(shù)的核心思想 123
4.4.3 可串行化的快照隔離 124
4.4.4 寫快照隔離 128
4.4.5 MVCC技術(shù)實現(xiàn)示例 132
4.4.6 MVCC技術(shù)擴(kuò)展 139
4.5 前沿的并發(fā)控制技術(shù) 140
4.5.1 動態(tài)調(diào)整時間戳算法 140
4.5.2 Data-driven算法 145
4.5.3 面向列的細(xì)粒度機制 148
4.5.4 基于硬件的改進(jìn) 149
4.5.5 基于AI的改進(jìn) 153
4.5.6 自適應(yīng)并發(fā)訪問控制算法 155
4.6 分布式提交技術(shù) 159
4.6.1 兩階段提交 159
4.6.2 三階段提交 163
4.6.3 基于Paxos的提交 164
4.6.4 一階段提交 166
4.7 可串行化發(fā)展歷史 166
4.8 其他分布式處理技術(shù) 169
第二篇 架構(gòu)
第5章 去中心化的分布式數(shù)據(jù)庫架構(gòu) 175
5.1 分布式存儲架構(gòu) 175
5.1.1 數(shù)據(jù)分布 176
5.1.2 數(shù)據(jù)管理 177
5.1.3 多副本與數(shù)據(jù)存儲 179
5.1.4 存算分離 180
5.1.5 多讀與多寫 184
5.2 分布式查詢優(yōu)化與并行執(zhí)行架構(gòu) 187
5.2.1 查詢優(yōu)化 187
5.2.2 MPP 188
5.2.3 計算下推/外推 189
5.3 高可用性架構(gòu) 190
5.3.1 高可用衡量指標(biāo) 191
5.3.2 高可用性分類 194
5.3.3 高可用事務(wù) 195
5.3.4 高可用架構(gòu) 197
5.4 分布式事務(wù)架構(gòu) 198
5.4.1 事務(wù)管理器在客戶端、中間件、服務(wù)器端中的實現(xiàn) 198
5.4.2 去中心化的并發(fā)事務(wù)框架 201
5.5 可擴(kuò)展性架構(gòu) 202
5.5.1 可擴(kuò)展性是一種能力 202
5.5.2 事務(wù)處理的可擴(kuò)展性 204
5.6 強一致性 206
5.7 解耦 206
第6章 新技術(shù)與分布式數(shù)據(jù)庫架構(gòu) 210
6.1 新硬件 210
6.2 智能數(shù)據(jù)庫 211
6.3 云計算與數(shù)據(jù)庫 213
6.3.1 云原生 214
6.3.2 云數(shù)據(jù)庫 216
6.3.3 Serverless數(shù)據(jù)庫 217
6.4 HTAP 218
6.4.1 HTAP概念與HTAC架構(gòu) 218
6.4.2 行列混存 220
6.5 下一代數(shù)據(jù)庫 221
6.5.1 數(shù)據(jù)庫技術(shù)簡史 221
6.5.2 下一代數(shù)據(jù)庫技術(shù)特征 228
第三篇 典型案例
第7章 Spanner深度探索 233
7.1 從Spanner的兩篇重點論文說起 233
7.2 Spanner的架構(gòu) 234
7.3 Spanner的事務(wù)處理模型 236
7.3.1 讀事務(wù)的分類和意義 237
7.3.2 分布式一致性實現(xiàn)原理 237
7.3.3 寫操作一致性的實現(xiàn)原理 239
7.3.4 Truetime事務(wù)處理機制的缺點 241
7.3.5 深入理解Spanner的悲觀策略 242
7.3.6 Spanner與MVCC 243
7.3.7 讀副本數(shù)據(jù) 244
7.3.8 全局讀事務(wù)的一致性 244
7.3.9 只讀事務(wù) 245
7.4 Spanner與CAP 246
第8章 Percolator事務(wù)處理模型 247
8.1 Percolator的架構(gòu) 247
8.2 Percolator的事務(wù)處理 248
8.2.1 事務(wù)處理整體過程 248
8.2.2 數(shù)據(jù)項上存儲的事務(wù)信息 249
8.2.3 事務(wù)提交過程 249
8.2.4 事務(wù)讀數(shù)據(jù)過程 252
8.2.5 Percolator的事務(wù)處理示例 253
第9章 CockroachDB深度探索 255
9.1 CockroachDB的架構(gòu) 255
9.2 CockroachDB事務(wù)處理模型 257
9.2.1 事務(wù)處理相關(guān)的數(shù)據(jù)結(jié)構(gòu) 258
9.2.2 事務(wù)處理的階段 259
9.2.3 事務(wù)處理的整體過程 260
9.2.4 事務(wù)的并發(fā)沖突 261
9.2.5 事務(wù)自動終止 264
9.2.6 隔離級別 265
9.3 分布式一致性實現(xiàn)原理 265
第10章 其他數(shù)據(jù)庫 267
10.1 內(nèi)存型數(shù)據(jù)庫Hekaton的事務(wù)處理機制 267
10.1.1 Hekaton的技術(shù)架構(gòu) 267
10.1.2 Hekaton的事務(wù)管理 271
10.1.3 Hekaton的并發(fā)控制 275
10.2 文檔型分布式數(shù)據(jù)庫MongoDB 276
10.2.1 MongoDB的架構(gòu) 277
10.2.2 MongoDB的事務(wù)處理技術(shù) 277
10.3 列存分布式數(shù)據(jù)庫HBase 278
10.3.1 HBase的架構(gòu) 278
10.3.2 HBase的事務(wù)處理技術(shù) 279
10.4 Greenplum 280
10.5 圖、鍵值、文檔事務(wù)處理技術(shù) 282
10.5.1 圖模型事務(wù)處理技術(shù) 283
10.5.2 鍵值、文檔模型事務(wù)處理技術(shù) 284
10.6 深入討論數(shù)據(jù)庫架構(gòu) 285
10.6.1 數(shù)據(jù)庫的通用架構(gòu) 285
10.6.2 事務(wù)型數(shù)據(jù)庫的架構(gòu) 286
10.6.3 主流分布式數(shù)據(jù)庫的技術(shù)比較 290
參考文獻(xiàn) 292