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





























