容器技術(shù),以及與容器技術(shù)緊密相關(guān)的DevOps、微服務(wù)等技術(shù)非常流行,被許多人認(rèn)為是繼虛擬化技術(shù)之后,IT基礎(chǔ)設(shè)施領(lǐng)域的又一大創(chuàng)新,對(duì)于企業(yè)敏態(tài)業(yè)務(wù)發(fā)展至關(guān)重要,圍繞容器技術(shù)需要企業(yè)IT架構(gòu)作出調(diào)整,對(duì)于數(shù)據(jù)庫(kù)的需求也有很大改變。
王濤提到,很多企業(yè)都在從基于傳統(tǒng)數(shù)據(jù)庫(kù)的煙囪式開(kāi)發(fā)向微服務(wù)架構(gòu)轉(zhuǎn)型,微服務(wù)體系架構(gòu)中,每個(gè)微服務(wù)都需要提供數(shù)據(jù)持久化能力,用戶希望每個(gè)微服務(wù)所應(yīng)對(duì)的數(shù)據(jù)量能夠無(wú)限彈性擴(kuò)張。
支撐微服務(wù)的話,是用集中式數(shù)據(jù)庫(kù)還是分布式數(shù)據(jù)庫(kù)呢?
王濤介紹說(shuō),如果使用傳統(tǒng)集中式數(shù)據(jù)庫(kù),那么對(duì)于應(yīng)用程序的改造相對(duì)比較小,對(duì)DBA運(yùn)維人員的成本比較低,但由于數(shù)據(jù)緊耦合,既無(wú)法彈性擴(kuò)張,又可能存在的單點(diǎn)故障的隱患。
另一種做法是每個(gè)微服務(wù)對(duì)應(yīng)一個(gè)獨(dú)立的小數(shù)據(jù)庫(kù),比如使用MySQL或PostgreSQL,這樣能夠解決集中式存儲(chǔ)的問(wèn)題,但因?yàn)槊總€(gè)微服務(wù)都使用獨(dú)立的數(shù)據(jù)庫(kù),會(huì)使原本集中的數(shù)據(jù)分散到很多不同的設(shè)備中,會(huì)造成數(shù)據(jù)極度碎片化,數(shù)據(jù)在微服務(wù)之間無(wú)法共享,而且運(yùn)維成本極其高昂。
碎片化帶來(lái)什么難題呢?
王濤介紹說(shuō),一些互聯(lián)網(wǎng)公司生產(chǎn)系統(tǒng)中維護(hù)著兩三萬(wàn)套MySQL數(shù)據(jù)庫(kù),這樣的架構(gòu)下想要進(jìn)行企業(yè)內(nèi)部的數(shù)據(jù)整合視圖是極為困難的事兒。數(shù)字化轉(zhuǎn)型時(shí)代,數(shù)據(jù)是企業(yè)的核心資產(chǎn),在大數(shù)據(jù)以及基于數(shù)據(jù)的人工智能技術(shù)在企業(yè)逐步落地和發(fā)展的過(guò)程中,這樣的數(shù)據(jù)架構(gòu)顯然是有很大問(wèn)題的。
巨杉數(shù)據(jù)庫(kù)的分布式數(shù)據(jù)庫(kù)能很好地解決這一問(wèn)題。一方面,分布式數(shù)據(jù)庫(kù)解決數(shù)據(jù)的彈性擴(kuò)張的問(wèn)題,使每個(gè)微服務(wù)可以不受底層數(shù)據(jù)存儲(chǔ)限制進(jìn)行擴(kuò)容。另一方面,可以解決微服務(wù)應(yīng)用架構(gòu)中數(shù)據(jù)嚴(yán)重碎片化的問(wèn)題。
巨杉分布式數(shù)據(jù)庫(kù)如何解決這一問(wèn)題的呢?
巨杉分布式數(shù)據(jù)庫(kù)的做法是用統(tǒng)一的分布式數(shù)據(jù)庫(kù)做底座,上層可以創(chuàng)建成百上千個(gè)數(shù)據(jù)庫(kù)實(shí)例,同時(shí),應(yīng)用無(wú)需感知每個(gè)數(shù)據(jù)庫(kù)實(shí)例底下對(duì)應(yīng)的資源。
對(duì)單個(gè)應(yīng)用來(lái)說(shuō),這樣的數(shù)據(jù)庫(kù)與傳統(tǒng)標(biāo)準(zhǔn)數(shù)據(jù)庫(kù)完全一致,但是又能做到彈性伸縮。管理方面,所有的物理設(shè)備從邏輯上進(jìn)行統(tǒng)一管理,降低管理成本。數(shù)據(jù)共享方面,不同實(shí)例里的數(shù)據(jù)可以進(jìn)行共享。
這樣的分布式數(shù)據(jù)庫(kù)既兼容了傳統(tǒng)數(shù)據(jù)庫(kù)技術(shù),同時(shí)又是面向未來(lái)的。
在兼容傳統(tǒng)數(shù)據(jù)庫(kù)方面,作為金融級(jí)數(shù)據(jù)庫(kù),巨杉數(shù)據(jù)庫(kù)有完整的ACID支持,事務(wù)和一致性保證,而且,巨杉數(shù)據(jù)庫(kù)完整支持SQL語(yǔ)句,與傳統(tǒng)數(shù)據(jù)庫(kù)如MySQL/PostgreSQL的語(yǔ)法完全兼容,用戶和管理員可以像以往一樣用數(shù)據(jù)庫(kù),應(yīng)用程序也無(wú)需做什么改動(dòng)。
完整的ACID支持意味著能同時(shí)支持一致性和安全性,王濤強(qiáng)調(diào)“絕對(duì)不能為了上分布式犧牲數(shù)據(jù)的一致性和安全性”,他認(rèn)為,新型面向聯(lián)機(jī)交易的分布式數(shù)據(jù)庫(kù)必須對(duì)傳統(tǒng)ACID有完美的支持,與傳統(tǒng)Oracle DB2的數(shù)據(jù)安全性一致性保持兼容。
在面向未來(lái)的新特性方面,巨杉數(shù)據(jù)庫(kù)有三點(diǎn)創(chuàng)新:
第一個(gè)是分布式與擴(kuò)展性,這其實(shí)是分布式數(shù)據(jù)庫(kù)的核心價(jià)值,它可以根據(jù)數(shù)據(jù)量的變化,實(shí)現(xiàn)存儲(chǔ)層和計(jì)算層的彈性擴(kuò)展,能在數(shù)據(jù)庫(kù)的層面以服務(wù)資源池的形式提供數(shù)據(jù)庫(kù)訪問(wèn)能力。
第二個(gè)在于多模式訪問(wèn)接口,其實(shí)主要就是因?yàn)槿缃竦姆?wù)類型、應(yīng)用需求等多樣化,對(duì)數(shù)據(jù)庫(kù)接口類型的要求也日益多樣化,所以,分布式數(shù)據(jù)庫(kù)要支持多類型數(shù)據(jù)管理和多種模式的訪問(wèn)接口。這點(diǎn)與分布式存儲(chǔ)也非常類似,面對(duì)多樣化的應(yīng)用,存儲(chǔ)也需要多元化的接口類型。
第三個(gè)方面其實(shí)考量共享架構(gòu)的資源隔離問(wèn)題,當(dāng)一個(gè)數(shù)據(jù)庫(kù)同時(shí)處理HTAP交易和分析混合處理業(yè)務(wù)時(shí)候,如何不影響聯(lián)機(jī)交易業(yè)務(wù)的性能表現(xiàn)?巨杉分布式數(shù)據(jù)庫(kù)的資源池內(nèi)可對(duì)交易與分析業(yè)務(wù)進(jìn)行物理資源隔離實(shí)現(xiàn)數(shù)據(jù)的物理隔離,性能方面互不干擾。
作為一款金融級(jí)的關(guān)系型數(shù)據(jù)庫(kù),巨杉數(shù)據(jù)庫(kù)在數(shù)據(jù)安全和容災(zāi)方面也頗有造詣。巨杉數(shù)據(jù)庫(kù)原生支持?jǐn)?shù)據(jù)庫(kù)內(nèi)核級(jí)別的高可用以及跨數(shù)據(jù)中心災(zāi)備能力,目前已經(jīng)實(shí)現(xiàn)異地容災(zāi)備份,可滿足“三地五中心”的容災(zāi)支持。同時(shí),巨杉數(shù)據(jù)庫(kù)在異地容災(zāi)基礎(chǔ)上,實(shí)現(xiàn)了數(shù)據(jù)異地多活,目前已經(jīng)實(shí)現(xiàn)雙中心同時(shí)讀寫(xiě),中心切換RPO為0和RTO達(dá)到秒級(jí),提供了“超金融級(jí)”的數(shù)據(jù)安全保障。
分布式數(shù)據(jù)庫(kù)的演進(jìn)
分布式的概念已有很多年,分布式存儲(chǔ),分布式數(shù)據(jù)庫(kù)都是如此,分布式數(shù)據(jù)庫(kù)在歷經(jīng)多年的發(fā)展當(dāng)中不斷迭代,分布式數(shù)據(jù)庫(kù)技術(shù)發(fā)展體系可分為三類:垂直分庫(kù)、分庫(kù)分表和原生分布式數(shù)據(jù)庫(kù)。
王濤介紹說(shuō),最傳統(tǒng)的是垂直分庫(kù),通過(guò)定義好的應(yīng)用規(guī)則,按照規(guī)則找到數(shù)據(jù)庫(kù)實(shí)例,然后再直接獲取連接進(jìn)行查詢。這種方式的缺點(diǎn)在于,跨數(shù)據(jù)庫(kù)的事務(wù)難以實(shí)現(xiàn),需要非常多的定制化開(kāi)發(fā)。
還有一種方式是分庫(kù)分表。做法是在應(yīng)用程序和數(shù)據(jù)庫(kù)之間構(gòu)建一個(gè)SQL解析服務(wù),將SQL翻譯成底層每個(gè)數(shù)據(jù)庫(kù)所看得懂的子查詢,把查詢下發(fā)給底層的傳統(tǒng)數(shù)據(jù)庫(kù)。這種機(jī)制是從集中式架構(gòu)到分布式架構(gòu)的過(guò)渡狀態(tài),同時(shí),由于對(duì)于應(yīng)用無(wú)法做到完全透明,一般來(lái)說(shuō)需要在應(yīng)用拼裝SQL的時(shí)候指定很多參數(shù)或比較獨(dú)特的語(yǔ)法。
最后一種則是通常所說(shuō)的原生分布式數(shù)據(jù)庫(kù),常見(jiàn)的有巨杉和螞蟻金服的OceanBase分布式數(shù)據(jù)庫(kù)。原生分布式數(shù)據(jù)庫(kù)是底層完全從零開(kāi)始研發(fā),完全拋棄小型機(jī)體系,基于PC服務(wù)器硬件架構(gòu)設(shè)計(jì)的分布式數(shù)據(jù)庫(kù),將高可用、容災(zāi)、分布式等機(jī)制天然融入到數(shù)據(jù)存儲(chǔ)體系的方方面面。
以巨杉數(shù)據(jù)庫(kù)為例,能夠保證在與MySQL 100%兼容的前提下實(shí)現(xiàn)對(duì)應(yīng)用完全透明的分布式能力。開(kāi)發(fā)者不需要關(guān)注一個(gè)表存了幾億還是十幾億記錄,只要在建表的時(shí)候配置好容量和橫跨多少臺(tái)物理設(shè)備,數(shù)據(jù)即可自動(dòng)在庫(kù)內(nèi)進(jìn)行均衡,從應(yīng)用來(lái)看就像訪問(wèn)標(biāo)準(zhǔn)的表一樣直接進(jìn)行讀寫(xiě)請(qǐng)求。
SequoiaDB v3.2版本在分布式存儲(chǔ)層和數(shù)據(jù)庫(kù)實(shí)例層均增加了許多新特性。底層的分布式存儲(chǔ)層作為資源池,負(fù)責(zé)數(shù)據(jù)存儲(chǔ)、分布式事務(wù)控制等,數(shù)據(jù)庫(kù)實(shí)例層則提供對(duì)上層應(yīng)用程序的SQL服務(wù),用戶可創(chuàng)建結(jié)構(gòu)化實(shí)例,也可以創(chuàng)建非結(jié)構(gòu)化實(shí)例,可應(yīng)用在包括聯(lián)機(jī)交易、數(shù)據(jù)中臺(tái)以及內(nèi)容管理三大場(chǎng)景下。
作為一款開(kāi)源分布式數(shù)據(jù)庫(kù),在巨杉數(shù)據(jù)庫(kù)的官網(wǎng)上已經(jīng)提供了開(kāi)放下載服務(wù),感興趣的朋友可以即可去下載安裝體驗(yàn)。