國(guó)產(chǎn)老兵“虛谷數(shù)據(jù)庫(kù)”初探
原創(chuàng)虛谷數(shù)據(jù)庫(kù),是國(guó)內(nèi)一款完全本土化、自研的數(shù)據(jù)庫(kù)產(chǎn)品。其背后的廠(chǎng)商-虛谷偉業(yè),作為一家老牌數(shù)據(jù)庫(kù)廠(chǎng)商,非常低調(diào),之前對(duì)其產(chǎn)品了解不多。近期通過(guò)中國(guó)信息安全評(píng)測(cè)中心發(fā)布的《安全可靠測(cè)評(píng)結(jié)果》名錄中關(guān)注到這一產(chǎn)品,并做了一些調(diào)研。本文是通過(guò)多方材料收集整理而得,并得到了虛谷偉業(yè)朋友的大力支持,這里表示感謝。
1. 公司及產(chǎn)品簡(jiǎn)介
(1)公司說(shuō)明
虛谷偉業(yè)從官方信息顯示,組建于2018年。其前身是成都?xì)W冠公司,團(tuán)隊(duì)組建于 2002 年,是國(guó)內(nèi)比較早做數(shù)據(jù)庫(kù)的公司之一。公司整體比較低調(diào),總部位于成都,在全國(guó)六個(gè)大區(qū)目前設(shè)置了多個(gè)分子公司辦事處。據(jù)虛谷的同學(xué)分享,2022年之前公司整體都是處于研發(fā)驅(qū)動(dòng)的方式,在2022年開(kāi)始進(jìn)入市場(chǎng)化運(yùn)作。虛谷的產(chǎn)品從 V1.0 一直到 V12.0,具有多個(gè)正式商用版本,同時(shí)也可以在網(wǎng)上查到,虛谷從v8.0開(kāi)始就是分布式架構(gòu)了。目前虛谷數(shù)據(jù)庫(kù)的應(yīng)用領(lǐng)域主要是在黨政軍及一些關(guān)基行業(yè),例如民航、公安、數(shù)據(jù)中心等。從上述材料中可以看出來(lái),虛谷是從傳統(tǒng)黨政行業(yè)部委出發(fā),然后轉(zhuǎn)型到分布式領(lǐng)域,現(xiàn)在在涉足一些關(guān)基生產(chǎn)業(yè)務(wù)系統(tǒng)和數(shù)據(jù)中心業(yè)務(wù)。
(2)產(chǎn)品介紹
從產(chǎn)品家族來(lái)看(如下圖),虛谷產(chǎn)品設(shè)計(jì)的邏輯是“一核多態(tài)全場(chǎng)景”的方式。從他們的產(chǎn)品宣傳材料中得知,他們產(chǎn)品的定位是“數(shù)據(jù)全生命周期提供商”,即以原創(chuàng)統(tǒng)一的高性能內(nèi)核為基礎(chǔ),通過(guò)產(chǎn)品的擴(kuò)展性讓數(shù)據(jù)規(guī)?!皬男〉酱蟆钡目蛻?hù)都能使用、通過(guò)產(chǎn)品的生態(tài)工具鏈和兼容性讓用戶(hù)“從國(guó)外到國(guó)內(nèi)”能做平滑移植、通過(guò)分布式的高性能和多實(shí)力管理能力讓客戶(hù)“從簡(jiǎn)單到復(fù)雜”的應(yīng)用都能使用。從圖中也可以看到他們配套提供了統(tǒng)一的管控和標(biāo)準(zhǔn)的交互方式。
(3)原創(chuàng)優(yōu)勢(shì)
虛谷產(chǎn)品有一個(gè)顯著優(yōu)勢(shì),是在于其原創(chuàng)性,其內(nèi)核采用的是C語(yǔ)言編碼的,據(jù)虛谷同事透露,他們的1.0版本只有不到10萬(wàn)行代碼,是從0行代碼開(kāi)始編寫(xiě)的。原創(chuàng)給虛谷帶來(lái)了比較突出的優(yōu)勢(shì),就是在現(xiàn)在業(yè)務(wù)系統(tǒng)變化較快的情況下,可以從架構(gòu)核心到外圍功能都能快速迭代,順應(yīng)國(guó)內(nèi)的需求快速變化,不受控于其他主路線(xiàn)。但是同樣的,原創(chuàng)性也是雙刃劍,他們的生態(tài)和兼容性上構(gòu)建肯定是相較直接沿用開(kāi)源路線(xiàn)的產(chǎn)品來(lái)說(shuō)更困難的。較早前,虛谷已獲得中國(guó)信息安全評(píng)測(cè)中心發(fā)布第一批安全可靠性評(píng)測(cè)結(jié)果名錄(位列十一家廠(chǎng)商之一)。同時(shí),虛谷也獲得了包括國(guó)測(cè)中心的“原創(chuàng)性證書(shū)”以及國(guó)保測(cè)的“安全數(shù)據(jù)庫(kù)證書(shū)”在內(nèi)的一些安全性背書(shū)。
2. 數(shù)據(jù)庫(kù)產(chǎn)品架構(gòu)
虛谷數(shù)據(jù)庫(kù)采用的是原生分布式架構(gòu),即是一個(gè)和業(yè)務(wù)邏輯解耦的存儲(chǔ)引擎層以及一個(gè)無(wú)狀態(tài)的SQL計(jì)算引擎層組合的。在實(shí)現(xiàn)傳統(tǒng)關(guān)系型數(shù)據(jù)庫(kù)功能與對(duì)象管理同時(shí),提供完整的事務(wù) ACID 特性能力。
(1)技術(shù)架構(gòu)
從虛谷產(chǎn)品的技術(shù)架構(gòu)來(lái)看,是采用 ShareNothing(完全無(wú)共享)架構(gòu)進(jìn)行集群設(shè)計(jì),物理資源無(wú)共享,數(shù)據(jù)切片存儲(chǔ)。核心角色包括主控角色、存儲(chǔ)角色、工作角色和變更收集角色,分別承擔(dān)集群的管理、存儲(chǔ)、計(jì)算與變更捕捉的職能。一臺(tái)物理服務(wù)器(虛擬機(jī))可部署一個(gè)或多個(gè)數(shù)據(jù)庫(kù)角色。比較有特色的一點(diǎn)是,虛谷采用線(xiàn)程模型,從操作系統(tǒng)上來(lái)看,每個(gè)服務(wù)器上看到的都只有一個(gè)進(jìn)程,上面說(shuō)的主控、存儲(chǔ)、工作等角色是在該進(jìn)程內(nèi)部進(jìn)行管理的。依托于這個(gè)體系,虛谷可以做到兩種部署形態(tài),“存算分離”和“存算融合”。
- 主控節(jié)點(diǎn)(管理)
用于集群管理、心跳檢測(cè)、全局鎖仲裁(檢測(cè)死鎖并解鎖)等,不參與用戶(hù)請(qǐng)求響應(yīng)。 - 存儲(chǔ)節(jié)點(diǎn)(存儲(chǔ))
用于存儲(chǔ)數(shù)據(jù)庫(kù)數(shù)據(jù),一般采用1主2備的副本策略,將數(shù)據(jù)均勻分布,利用多臺(tái)服務(wù)器的IO能力,加速數(shù)據(jù)處理。 - 工作節(jié)點(diǎn)(計(jì)算)
用于接收響應(yīng)用戶(hù)請(qǐng)求,是SQL處理核心模塊,將SQL請(qǐng)求解析成數(shù)據(jù)庫(kù)內(nèi)部任務(wù)并通知到各個(gè)節(jié)點(diǎn)。同時(shí)工作角色也承擔(dān)計(jì)算任務(wù)。
(2)核心模塊
從模塊上看,虛谷數(shù)據(jù)庫(kù)的不同角色包含下列模塊:
- 數(shù)據(jù)庫(kù)管理工具集合
集合包含數(shù)據(jù)庫(kù)管理工具,可用于用戶(hù)可視化對(duì)象管理和可視化數(shù)據(jù)操作;控制臺(tái)工具,方便 DBA 簡(jiǎn)潔高效地操作數(shù)據(jù)庫(kù);數(shù)據(jù)庫(kù)遷移工具,用于快速各種數(shù)據(jù)源中的數(shù)據(jù)庫(kù)對(duì)象和數(shù)據(jù)遷移到虛谷數(shù)據(jù)庫(kù);數(shù)據(jù)庫(kù)集群監(jiān)控軟件,用于監(jiān)控?cái)?shù)據(jù)庫(kù)服務(wù)端硬件資源使用情況及數(shù)據(jù)庫(kù)集群狀態(tài)。 - 內(nèi)存管理模塊
對(duì)于數(shù)據(jù)庫(kù)來(lái)說(shuō),內(nèi)存管理是核心模塊,分為全局內(nèi)存區(qū)、動(dòng)態(tài)內(nèi)存區(qū)、數(shù)據(jù)緩沖區(qū)、全局排序區(qū)、日志緩沖區(qū) 5 個(gè)子模塊;分別對(duì)應(yīng)了字典緩沖內(nèi)存、線(xiàn)程運(yùn)行內(nèi)存、數(shù)據(jù)文件內(nèi)存、查詢(xún)排序內(nèi)存和日志緩沖內(nèi)存。 - 文件管理模塊
管理數(shù)據(jù)運(yùn)行過(guò)程中涉及的各類(lèi)文件,有數(shù)據(jù)文件、控制文件和日志文件等。 - 線(xiàn)程管理模塊
虛谷數(shù)據(jù)庫(kù)采用線(xiàn)程模型,對(duì)各類(lèi)服務(wù)線(xiàn)程管理是核心模塊之一。 - 內(nèi)網(wǎng)絡(luò)通信管理模塊
管理集群節(jié)點(diǎn)間通信,實(shí)現(xiàn)節(jié)點(diǎn)間數(shù)據(jù)傳輸和遠(yuǎn)程調(diào)用。 - 數(shù)據(jù)庫(kù)邏輯對(duì)象管理模塊
對(duì)數(shù)據(jù)庫(kù)對(duì)象創(chuàng)建、修改、使用、消亡全生命周期的管理。 - 開(kāi)發(fā)接口
提供多種數(shù)據(jù)庫(kù)訪(fǎng)問(wèn)接口,如:JDBC、ODBC、C-API、Python、GO 等。
3. 核心技術(shù)能力
(1)全局強(qiáng)一致
虛谷數(shù)據(jù)庫(kù),通過(guò)事務(wù)一致性和數(shù)據(jù)一致性來(lái)保障整個(gè)數(shù)據(jù)庫(kù)強(qiáng)一致。一方面在事務(wù)層,其采用優(yōu)化的二階段提交協(xié)議來(lái)實(shí)現(xiàn)分布式事務(wù),即在節(jié)點(diǎn)間的事務(wù)能根據(jù)數(shù)據(jù)分布方式自動(dòng)進(jìn)行事務(wù)切分,同時(shí)設(shè)置節(jié)點(diǎn)宕機(jī)超時(shí)時(shí)間,不會(huì)讓整個(gè)集群無(wú)限阻塞等待;另一方面在數(shù)據(jù)層,則采用數(shù)據(jù)流同步復(fù)制方式結(jié)合“可靠 UDP”技術(shù),保證數(shù)據(jù)副本之間的強(qiáng)一致性。和虛谷的同事溝通了解,這個(gè)“可靠UDP”是他們針對(duì)分布式數(shù)據(jù)庫(kù)的網(wǎng)絡(luò)層做的優(yōu)化,本質(zhì)是對(duì)UDP協(xié)議的封裝,加入了如檢驗(yàn)、重發(fā)等內(nèi)容,以追求在高頻的數(shù)據(jù)交換過(guò)程中降低TCP協(xié)議握手帶來(lái)的時(shí)延開(kāi)銷(xiāo)。
(2)多重高可用
在可用性層面,虛谷數(shù)據(jù)庫(kù)擁有存儲(chǔ)、計(jì)算、管理和網(wǎng)絡(luò)等多層面多領(lǐng)域的高可用能力,進(jìn)而保證整個(gè)數(shù)據(jù)庫(kù)集群的高可用。
- 存儲(chǔ):數(shù)據(jù)多副本
虛谷數(shù)據(jù)庫(kù),采用數(shù)據(jù)切片實(shí)現(xiàn)分布式數(shù)據(jù)存儲(chǔ)。在多版本方面,可根據(jù)需要進(jìn)行數(shù)據(jù)存儲(chǔ)版本數(shù)配置,最多支持 3 個(gè)數(shù)據(jù)存儲(chǔ)版本,默認(rèn)是有 1 個(gè)主數(shù)據(jù)版本,2 個(gè)備數(shù)據(jù)版本。在真實(shí)存儲(chǔ)中,主版本輪轉(zhuǎn)分布,副本隨機(jī)分布,數(shù)據(jù)均勻分布到整個(gè)數(shù)據(jù)庫(kù)集群節(jié)點(diǎn)中,保證存儲(chǔ)的高可用。在數(shù)據(jù)拆分粒度上,虛谷數(shù)據(jù)庫(kù)不以邏輯表和業(yè)務(wù)維度進(jìn)行數(shù)據(jù)切割,是以切分物理 CHUNK 的方式進(jìn)行數(shù)據(jù)存儲(chǔ),通過(guò)內(nèi)部算法進(jìn)行分片處理并存儲(chǔ)到各個(gè)存儲(chǔ)節(jié)點(diǎn)。數(shù)據(jù)存儲(chǔ)以 8M 進(jìn)行自動(dòng)切片,主版本輪轉(zhuǎn)分配在各節(jié)點(diǎn),其對(duì)應(yīng)的副本隨機(jī)存儲(chǔ)在其他存儲(chǔ)節(jié)點(diǎn),將所有數(shù)據(jù)都均衡分布到每一個(gè)存儲(chǔ)節(jié)點(diǎn)中。當(dāng)某一存儲(chǔ)節(jié)點(diǎn)宕機(jī)時(shí),會(huì)立即通知管理節(jié)點(diǎn);或者會(huì)選擇宕機(jī)節(jié)點(diǎn)上存儲(chǔ)的主版本數(shù)據(jù)對(duì)應(yīng)的有效數(shù)據(jù)副本,將其切換為主版本;然后通知主版本向其余未宕機(jī)的存儲(chǔ)節(jié)點(diǎn)復(fù)制還原丟失的數(shù)據(jù)版本,提供數(shù)據(jù)訪(fǎng)問(wèn)服務(wù),避免單點(diǎn)故障導(dǎo)致數(shù)據(jù)庫(kù)業(yè)務(wù)中斷。
- 計(jì)算:對(duì)等無(wú)狀態(tài)
虛谷數(shù)據(jù)庫(kù)是典型的存算分離架構(gòu),其上層的計(jì)算節(jié)點(diǎn)是無(wú)狀態(tài)的,沒(méi)有持久化數(shù)據(jù)。其對(duì)外服務(wù)是完全對(duì)等同構(gòu)的,這意味著用戶(hù)連接到任意一個(gè)工作節(jié)點(diǎn)都可以連接到整個(gè)數(shù)據(jù)庫(kù)集群。當(dāng)工作節(jié)點(diǎn)負(fù)載過(guò)高時(shí),可通過(guò)增加工作節(jié)點(diǎn)分擔(dān)負(fù)載壓力,提高并發(fā)用戶(hù)數(shù)。無(wú)狀態(tài)的所帶來(lái)的好處是,當(dāng)用戶(hù)連接數(shù)據(jù)庫(kù)時(shí),如果節(jié)點(diǎn)異常也不用擔(dān)心,可隨時(shí)切換到其他節(jié)點(diǎn),即使所有工作節(jié)點(diǎn)都死亡,也不對(duì)數(shù)據(jù)存儲(chǔ)造成影響,后續(xù)可再次接入新工作節(jié)點(diǎn)即可恢復(fù)訪(fǎng)問(wèn),可實(shí)現(xiàn)自動(dòng)故障探測(cè)和容災(zāi)處理。
- 管理:組件高可用
虛谷數(shù)據(jù)庫(kù)的管理是中心化的,管理節(jié)點(diǎn)上雖然沒(méi)有業(yè)務(wù)數(shù)據(jù),但是也保存了如存儲(chǔ)映射等重要信息。為提升管理節(jié)點(diǎn)的可用性,架構(gòu)上采用了主備冗余設(shè)計(jì)。當(dāng)一個(gè)管理節(jié)點(diǎn)異常時(shí),另一個(gè)管理節(jié)點(diǎn)會(huì)自動(dòng)接管。此外,用于收集集群數(shù)據(jù)變更信息的收集節(jié)點(diǎn),也是采用主備雙機(jī)方案,在保證事務(wù)粒度的情況下也能保證其可靠性。
- 網(wǎng)絡(luò):多網(wǎng)絡(luò)并行
分布式數(shù)據(jù)庫(kù),存在多角色、多節(jié)點(diǎn),對(duì)底層網(wǎng)絡(luò)要求很高。虛谷數(shù)據(jù)庫(kù),提供多網(wǎng)絡(luò)并行功能,即在同一集群內(nèi)部可配置多路網(wǎng)絡(luò)進(jìn)行通信,該功能不依賴(lài)操作系統(tǒng)或交換機(jī)功能。這種方式不僅能夠提供更大的帶寬,還為可能發(fā)生的單網(wǎng)絡(luò)故障提供容錯(cuò)。
(3)高性能內(nèi)核
虛谷數(shù)據(jù)庫(kù),還通過(guò)一系列底層技術(shù)的優(yōu)化,來(lái)提升事務(wù)及查詢(xún)分析能力。基于虛谷的技術(shù)文檔來(lái)看,這其中包括但不限于下面這些:
- 無(wú)限制的行級(jí)鎖。虛谷數(shù)據(jù)庫(kù)的數(shù)據(jù)存儲(chǔ)最小粒度為行,其管理鎖的粒度可以從對(duì)象級(jí)到行級(jí),行級(jí)鎖的實(shí)現(xiàn)意味可提供極高的并發(fā)響應(yīng)能力。任何情況下不允許鎖升級(jí),大幅降低死鎖的可能性。
- 基于成本的優(yōu)化器。虛谷數(shù)據(jù)庫(kù)采用基于代價(jià)的路徑優(yōu)化模型,可讓 SQL 語(yǔ)句根據(jù)具體的數(shù)據(jù)分布情況、索引使用情況、分區(qū)情況、聯(lián)合查詢(xún)情況來(lái)做最優(yōu)的路徑選取調(diào)整,從而使 SQL 執(zhí)行時(shí)間最短。
- 多版本并發(fā)控制技術(shù)。虛谷數(shù)據(jù)庫(kù)完整實(shí)現(xiàn) MVCC多版本并發(fā)控制,維持一個(gè)數(shù)據(jù)的多個(gè)版本,使的讀寫(xiě)操作沒(méi)有沖突,避免復(fù)雜事務(wù)環(huán)境中的讀寫(xiě)操作沖突,提供更好的數(shù)據(jù)庫(kù)響應(yīng)性能?;?MVCC 技術(shù),虛谷數(shù)據(jù)庫(kù)實(shí)現(xiàn)讀已提交(Read Committed)隔離級(jí)別,支持高并發(fā)場(chǎng)景下的事務(wù)處理。
- 特有的可靠 UDP 技術(shù)。通常采用的 TCP 協(xié)議性能損耗大,類(lèi)似于谷歌的 QUIC ,虛谷數(shù)據(jù)庫(kù)不僅采用 UDP 封包格式通用接口,且在底層包裝改造了一套可靠的 UDP 協(xié)議,大量減少性能損耗。
- RDMA 協(xié)議支持。虛谷數(shù)據(jù)庫(kù) RDMA 功能可直接進(jìn)行內(nèi)存訪(fǎng)問(wèn),降低網(wǎng)絡(luò)時(shí)延和 CPU 占用率,數(shù)據(jù)從一個(gè)系統(tǒng)快速移動(dòng)到遠(yuǎn)程系統(tǒng)存儲(chǔ)器中,達(dá)到高帶寬、低時(shí)延和低資源占用。虛谷數(shù)據(jù)庫(kù)支持 Infiniband 的 RDMA 協(xié)議支持,并非使用萬(wàn)兆接口簡(jiǎn)單調(diào)用。
- 多核 NUMA 優(yōu)化。虛谷數(shù)據(jù)庫(kù)基于多核架構(gòu)進(jìn)行了深度優(yōu)化,對(duì)關(guān)鍵數(shù)據(jù)結(jié)構(gòu)分區(qū),降低數(shù)據(jù)訪(fǎng)問(wèn)頻次。利用 NUMA 優(yōu)化降低底層數(shù)據(jù)流轉(zhuǎn)沖突,關(guān)鍵業(yè)務(wù)線(xiàn)程綁核,避免核間線(xiàn)程漂移。
- 元數(shù)據(jù)分布式管理。虛谷數(shù)據(jù)庫(kù)在管理系統(tǒng)元數(shù)據(jù)信息時(shí),是將元數(shù)據(jù)表當(dāng)做堆表進(jìn)行管理,具有將元數(shù)據(jù)表分散到各個(gè)節(jié)點(diǎn)中管理的能力,避免由于表過(guò)多導(dǎo)致訪(fǎng)問(wèn)元數(shù)據(jù)表成為性能瓶頸。
- 并行掃描技術(shù)。虛谷數(shù)據(jù)庫(kù)能完全調(diào)度整個(gè)集群節(jié)點(diǎn)的計(jì)算和 IO 能力來(lái)對(duì)用戶(hù)發(fā)起的 SQL 請(qǐng)求進(jìn)行處理,并行處理過(guò)程自動(dòng)完成,以整個(gè)集群算力為用戶(hù)提供高效的大數(shù)據(jù)查詢(xún)分析能力。
- 智能單元掃描技術(shù)。虛谷數(shù)據(jù)庫(kù)基于計(jì)算向存儲(chǔ)靠攏的設(shè)計(jì)理念,開(kāi)發(fā)了獨(dú)特的智能單元掃描技術(shù)(算子下推),讓數(shù)據(jù)在存儲(chǔ)節(jié)點(diǎn)進(jìn)行裁剪計(jì)算后再匯聚,從而減少了網(wǎng)絡(luò)開(kāi)銷(xiāo),降低了計(jì)算資源消耗,以提升數(shù)據(jù)庫(kù)對(duì) SQL 的響應(yīng)速度和吞吐量。
(4)多重高安全
虛谷數(shù)據(jù)庫(kù)的安全是采用GM/T 0028體系構(gòu)建的,設(shè)計(jì)了一些高安全的數(shù)據(jù)防控策略,包括訪(fǎng)問(wèn)控制、身份認(rèn)證、存儲(chǔ)加密等等。
- 身份驗(yàn)證。通過(guò)身份驗(yàn)證,虛谷數(shù)據(jù)庫(kù)可確定該用戶(hù)是否具有登錄的權(quán)限及其在系統(tǒng)中的系統(tǒng)級(jí)角色,以此決定該用戶(hù)能夠做什么和不能夠做什么。其密碼強(qiáng)度可進(jìn)行配置,防止被暴力破解。
- 自主訪(fǎng)問(wèn)控制。根據(jù)用戶(hù)的權(quán)限執(zhí)行自主訪(fǎng)問(wèn)控制,對(duì)用戶(hù)操作、訪(fǎng)問(wèn)的權(quán)限管理粒度支持庫(kù)、視圖、表、角色及用戶(hù)操作等。
- 基于標(biāo)記的強(qiáng)制訪(fǎng)問(wèn)控制。強(qiáng)制訪(fǎng)問(wèn)控制主要是針對(duì)用戶(hù)和元組。用戶(hù)操作元組時(shí),不僅要滿(mǎn)足自主訪(fǎng)問(wèn)控制的權(quán)限要求,還要滿(mǎn)足用戶(hù)和元組之間標(biāo)記的相容性。這種可精確到行列級(jí)的控制能力,增強(qiáng)系統(tǒng)安全性。
- 存儲(chǔ)加密。虛谷數(shù)據(jù)庫(kù)實(shí)現(xiàn)存儲(chǔ)加密,且啟用后對(duì)系統(tǒng)影響很小。
- 網(wǎng)絡(luò)訪(fǎng)問(wèn)控制。虛谷數(shù)據(jù)庫(kù)通過(guò)黑白名單等方式,實(shí)現(xiàn)對(duì)訪(fǎng)問(wèn)用戶(hù)網(wǎng)絡(luò)的安全管理,保證了數(shù)據(jù)庫(kù)在復(fù)雜網(wǎng)絡(luò)環(huán)境的數(shù)據(jù)和行為安全。
(5)高可擴(kuò)展性
虛谷數(shù)據(jù)庫(kù)基于其優(yōu)異的分布式架構(gòu)特點(diǎn),擁有動(dòng)態(tài)增加節(jié)點(diǎn)的能力,可以在集群能力遇到瓶頸的時(shí)候進(jìn)行擴(kuò)展。如果計(jì)算能力不足可以擴(kuò)展工作節(jié)點(diǎn),存儲(chǔ)能力不足則擴(kuò)展存儲(chǔ)節(jié)點(diǎn),或存儲(chǔ)計(jì)算同時(shí)擴(kuò)展。計(jì)算節(jié)點(diǎn)由于本身不存儲(chǔ)數(shù)據(jù),所以擴(kuò)展后即可參與計(jì)算任務(wù)從而增加整個(gè)數(shù)據(jù)庫(kù)并發(fā)能力和計(jì)算能力。存儲(chǔ)節(jié)點(diǎn)由于數(shù)據(jù)存儲(chǔ)與邏輯表無(wú)關(guān),是按物理 CHUNK 進(jìn)行存儲(chǔ)的,所以在擴(kuò)展存儲(chǔ)節(jié)點(diǎn)后,原集群存儲(chǔ)可以按 CHUNK 流轉(zhuǎn)至新的存儲(chǔ)節(jié)點(diǎn)完成節(jié)點(diǎn)擴(kuò)展,擴(kuò)展后可有效緩解應(yīng)用瓶頸,增加集群的容量和性能。虛谷數(shù)據(jù)庫(kù)擁有在線(xiàn)動(dòng)態(tài)擴(kuò)展能力,數(shù)據(jù)的轉(zhuǎn)移(復(fù)制)不需要人工干預(yù),工作負(fù)載在存儲(chǔ)節(jié)點(diǎn)之間動(dòng)態(tài)分發(fā),無(wú)需停機(jī),實(shí)現(xiàn)系統(tǒng)的透明擴(kuò)展。
(6)生態(tài)易用性
虛谷數(shù)據(jù)庫(kù)提供了一系列基于 JAVA 技術(shù)的圖形化客戶(hù)端工具,用戶(hù)可通過(guò)不同工具與數(shù)據(jù)庫(kù)服務(wù)端進(jìn)行交互,包括:虛谷數(shù)據(jù)庫(kù)管理工具 XuguManager、虛谷數(shù)據(jù)庫(kù)遷移工具 XuguMigrator、虛谷數(shù)據(jù)庫(kù)集群監(jiān)控軟件 XuguCM 等。比較有意思的是,虛谷和大多傳統(tǒng)數(shù)據(jù)庫(kù)廠(chǎng)商一樣,采用自研工具的路子,他們自己提供的XuguManager頗有Oracle-SQL Developer的風(fēng)格,應(yīng)該也是和他們宣傳的Oracle兼容性配套的吧。另外他們也提供了一個(gè)DBever的管理器插件,可以通過(guò)DBever直連虛谷數(shù)據(jù)庫(kù),這應(yīng)該是為了兼容MySQL生態(tài)考慮的。
另外,虛谷花了大量的時(shí)間做開(kāi)發(fā)框架的支持,比如主流的MyBatis、Hibernate等。相應(yīng)的DEMO可以在他們的GITEE主頁(yè)查得到:https://gitee.com/XuguDB
4. 產(chǎn)品亮點(diǎn)與展望
通過(guò)對(duì)虛谷數(shù)據(jù)庫(kù)的學(xué)習(xí)及簡(jiǎn)單的評(píng)測(cè),對(duì)這一國(guó)產(chǎn)數(shù)據(jù)庫(kù)有了粗淺的了解。在學(xué)習(xí)過(guò)程中,有幾個(gè)亮點(diǎn)給我非常深的印象。
(1)形似神也似的“兼容性”
一款新產(chǎn)品亦或是相對(duì)小眾產(chǎn)品,如何能快速收獲用戶(hù),其兼容能力尤為重要。良好的兼容能力,可以方便用戶(hù)快速上手體驗(yàn)、移植遷移、管理維護(hù)等。虛谷數(shù)據(jù)庫(kù)在這方面做了大量的工作,針對(duì)業(yè)內(nèi)較為流行的數(shù)據(jù)庫(kù)產(chǎn)品(如Oracle、MySQL),可做到高達(dá)90%以上的兼容。這對(duì)于在國(guó)產(chǎn)化替代中,從功能性能、遷移成本、遷移周期、管理維護(hù)等方面具有非常大的優(yōu)勢(shì)。通過(guò)對(duì)產(chǎn)品的了解,簡(jiǎn)單整理個(gè)兼容表:
除了上述對(duì)其他數(shù)據(jù)庫(kù)產(chǎn)品的兼容外,個(gè)人認(rèn)為更重要的對(duì)上下游生態(tài)的兼容。數(shù)據(jù)庫(kù)不是孤立產(chǎn)品,其需要依托于底層軟硬件環(huán)境及上層應(yīng)用開(kāi)發(fā),進(jìn)而才能發(fā)揮其最大作用。虛谷數(shù)據(jù)庫(kù)兼容適配了大量硬件、軟件、應(yīng)用、工具等,通過(guò)提供標(biāo)準(zhǔn)接口方式,方便用戶(hù)快速使用。
經(jīng)過(guò)多年合作共建,虛谷數(shù)據(jù)庫(kù)已完成從芯片、硬件、操作系統(tǒng)、云平臺(tái)、中間件、驅(qū)動(dòng)與工具及應(yīng)用軟件的全生態(tài)體系構(gòu)建,打消用戶(hù)在選擇使用上的諸多疑慮。
(2)單機(jī)分布式的“一體化”
分布式數(shù)據(jù)庫(kù)經(jīng)常令人詬病的一點(diǎn)就是架構(gòu)復(fù)雜,前期投入資源較多,這也成為很多用戶(hù)不選擇分布式的原因。因此如何實(shí)現(xiàn)分布式輕量化或讓分布式可逐步擴(kuò)展成為很多廠(chǎng)商追求的。單機(jī)分布式一體化架構(gòu),在不同架構(gòu)間使用統(tǒng)一架構(gòu),簡(jiǎn)化管理與升級(jí);同時(shí)通過(guò)提供一種從單機(jī)平滑升級(jí)到分布式的手段,方便用戶(hù)可隨時(shí)擴(kuò)展。虛谷數(shù)據(jù)庫(kù)也提供了這種一體化能力,來(lái)滿(mǎn)足用戶(hù)多形態(tài)需求,即前期可使用單機(jī)或小規(guī)模分布式,隨著業(yè)務(wù)的發(fā)展可隨時(shí)進(jìn)行彈性擴(kuò)容,在擴(kuò)容過(guò)程中業(yè)務(wù)做到“無(wú)感”。針對(duì)計(jì)算層的擴(kuò)展,虛谷數(shù)據(jù)庫(kù)可實(shí)現(xiàn)靈活的計(jì)算節(jié)點(diǎn)擴(kuò)展,通過(guò)前端的負(fù)載均衡,可使應(yīng)用端無(wú)感使用。針對(duì)存儲(chǔ)層的擴(kuò)展,虛谷數(shù)據(jù)庫(kù)可實(shí)現(xiàn)存儲(chǔ)節(jié)點(diǎn)的動(dòng)態(tài)擴(kuò)展,并支持?jǐn)?shù)據(jù)自動(dòng)均衡能力,還可根據(jù)負(fù)載情況在保證QoS的前提下完成數(shù)據(jù)平衡過(guò)程。
這其中的難點(diǎn)是在于存儲(chǔ)節(jié)點(diǎn)的擴(kuò)容。新存儲(chǔ)節(jié)點(diǎn)接入集群后,可立即提供存儲(chǔ)服務(wù)(新存儲(chǔ)創(chuàng)建、數(shù)據(jù)讀寫(xiě)、數(shù)據(jù)寫(xiě)入),同時(shí)管理節(jié)點(diǎn)進(jìn)行存儲(chǔ)均衡操作,使存儲(chǔ)節(jié)點(diǎn)在一定時(shí)間內(nèi)達(dá)到均衡。在數(shù)據(jù)均衡的過(guò)程中,首先會(huì)去計(jì)算均衡的存儲(chǔ)節(jié)點(diǎn)遷出和遷入的存儲(chǔ)個(gè)數(shù);然后針對(duì)每個(gè) CHUNK 嘗試從遷出節(jié)點(diǎn)向遷入節(jié)點(diǎn)移動(dòng)存儲(chǔ),如果該存儲(chǔ)用戶(hù)正在使用則跳過(guò),避免對(duì)用戶(hù)業(yè)務(wù)產(chǎn)生影響。重復(fù)上面的步驟,直到存儲(chǔ)達(dá)到平衡。
(3)極致可擴(kuò)展的“高性能”
分布式數(shù)據(jù)庫(kù)的一大用途,就是滿(mǎn)足業(yè)務(wù)高并發(fā)、高性能的場(chǎng)景需求。以標(biāo)準(zhǔn)的 TPC-C 模型為參照,廠(chǎng)商提供了如下評(píng)測(cè)結(jié)果。虛谷數(shù)據(jù)庫(kù)在三節(jié)點(diǎn)(計(jì)算、存儲(chǔ)角色混合)、1000 倉(cāng),不做任何優(yōu)化下測(cè)試達(dá)到 36 萬(wàn)的tpmC成績(jī)。相較于其他分布式數(shù)據(jù)庫(kù)產(chǎn)品,其性能指標(biāo)領(lǐng)先。且上述成績(jī)通過(guò)優(yōu)化可大幅提升,通過(guò)對(duì)數(shù)據(jù)分布的調(diào)整降低分布式事務(wù)比重或采用庫(kù)內(nèi)計(jì)算方式減低網(wǎng)絡(luò)時(shí)延等手段,相信可以取得更優(yōu)的效果。同時(shí)在分布式架構(gòu)下可根據(jù)隨著資源的擴(kuò)容,進(jìn)一步提升來(lái)滿(mǎn)足用戶(hù)的極限場(chǎng)景需求。下圖是與某國(guó)內(nèi)產(chǎn)品在同等資源條件下的測(cè)試對(duì)比圖。
虛谷數(shù)據(jù)庫(kù)發(fā)展展望:
作為深耕國(guó)產(chǎn)數(shù)據(jù)庫(kù)二十多年的的“老兵”,虛谷數(shù)據(jù)庫(kù)經(jīng)過(guò)多年低調(diào)發(fā)展,其產(chǎn)品已逐步發(fā)展成熟,在多領(lǐng)域已經(jīng)取得了長(zhǎng)足的發(fā)展。可見(jiàn)未來(lái),像虛谷數(shù)據(jù)庫(kù)這樣單機(jī)分布式一體化的原生分布式數(shù)據(jù)庫(kù)產(chǎn)品是比較適合于傳統(tǒng)關(guān)基領(lǐng)域的國(guó)央企和主管單位數(shù)字化轉(zhuǎn)型的,能較大限度地減少業(yè)務(wù)升級(jí)的改造成本和運(yùn)維難度。隨著近年數(shù)據(jù)庫(kù)國(guó)產(chǎn)化浪潮大潮將至,相信未來(lái)這一優(yōu)秀的國(guó)產(chǎn)數(shù)據(jù)庫(kù)產(chǎn)品必將破繭而出,取得更大的成績(jī)。