國(guó)產(chǎn)數(shù)據(jù)庫(kù)百態(tài)-分布式數(shù)據(jù)庫(kù)
分布式關(guān)系型數(shù)據(jù)庫(kù)在國(guó)內(nèi)發(fā)展得很快,在墨天輪上的186個(gè)關(guān)系型數(shù)據(jù)庫(kù)中,分布式數(shù)據(jù)庫(kù)占了將近一半,有八十多個(gè)。
圖片
DB-ENGINE排行榜中,國(guó)產(chǎn)數(shù)據(jù)庫(kù)收錄不多,排名也比較靠后。這和DB-ENGINE對(duì)數(shù)據(jù)庫(kù)流行度的評(píng)估標(biāo)準(zhǔn)有關(guān)。DB-Engines 的數(shù)據(jù)庫(kù)流行度排名是完全自動(dòng)計(jì)算的,這一排名基于多個(gè)因素,包括搜索引擎結(jié)果數(shù)量、Google趨勢(shì)、Stack Overflow上的活躍度、社交媒體提及頻率以及與特定數(shù)據(jù)庫(kù)相關(guān)的工作職位數(shù)量。這些因素綜合考慮,形成了每個(gè)數(shù)據(jù)庫(kù)管理系統(tǒng)(DBMS)的綜合得分,從而決定其排名。在這幾個(gè)方面,國(guó)產(chǎn)數(shù)據(jù)庫(kù)的熱度都不高,所以國(guó)產(chǎn)數(shù)據(jù)庫(kù)在DB-ENGINE上的分?jǐn)?shù)與排名不高也很正常。
圖片
雖然如此,我們也可以看出TiDB、OceanBase、GBase、TDSQL for MySQL等在DB-ENGINE上依然進(jìn)入了關(guān)系型數(shù)據(jù)庫(kù)的前100(DB-ENGINE的排行榜上總計(jì)有160多個(gè)關(guān)系型數(shù)據(jù)庫(kù))。
分布式數(shù)據(jù)庫(kù)有三種流派,流派一:分布式中間件+單機(jī)數(shù)據(jù)庫(kù)組成多數(shù)據(jù)庫(kù)實(shí)例的分布式集群,多個(gè)數(shù)據(jù)庫(kù)實(shí)例按照可用組分成多個(gè)復(fù)制組,數(shù)據(jù)通過(guò)sharding key分散于各個(gè)數(shù)據(jù)庫(kù)實(shí)例中。GoldenDB、HotDB、TDSQL for MySQL、StarDB等都屬于這個(gè)流派;流派二:非對(duì)稱計(jì)算節(jié)點(diǎn)+分布式存儲(chǔ)本身在底層的分布式存儲(chǔ)上實(shí)現(xiàn)了數(shù)據(jù)的多副本,而只讀備庫(kù)可以隨時(shí)快速升級(jí)為主庫(kù),替代故障的主庫(kù),從而確保數(shù)據(jù)的可靠性,這種形態(tài)與集中式數(shù)據(jù)庫(kù)十分類似,國(guó)產(chǎn)數(shù)據(jù)庫(kù)中,阿里PolarDB-o,AWS AURORA 、谷歌AlloyDB等屬于此流派。此流派的數(shù)據(jù)庫(kù)產(chǎn)品目前還在繼續(xù)演進(jìn)中,一種類似Oracle RAC的共享存儲(chǔ)并發(fā)讀寫的模式也加入進(jìn)來(lái),比如崖山Y(jié)ashanDB;流派三:原生分布式數(shù)據(jù)庫(kù)則天然設(shè)計(jì)為數(shù)據(jù)多副本,并通過(guò)分布式選舉協(xié)議自動(dòng)選主,實(shí)現(xiàn)透明故障切換,國(guó)產(chǎn)數(shù)據(jù)庫(kù)中OceanBase、TiDB、GaussDB、HubbleDb等采用此流派。
實(shí)際上隨著這些年分布式數(shù)據(jù)庫(kù)技術(shù)的發(fā)展,流派一和流派三在技術(shù)上逐漸融合,二者的差異也越來(lái)越小。首先流派一的產(chǎn)品在主從多副本上也開始引入Raft或者Paxos,在算子下推上也不僅僅是直接下推SUBQUERY,可以實(shí)現(xiàn)更加細(xì)粒度的自定義算子下推,從而解決流派一對(duì)于大型復(fù)雜查詢處理性能上的不足。元數(shù)據(jù)管理也在往更加高效方面改進(jìn),從而能夠在計(jì)算節(jié)點(diǎn)數(shù)量大幅增加的情況下,確保數(shù)據(jù)庫(kù)性能。
流派三的數(shù)據(jù)庫(kù)產(chǎn)品在技術(shù)上還分為兩派,Oceanbase采用完全對(duì)等的計(jì)算模式,每個(gè)Observer管理自己的分片數(shù)據(jù),整個(gè)集群是完全對(duì)等的,計(jì)算與存儲(chǔ)是一體的。而TiDB和GaussDB則采用存算分離的模式,計(jì)算與存儲(chǔ)引擎是分離在不同的服務(wù)中的。對(duì)于這兩種方式的優(yōu)劣并不在本文討論范圍之內(nèi),兩年前,我的多篇文章對(duì)此有了詳細(xì)的介紹,大家有興趣可以去查找。
本文篇幅有限,無(wú)法對(duì)目前國(guó)內(nèi)的主流分布式書庫(kù)逐個(gè)描述。只能選擇某幾個(gè)典型產(chǎn)品做一些簡(jiǎn)單的介紹。無(wú)論如何,我的這個(gè)介紹必須以PingCap的TiDB談起。一方面是TiDB在DB-ENGINE上長(zhǎng)期居國(guó)產(chǎn)數(shù)據(jù)庫(kù)熱度的榜首,是目前國(guó)產(chǎn)數(shù)據(jù)庫(kù)里在歐美熱度最高的數(shù)據(jù)庫(kù)產(chǎn)品,另外一方面TiDB也是國(guó)產(chǎn)老四家之后數(shù)據(jù)庫(kù)新勢(shì)力中最早萌芽的國(guó)產(chǎn)數(shù)據(jù)庫(kù)產(chǎn)品。
圖片
TiDB是一種典型的存算分離的分布式數(shù)據(jù)庫(kù),其元數(shù)據(jù)與集群管理由PD集群負(fù)責(zé)。SQL層則由TiDB Server實(shí)現(xiàn),對(duì)外暴露 MySQL 協(xié)議,負(fù)責(zé)客戶端連接,實(shí)現(xiàn)SQL 解析和優(yōu)化,最終生成分布式執(zhí)行計(jì)劃。TiDB 層本身是無(wú)狀態(tài)的,可以啟動(dòng)多個(gè) TiDB 實(shí)例,提高并發(fā)能力。TiDB的存儲(chǔ)節(jié)點(diǎn)為TiKV或者TiFlash,TiKV是用rust開發(fā)的一種使用LSM-TREE存儲(chǔ)架構(gòu)的KV存儲(chǔ)引擎。而TiFlash則是被TiDB用于OLAP分析的列存引擎。有朋友一直質(zhì)疑TiDB套殼了MySQL,實(shí)際上這種說(shuō)法是不公允的,TiDB只是兼容了MySQL語(yǔ)法,其TiDB Server是使用go語(yǔ)言開發(fā)的,在客戶端協(xié)議和SQL語(yǔ)法上與MySQL做了高度兼容而已,到目前為止,TiDB也依然沒有做到與MySQL的100%兼容。這些年不少國(guó)內(nèi)的企業(yè)以TiDB開源社區(qū)版為基礎(chǔ)開發(fā)了自己的商用數(shù)據(jù)庫(kù),比如平安科技、建信金科等。不過(guò)目前似乎PingCap在國(guó)內(nèi)信創(chuàng)市場(chǎng)上一直沒有太多行動(dòng),而是主要注重于公有云運(yùn)營(yíng),目前在亞馬遜、阿里云等云平臺(tái)上都可以購(gòu)買TiDB的公有云服務(wù)。因?yàn)闆]有把更多的注意力放在國(guó)產(chǎn)數(shù)據(jù)庫(kù)替代方面,因此TiDB在企業(yè)用戶銷售,數(shù)據(jù)庫(kù)產(chǎn)品針對(duì)Oracle等其他數(shù)據(jù)庫(kù)的語(yǔ)法兼容性上所做不多。
GoldenDB是今天我要討論的第二種分布式數(shù)據(jù)庫(kù)產(chǎn)品,對(duì)于有些人來(lái)說(shuō)這個(gè)數(shù)據(jù)庫(kù)有點(diǎn)神秘。
圖片
GoldenDB是基于MySQL數(shù)據(jù)庫(kù)開發(fā)的一款國(guó)產(chǎn)分布式數(shù)據(jù)庫(kù)。包含計(jì)算節(jié)點(diǎn)(SQL代理層)、全局事務(wù)管理節(jié)點(diǎn)(GTM)和數(shù)據(jù)節(jié)點(diǎn)(分布式MySQL數(shù)據(jù)庫(kù)組)構(gòu)成,這種架構(gòu)在基于MySQL的國(guó)產(chǎn)分布式數(shù)據(jù)庫(kù)中被廣泛使用。大家可能會(huì)覺得有些意外的是,目前GoldenDB在市場(chǎng)上做得還是很成功的。其主要用戶集中在金融行業(yè),從2016年開始,GoldenDB就在中信實(shí)業(yè)銀行實(shí)現(xiàn)了銀行核心系統(tǒng)的國(guó)產(chǎn)化替代。目前在一些銀行中都有GoldenDB的應(yīng)用,很多都是核心、次核心系統(tǒng)。其中不乏工商銀行這樣的大行。在中國(guó)移動(dòng),GoldenDB也有BOSS系統(tǒng)替代的成功案例,浙江移動(dòng)的BOSS系統(tǒng)就是用GoldenDB實(shí)現(xiàn)了對(duì)Oracle的替代的。GoldenDB的成功來(lái)自于中興通訊良好的售后支持服務(wù),對(duì)于能夠投入大量資金改造核心系統(tǒng)的企業(yè)級(jí)用戶來(lái)說(shuō),數(shù)據(jù)庫(kù)產(chǎn)品技術(shù)上的某些問(wèn)題都是可以克服的,通過(guò)應(yīng)用系統(tǒng)的適配與優(yōu)化,基本上可以搞定數(shù)據(jù)庫(kù)本身存在的一些缺陷。只要數(shù)據(jù)庫(kù)廠商的配合態(tài)度比較好,那么國(guó)產(chǎn)化替代工作是完全可以順利進(jìn)行下去的。GoldenDB目前的主要客戶也是集中在這種大型企業(yè)級(jí)客戶上。
接下來(lái)要說(shuō)說(shuō)OceanBase了,在DB-ENGINE和摩天輪上,OceanBase的排名都是靠前的,在這些年里OceanBase產(chǎn)品的迭代發(fā)展速度也是令人驚訝的。最近一段時(shí)間里,我寫過(guò)的關(guān)于Oceanbase的文章比較多,主要原因是在去年年底D-SMART推出了Oceanbase專版,在開發(fā)專版的過(guò)程中,我們團(tuán)隊(duì)對(duì)Oceanbase做了十分詳細(xì)的了解。Oceanbase分社區(qū)版和企業(yè)版兩個(gè)版本,企業(yè)版中有兼容Oracle數(shù)據(jù)庫(kù)的Oracle租戶,在我們參與的一些客戶的數(shù)據(jù)庫(kù)國(guó)產(chǎn)化替代的測(cè)試項(xiàng)目中,OB與Oracle的兼容性僅次于達(dá)夢(mèng),在第二梯隊(duì)中處于前列。這對(duì)于OB在信創(chuàng)工作中的競(jìng)爭(zhēng)力是一個(gè)十分有力的支撐。Oceanbase是采用存算一體,完全對(duì)等模式的,每個(gè)OBServer都可以獨(dú)立完成數(shù)據(jù)庫(kù)的所有操作,因此也支持僅有一個(gè)Observer的集中式部署模式。
Oceanbase目前的主要市場(chǎng)是在金融、政企和公有云三個(gè)方面。銀行、保險(xiǎn)、證券公司都已經(jīng)有大量的Oceanbase應(yīng)用場(chǎng)景。在中國(guó)移動(dòng)也已經(jīng)入圍了核心系統(tǒng)替代,山東移動(dòng)、江蘇移動(dòng)、廣東移動(dòng)等大型移動(dòng)運(yùn)營(yíng)商使用OB在BOSS系統(tǒng)中替代了Oracle。
GaussDB與上面幾家相比是一個(gè)后來(lái)者,不過(guò)這個(gè)后來(lái)者勢(shì)頭很猛。與OB,GoldenDB相同的是,GaussDB同樣是首先在金融行業(yè)發(fā)力。我想這些企業(yè)這些年在金融行業(yè)勢(shì)頭很猛的主要原因是這個(gè)行業(yè)在數(shù)據(jù)庫(kù)國(guó)產(chǎn)化方面走得比較堅(jiān)決,目前進(jìn)度也比較快。GaussDB有集中式部署模式與分布式部署模式兩種,兩種模式使用的是同一套核心介質(zhì)。
圖片
當(dāng)GaussDB使用分布式部署模式時(shí),包含了計(jì)算節(jié)點(diǎn)CN,存儲(chǔ)節(jié)點(diǎn)DN,全局事務(wù)管理節(jié)點(diǎn)GTM,集群管理組件CM,ETCD等。數(shù)據(jù)也通過(guò)sharding key分布到不同的存儲(chǔ)節(jié)點(diǎn)上。每個(gè)DN實(shí)際上是一組,包含一個(gè)MASTER和數(shù)個(gè)SLAVER。平時(shí)只有Master節(jié)點(diǎn)對(duì)外提供服務(wù)。
自從GaussDB去年高調(diào)召開發(fā)布會(huì)以來(lái),在黨政、金融、能源等行業(yè)進(jìn)展迅猛。在國(guó)網(wǎng)陜西電力的用電信息采集系統(tǒng)上也實(shí)現(xiàn)了國(guó)產(chǎn)數(shù)據(jù)庫(kù)對(duì)Oracle的首次替代。在這樣大型OLTP系統(tǒng)上實(shí)現(xiàn)對(duì)Oracle的替代,其意義十分重大。
PolarDB實(shí)際上是一個(gè)數(shù)據(jù)庫(kù)家族,而不是一個(gè)簡(jiǎn)單的數(shù)據(jù)庫(kù)產(chǎn)品。這些年發(fā)展過(guò)程中也有過(guò)數(shù)次變遷,到目前為止已經(jīng)比較穩(wěn)定了。
圖片
從阿里云的介紹上看,PolarDB目前分為MySQL版,Postgresql版和分布式版三種。其中PolarDB MySQL版和Postgresql版都是類似亞馬遜Aurora的架構(gòu),共享存儲(chǔ),計(jì)算存儲(chǔ)分離的架構(gòu)。雖然說(shuō)PolarDB MySQL版在語(yǔ)法上兼容MySQL,不過(guò)其代碼已經(jīng)做了完全的重構(gòu),不能說(shuō)是MySQL套殼。其Postgresql版基于PG開源代碼開發(fā),做了大量的改造,其語(yǔ)法上依然兼容Postgresql,同時(shí)也對(duì)Oracle有比較好的支持。PolarDB的分布式版本是兼容MySQL生態(tài)的,可以實(shí)現(xiàn)對(duì)阿里云DRDS的替代。
PolarDB的分布式版本和Postgresql版本除了公有云和專有云版本外,還提供DBSTACK部署模式,也就是說(shuō)支持客戶在云下獨(dú)立部署。
因?yàn)闀r(shí)間原因,介紹完TDSQL,本文就暫時(shí)告一段落吧。與PolarDB類似,TDSQL也不是一個(gè)數(shù)據(jù)庫(kù)產(chǎn)品,而是一個(gè)數(shù)據(jù)庫(kù)家族的統(tǒng)稱。
圖片
從騰訊云的數(shù)據(jù)庫(kù)產(chǎn)品家族可以看出,TDSQL-C和TDSQL分布式是TDSQL的兩個(gè)主要分支,其中都有MySQL與Postgresql版本。其中集中式版本也是與AWS AURORA類似的,共享存儲(chǔ),存算分離的模式,這一點(diǎn)與PolarDB十分類似。TDSQL分布式 MySQL版采用的是分布式數(shù)據(jù)庫(kù)的流派一的技術(shù),與GoldenDB、HotDB等采用類似的架構(gòu)。而TDSQL分布式 Postgresql版本則是基于PGXC/PGXL開源項(xiàng)目經(jīng)過(guò)多年的迭代升級(jí)而形成。目前還衍生出了大量的與Oracle兼容的特性。
TDSQL目前在金融、證券、稅務(wù)等行業(yè)有大量的應(yīng)用,在某些用戶那邊用得還相當(dāng)不錯(cuò)。其成功的主要原因是TDSQL不僅僅是一個(gè)數(shù)據(jù)庫(kù)產(chǎn)品,而是一個(gè)十分不錯(cuò)的數(shù)據(jù)庫(kù)云平臺(tái)。其良好的管理能力讓用戶可以很方便地管理大量的數(shù)據(jù)庫(kù)實(shí)例。