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