什么是分布式數(shù)據(jù)庫(kù)?聊聊它的前世今生
?在互聯(lián)網(wǎng)技術(shù)發(fā)展的今天,相信大家都對(duì)分布式數(shù)據(jù)庫(kù)表示出了濃厚的興趣,并且不約而同地問(wèn)了我這樣一個(gè)問(wèn)題:啥是分布式數(shù)據(jù)庫(kù)?更有“愛(ài)好學(xué)習(xí)”的朋友希望借此展現(xiàn)出“勤學(xué)好問(wèn)”的品德,進(jìn)而補(bǔ)充道:“這是哪個(gè)大廠出的產(chǎn)品?”
好吧,我的朋友,你們真的戳中了我的笑點(diǎn)。但笑一笑后,我不禁陷入了思考:為什么分布式數(shù)據(jù)庫(kù)在大眾,甚至專業(yè)領(lǐng)域內(nèi)認(rèn)知如此之低呢?
原因我大概可以總結(jié)為兩點(diǎn):數(shù)據(jù)庫(kù)產(chǎn)品特點(diǎn)與商業(yè)氛圍。
首先,數(shù)據(jù)庫(kù)產(chǎn)品的特點(diǎn)是抽象度高。用戶一般僅僅從使用層面接觸數(shù)據(jù)庫(kù),知道數(shù)據(jù)庫(kù)能實(shí)現(xiàn)哪些功能,而不關(guān)心或者很難關(guān)心其內(nèi)部原理。而一些類(lèi)型的分布式數(shù)據(jù)庫(kù)的賣(mài)點(diǎn)正是這種抽象能力,從而使用戶覺(jué)得應(yīng)用這種分布式化的數(shù)據(jù)庫(kù)與傳統(tǒng)單機(jī)數(shù)據(jù)庫(kù)沒(méi)有明顯的差別,甚至更加簡(jiǎn)單。
其次,數(shù)據(jù)庫(kù)的商業(yè)氛圍一直很濃厚。數(shù)據(jù)庫(kù)產(chǎn)品高度抽象且位置關(guān)鍵,這就天然成為資本追逐的領(lǐng)地。而商業(yè)化產(chǎn)品和服務(wù)的賣(mài)點(diǎn)就是其包含支撐服務(wù),而且許多商業(yè)數(shù)據(jù)庫(kù)最賺錢(qián)的部分就是提供該服務(wù)。因此這些產(chǎn)品有意無(wú)意地對(duì)終端用戶掩蓋了數(shù)據(jù)庫(kù)的技術(shù)細(xì)節(jié),而用戶有了這層商業(yè)保障,也很難有動(dòng)力去主動(dòng)了解內(nèi)部原理。
這就造成即使你工作中接觸了分布式數(shù)據(jù)庫(kù),也沒(méi)有意識(shí)到它與過(guò)去的數(shù)據(jù)庫(kù)有什么不同。但“福報(bào)遲到,但不會(huì)缺席”——當(dāng)由于對(duì)其原理缺乏必要認(rèn)識(shí),導(dǎo)致技術(shù)問(wèn)題頻發(fā)時(shí),用戶才會(huì)真正意識(shí)到它們好像類(lèi)似,但本質(zhì)卻截然不同。
而隨著分布式數(shù)據(jù)庫(kù)逐步滲透到各個(gè)領(lǐng)域,用戶再也不能“傻瓜式”地根據(jù)特性選擇數(shù)據(jù)庫(kù)產(chǎn)品了。新架構(gòu)催生出來(lái)的新特性,促使使用者需要深入?yún)⑴c其中,并需要他們認(rèn)真評(píng)估數(shù)據(jù)庫(kù)技術(shù)特點(diǎn),甚至要重新設(shè)計(jì)自己的產(chǎn)品來(lái)與之更好地結(jié)合。
我是“歷史決定論”的忠實(shí)簇?fù)碚撸視?huì)沿著分布式數(shù)據(jù)庫(kù)的發(fā)展脈絡(luò)來(lái)介紹它。相信你在讀完后,會(huì)對(duì)一開(kāi)始的那個(gè)問(wèn)題有自己的答案。那么現(xiàn)在我們從基本概念開(kāi)始說(shuō)起。
基本概念
分布式數(shù)據(jù)庫(kù),從名字上可以拆解為:分布式+數(shù)據(jù)庫(kù)。用一句話總結(jié)為:由多個(gè)獨(dú)立實(shí)體組成,并且彼此通過(guò)網(wǎng)絡(luò)進(jìn)行互聯(lián)的數(shù)據(jù)庫(kù)。
理解新概念最好的方式就是通過(guò)已經(jīng)掌握的知識(shí)來(lái)學(xué)習(xí),下表對(duì)比了大家熟悉的分布式數(shù)據(jù)庫(kù)與集中式數(shù)據(jù)庫(kù)之間主要的 5 個(gè)差異點(diǎn)。

從表中,我們可以總結(jié)出分布式數(shù)據(jù)庫(kù)的核心——數(shù)據(jù)分片、數(shù)據(jù)同步。
1. 數(shù)據(jù)分片
該特性是分布式數(shù)據(jù)庫(kù)的技術(shù)創(chuàng)新。它可以突破中心化數(shù)據(jù)庫(kù)單機(jī)的容量限制,從而將數(shù)據(jù)分散到多節(jié)點(diǎn),以更靈活、高效的方式來(lái)處理數(shù)據(jù)。這是分布式理論帶給數(shù)據(jù)庫(kù)的一份禮物。
分片方式包括兩種。
水平分片:按行進(jìn)行數(shù)據(jù)分割,數(shù)據(jù)被切割為一個(gè)個(gè)數(shù)據(jù)組,分散到不同節(jié)點(diǎn)上。
垂直分片:按列進(jìn)行數(shù)據(jù)切割,一個(gè)數(shù)據(jù)表的模式(Schema)被切割為多個(gè)小的模式。
2. 數(shù)據(jù)同步
它是分布式數(shù)據(jù)庫(kù)的底線。由于數(shù)據(jù)庫(kù)理論傳統(tǒng)上是建立在單機(jī)數(shù)據(jù)庫(kù)基礎(chǔ)上,而引入分布式理論后,一致性原則被打破。因此需要引入數(shù)據(jù)庫(kù)同步技術(shù)來(lái)幫助數(shù)據(jù)庫(kù)恢復(fù)一致性。
簡(jiǎn)而言之,就是使分布式數(shù)據(jù)庫(kù)用起來(lái)像“正常的數(shù)據(jù)庫(kù)”。所以數(shù)據(jù)同步背后的推動(dòng)力,就是人們對(duì)數(shù)據(jù)“一致性”的追求。這兩個(gè)概念相輔相成,互相作用。
當(dāng)然分布式數(shù)據(jù)庫(kù)還有其他特點(diǎn),但把握住以上兩點(diǎn),已經(jīng)足夠我們理解它了。下面我將從這兩個(gè)特性出發(fā),探求技術(shù)史上分布式數(shù)據(jù)庫(kù)的發(fā)展脈絡(luò)。我會(huì)以互聯(lián)網(wǎng)、云計(jì)算等較新的時(shí)間節(jié)點(diǎn)來(lái)進(jìn)行斷代劃分,畢竟我們的核心還是著眼現(xiàn)在、面向未來(lái)。
商業(yè)數(shù)據(jù)庫(kù)
互聯(lián)網(wǎng)浪潮之前的數(shù)據(jù)庫(kù),特別是前大數(shù)據(jù)時(shí)代。談到分布式數(shù)據(jù)庫(kù)繞不開(kāi)的就是 Oracle RAC。

Oracle RAC 是典型的大型商業(yè)解決方案,且為軟硬件一體化解決方案。我在早年入職國(guó)內(nèi)頂級(jí)電信行業(yè)解決方案公司的時(shí)候,就被其強(qiáng)大的性能所震撼,又為它高昂的價(jià)格所深深折服。它是那個(gè)時(shí)代數(shù)據(jù)庫(kù)性能的標(biāo)桿和極限,是完美方案與商業(yè)成就的體現(xiàn)。
我們?cè)囍蒙厦嬲劦降膬蓚€(gè)特性來(lái)簡(jiǎn)單分析一下 RAC:它確實(shí)是做到了數(shù)據(jù)分片與同步。每一層都是離散化的,特別在底層存儲(chǔ)使用了 ASM 鏡像存儲(chǔ)技術(shù),使其看起來(lái)像一塊完整的大磁盤(pán)。
這樣做的好處是實(shí)現(xiàn)了極致的使用體驗(yàn),即使用單例數(shù)據(jù)庫(kù)與 RAC 集群數(shù)據(jù)庫(kù),在使用上沒(méi)有明顯的區(qū)別。它的分布式存儲(chǔ)層提供了完整的磁盤(pán)功能,使其對(duì)應(yīng)用透明,從而達(dá)到擴(kuò)展性與其他性能之間的平衡。甚至在應(yīng)對(duì)特定規(guī)模的數(shù)據(jù)下,其經(jīng)濟(jì)性又有不錯(cuò)的表現(xiàn)。
這種分布式數(shù)據(jù)庫(kù)設(shè)計(jì)被稱為“共享存儲(chǔ)架構(gòu)”(share disk architecture)。它既是 RAC 強(qiáng)大的關(guān)鍵,又是其“阿喀琉斯之踵”,DBA 坊間流傳的 8 節(jié)點(diǎn)的最大集群限制可以被認(rèn)為是 RAC 的極限規(guī)模。
該規(guī)模在當(dāng)時(shí)的環(huán)境下是完全夠用的,但是隨著互聯(lián)網(wǎng)的崛起,一場(chǎng)轟轟烈烈的“運(yùn)動(dòng)”將會(huì)打破 Oracle RAC 的不敗金身。
大數(shù)據(jù)
我們知道 Oracle、DB2 等商業(yè)數(shù)據(jù)庫(kù)均為 OLTP 與 OLAP 融合數(shù)據(jù)庫(kù)。而首先在分布式道路上尋求突破的是 OLAP 領(lǐng)域。在 2000 年伊始,以 Hadoop 為代表的大數(shù)據(jù)庫(kù)技術(shù)憑借其“無(wú)共享”(share nothing)的技術(shù)體系,開(kāi)始向以 Oracle 為代表的關(guān)系型數(shù)據(jù)庫(kù)發(fā)起沖擊。

這是一次水平擴(kuò)展與垂直擴(kuò)展,通用經(jīng)濟(jì)設(shè)備與專用昂貴服務(wù),開(kāi)源與商業(yè)這幾組概念的首次大規(guī)模碰撞。拉開(kāi)了真正意義上分布式數(shù)據(jù)庫(kù)的帷幕。
當(dāng)然從一般的觀點(diǎn)出發(fā),Hadoop 一類(lèi)的大數(shù)據(jù)處理平臺(tái)不應(yīng)稱為數(shù)據(jù)庫(kù)。但是從前面我們歸納的兩點(diǎn)特性看,它們又確實(shí)非常滿足。因此我們可以將它們歸納為早期面向商業(yè)分析場(chǎng)景的分布式數(shù)據(jù)庫(kù)。從此 OLAP 型數(shù)據(jù)庫(kù)開(kāi)始了自己獨(dú)立演化的道路。
除了 Hadoop,另一種被稱為 MPP(大規(guī)模并行處理)類(lèi)型的數(shù)據(jù)庫(kù)在此段時(shí)間也經(jīng)歷了高速的發(fā)展。MPP 數(shù)據(jù)庫(kù)的架構(gòu)圖如下:

我們可以看到這種數(shù)據(jù)庫(kù)與大數(shù)據(jù)常用的 Hadoop 在架構(gòu)層面上非常類(lèi)似,但理念不同。簡(jiǎn)而言之,它是對(duì) SMP(對(duì)稱多處理器結(jié)構(gòu))、NUMA(非一致性存儲(chǔ)訪問(wèn)結(jié)構(gòu))這類(lèi)硬件體系的創(chuàng)新,采用 shared-nothing 架構(gòu),通過(guò)網(wǎng)絡(luò)將多個(gè) SMP 節(jié)點(diǎn)互聯(lián),使它們協(xié)同工作。
MPP 數(shù)據(jù)庫(kù)的特點(diǎn)是首先支持 PB 級(jí)的數(shù)據(jù)處理,同時(shí)支持比較豐富的 SQL 分析查詢語(yǔ)句。同時(shí),該領(lǐng)域是商業(yè)產(chǎn)品的戰(zhàn)場(chǎng),其中不僅僅包含獨(dú)立廠商,如 Teradata,還包含一些巨頭玩家,如 HP 的 Vertica、EMC 的 Greenplum 等。
大數(shù)據(jù)技術(shù)的發(fā)展使 OLAP 分析型數(shù)據(jù)庫(kù),從原來(lái)的關(guān)系型數(shù)據(jù)庫(kù)之中獨(dú)立出來(lái),形成了完整的發(fā)展分支路徑。而隨著互聯(lián)網(wǎng)浪潮的發(fā)展,OLTP 領(lǐng)域迎來(lái)了發(fā)展的機(jī)遇。
互聯(lián)網(wǎng)化
國(guó)內(nèi)數(shù)據(jù)庫(kù)領(lǐng)域進(jìn)入互聯(lián)網(wǎng)時(shí)代第一個(gè)重大事件就是“去 IOE”。

其中尤以“去 Oracle 數(shù)據(jù)庫(kù)”產(chǎn)生的影響深遠(yuǎn)。十年前,阿里巴巴喊出的這個(gè)口號(hào)深深影響了國(guó)內(nèi)數(shù)據(jù)庫(kù)領(lǐng)域,這里我們不去探討其中細(xì)節(jié),也不去評(píng)價(jià)它正面或負(fù)面的影響。但從對(duì)于分布式數(shù)據(jù)庫(kù)的影響來(lái)說(shuō),它至少帶來(lái)兩種觀念的轉(zhuǎn)變。
應(yīng)用成為核心:去 O 后,開(kāi)源數(shù)據(jù)庫(kù)需要配合數(shù)據(jù)庫(kù)中間件(proxy)去使用,但這種組合無(wú)法實(shí)現(xiàn)傳統(tǒng)商業(yè)庫(kù)提供的一些關(guān)鍵功能,如豐富的 SQL 支持和 ACID 級(jí)別的事務(wù)。因此應(yīng)用軟件需要進(jìn)行精心設(shè)計(jì),從而保障與新數(shù)據(jù)庫(kù)平臺(tái)的配合。應(yīng)用架構(gòu)設(shè)計(jì)變得非常關(guān)鍵,整個(gè)技術(shù)架構(gòu)開(kāi)始脫離那種具有調(diào)侃意味的“面向數(shù)據(jù)庫(kù)” 編程,轉(zhuǎn)而變?yōu)橐詰?yīng)用系統(tǒng)為核心。
弱一致性理念普及:雖然強(qiáng)一致性仍然需求旺盛,但人們慢慢接受了特定場(chǎng)景下可以嘗試弱一致性來(lái)解決系統(tǒng)的吞吐量問(wèn)題。而這帶來(lái)了另外一個(gè)益處,一線研發(fā)與設(shè)計(jì)人員開(kāi)始認(rèn)真考慮業(yè)務(wù)需要什么樣的一致性,而不是簡(jiǎn)單依靠數(shù)據(jù)庫(kù)提供的特性。
以上兩個(gè)觀念都是在破除了對(duì)于 Oracle 的迷信后產(chǎn)生的,它們本身是正面的,但是如果沒(méi)有這場(chǎng)運(yùn)動(dòng),其想要在普通用戶之中普及確實(shí)有很大困難。而這兩種觀念也為日后分布式數(shù)據(jù)庫(kù),特別是國(guó)產(chǎn)分布式數(shù)據(jù)的發(fā)展帶來(lái)了積極的影響。
而與此同期,全球范圍內(nèi)又上演著 NoSQL 化浪潮,它與國(guó)內(nèi)去 IOE 運(yùn)動(dòng)一起推動(dòng)著數(shù)據(jù)庫(kù)朝著橫向分布的方向一路狂奔。關(guān)于 NoSQL 的內(nèi)容,將會(huì)在下一講詳細(xì)介紹。
與上一部分中提到的大數(shù)據(jù)技術(shù)類(lèi)似,隨著互聯(lián)網(wǎng)的發(fā)展,去 IOE 運(yùn)動(dòng)將 OLTP 型數(shù)據(jù)庫(kù)從原來(lái)的關(guān)系型數(shù)據(jù)庫(kù)之中分離出來(lái),但這里需要注意的是,這種分離并不是從基礎(chǔ)上構(gòu)建一個(gè)完整的數(shù)據(jù)庫(kù),而是融合了舊有的開(kāi)源型數(shù)據(jù)庫(kù),同時(shí)結(jié)合先進(jìn)的分布式技術(shù),共同構(gòu)造了一種融合性的“準(zhǔn)”數(shù)據(jù)庫(kù)。它是面向具體的應(yīng)用場(chǎng)景的,所以閹割掉了傳統(tǒng)的 OLTP 數(shù)據(jù)庫(kù)的一些特性,甚至是一些關(guān)鍵的特性,如子查詢與 ACID 事務(wù)等。
而 NoSQL 數(shù)據(jù)庫(kù)的重點(diǎn)是支持非結(jié)構(gòu)化數(shù)據(jù),如互聯(lián)網(wǎng)索引,GIS 地理數(shù)據(jù)和時(shí)空數(shù)據(jù)等。這種數(shù)據(jù)在傳統(tǒng)上會(huì)使用關(guān)系型數(shù)據(jù)庫(kù)存儲(chǔ),但需要將此種數(shù)據(jù)強(qiáng)行轉(zhuǎn)換為關(guān)系型結(jié)構(gòu),不僅設(shè)計(jì)煩瑣,而且使用效率也比較低下。故NoSQL 數(shù)據(jù)庫(kù)被認(rèn)為是對(duì)整個(gè)數(shù)據(jù)庫(kù)領(lǐng)域的補(bǔ)充,從而人們意識(shí)到數(shù)據(jù)庫(kù)不應(yīng)該僅僅支持一種數(shù)據(jù)模式。
隨著分布式數(shù)據(jù)庫(kù)的發(fā)展,一種從基礎(chǔ)上全新設(shè)計(jì)的分布式 OLTP 數(shù)據(jù)庫(kù)變得越來(lái)越重要,而云計(jì)算更是為這種數(shù)據(jù)庫(kù)注入新的靈魂,兩者的結(jié)合將會(huì)給分布式數(shù)據(jù)庫(kù)帶來(lái)美妙的化學(xué)反應(yīng)。
云原生是未來(lái)
從上文可以看到人們真正具有廣泛認(rèn)知的分布式數(shù)據(jù)庫(kù),即 OLTP 型交易式分布式數(shù)據(jù)庫(kù),依然是分布式數(shù)據(jù)庫(kù)領(lǐng)域一個(gè)缺失的片段,且是一個(gè)重要的片段。一個(gè)真正的 OLTP 數(shù)據(jù)庫(kù)應(yīng)該具備什么特點(diǎn)呢?
實(shí)際上人們需要的是它既具有一個(gè)單機(jī)的關(guān)系型數(shù)據(jù)庫(kù)的特性,又有分布式的分片與同步特性。 DistributedSQL 和 NewSQL 正是為了這個(gè)目的而生的 。它們至少具有如下兩點(diǎn)引人注目的特性:
- SQL 的完整支持
- 可靠的分布式事務(wù)。
典型的代表有 Spanner、NuoDB、TiDB 和 Oceanbase 等。并且本課程會(huì)重點(diǎn)圍繞 DistributedSQL 的關(guān)鍵特性展開(kāi)研究,這些特性是現(xiàn)代分布式數(shù)據(jù)庫(kù)的基石。這里我就不占用過(guò)多篇幅介紹了,在 02 | SQL vs NoSQL:一次搞清楚五花八門(mén)的各種“SQL”中我們?cè)僖黄鹪敿?xì)學(xué)習(xí)。
與此同時(shí),隨著云計(jì)算的縱向深入發(fā)展,分布式數(shù)據(jù)庫(kù)又迎來(lái)新的革命浪潮——云原生數(shù)據(jù)庫(kù)。
首先,由于云服務(wù)天生的“超賣(mài)”特性,造成其采購(gòu)成本較低,從而使終端用戶嘗試分布式數(shù)據(jù)庫(kù)的門(mén)檻大大降低。
其次,來(lái)自云服務(wù)廠商的支撐人員可以與用戶可以進(jìn)行深度的合作,形成了高效的反饋機(jī)制。這種反饋機(jī)制促使云原生的分布式數(shù)據(jù)庫(kù)有機(jī)會(huì)進(jìn)行快速的迭代,從而可以積極響應(yīng)客戶的需求。
這就是云原生帶給分布式數(shù)據(jù)庫(kù)的變化,它是通過(guò)生態(tài)系統(tǒng)的優(yōu)化完成了對(duì)傳統(tǒng)商業(yè)數(shù)據(jù)庫(kù)的超越。以下來(lái)自 DB-Engines 的分析數(shù)據(jù)說(shuō)明了未來(lái)的數(shù)據(jù)庫(kù)市場(chǎng)屬于分布式數(shù)據(jù)庫(kù),屬于云原生數(shù)據(jù)庫(kù)。

隨著分布式數(shù)據(jù)庫(kù)的發(fā)展,我們又迎來(lái)了新的一次融合:那就是 OLTP 與 OLAP 將再一次合并為 HTAP(融合交易分析處理)數(shù)據(jù)庫(kù)。
該趨勢(shì)的產(chǎn)生主要來(lái)源于云原生 OLTP 型分布式數(shù)據(jù)庫(kù)的日趨成熟。同時(shí)由于整個(gè)行業(yè)的發(fā)展,客戶與廠商對(duì)于實(shí)時(shí)分析型數(shù)據(jù)庫(kù)的需求越來(lái)越旺盛,但傳統(tǒng)上大數(shù)據(jù)技術(shù)包括開(kāi)源與 MPP 類(lèi)數(shù)據(jù)庫(kù),強(qiáng)調(diào)的是離線分析。
如果要進(jìn)行秒級(jí)的數(shù)據(jù)處理,那么必須將交易數(shù)據(jù)與分析數(shù)據(jù)盡可能地貼近,并減少非實(shí)時(shí) ELT 的引入,這就促使了 OLTP 與 OLAP 融合為 HTAP。下圖就是阿里云 PolarDB 的 HTAP 架構(gòu)。

總結(jié)
用《三國(guó)演義》的第一句話來(lái)說(shuō):“天下大勢(shì),分久必合,合久必分?!倍覀冇^察到的分布式數(shù)據(jù)庫(kù),乃至數(shù)據(jù)庫(kù)本身的發(fā)展正暗合了這句話。
分布式數(shù)據(jù)庫(kù)發(fā)展就是一個(gè)由合到分,再到合的過(guò)程:
早期的關(guān)系型商業(yè)數(shù)據(jù)庫(kù)的分布式能力可以滿足大部分用戶的場(chǎng)景,因此產(chǎn)生了如 Oracle 等幾種巨無(wú)霸數(shù)據(jù)庫(kù)產(chǎn)品;
OLAP 領(lǐng)域首先尋求突破,演化出了大數(shù)據(jù)技術(shù)與 MPP 類(lèi)型數(shù)據(jù)庫(kù),提供功能更強(qiáng)的數(shù)據(jù)分析能力;
去 IOE 引入數(shù)據(jù)庫(kù)中間件,并結(jié)合應(yīng)用平臺(tái)與開(kāi)源單機(jī)數(shù)據(jù)庫(kù)形成新一代解決方案,讓商業(yè)關(guān)系型數(shù)據(jù)庫(kù)走下神壇,NoSQL 數(shù)據(jù)庫(kù)更進(jìn)一步打破了關(guān)系型數(shù)據(jù)庫(kù)唯我獨(dú)尊的江湖地位;
新一代分布式 OLTP 數(shù)據(jù)庫(kù)正式完成了分布式領(lǐng)域?qū)?shù)據(jù)庫(kù)核心特性的完整支持,它代表了分布式數(shù)據(jù)庫(kù)從此走向了成熟,也表明了 OLAP 與 OLTP 分布式場(chǎng)景下,分別在各自領(lǐng)域內(nèi)取得了勝利;
HTAP 和多模式數(shù)據(jù)處理的引入,再一次將 OLAP 與 OLTP 融合,從而將分布式數(shù)據(jù)庫(kù)推向如傳統(tǒng)商業(yè)關(guān)系型數(shù)據(jù)庫(kù)數(shù)十年前那般的盛況,而其產(chǎn)生的影響要比后者更為深遠(yuǎn)。
我們回顧歷史,目的是更好地掌握未來(lái)。而分布式數(shù)據(jù)庫(kù)的歷史同時(shí)體現(xiàn)了實(shí)用主義的特色,其演化是需求與技術(shù)博弈的結(jié)果,而不是精心設(shè)計(jì)出來(lái)的。?































