OceanBase是阿里開(kāi)發(fā)的
分布式關(guān)系型數(shù)據(jù)庫(kù)(SQL),。它的目標(biāo)是支持?jǐn)?shù)百萬(wàn)億字節(jié)的數(shù)據(jù)和數(shù)十萬(wàn)TPS以及數(shù)百萬(wàn)次QPS訪問(wèn),。無(wú)論是數(shù)據(jù)量還是訪問(wèn)量,,即使是非常昂貴的小型機(jī)甚至大型機(jī),也買(mǎi)不起一個(gè)單獨(dú)的關(guān)系數(shù)據(jù)庫(kù)系統(tǒng),。
案例:OceanBase分布式關(guān)系型數(shù)據(jù)庫(kù)度過(guò)了一個(gè)成功的雙十一:已經(jīng)支持了支付寶的核心交易,、支付、會(huì)員,、賬戶,,并刷新了紀(jì)錄:每秒17.5萬(wàn)筆交易,每秒12萬(wàn)筆交易,,全天累計(jì)支付10.5億筆,。
1、高可擴(kuò)展性
傳統(tǒng)的分布式關(guān)系型數(shù)據(jù)庫(kù),,如Oracle或MySQL,,功能完善,但數(shù)據(jù)庫(kù)本身無(wú)法擴(kuò)展,。隨著數(shù)據(jù)量的增加和業(yè)務(wù)內(nèi)容的豐富,,需要對(duì)數(shù)據(jù)庫(kù)和表進(jìn)行反匯編,,然后將相應(yīng)的SQL訪問(wèn)和路由到指定的數(shù)據(jù)庫(kù),。數(shù)據(jù)庫(kù)運(yùn)維人員需要花費(fèi)大量的時(shí)間對(duì)數(shù)據(jù)庫(kù)進(jìn)行擴(kuò)展,包括讀寫(xiě)分離,、垂直拆分,、水平拆分等等,。
分布式關(guān)系型數(shù)據(jù)庫(kù)使用分布式技術(shù)和無(wú)共享架構(gòu)。來(lái)自業(yè)務(wù)的訪問(wèn)將自動(dòng)分配給多個(gè)數(shù)據(jù)庫(kù)主機(jī),。在相關(guān)技術(shù)的支持下,,OceanBase還可以使用廉價(jià)的PC服務(wù)器作為其數(shù)據(jù)庫(kù)主機(jī)。通過(guò)這兩個(gè)變化,,運(yùn)維人員可以高高興興地通過(guò)增加服務(wù)器的數(shù)量來(lái)提高系統(tǒng)的容量和性能,。
2、成本低
傳統(tǒng)商業(yè)
企業(yè)采用的“IOE”系統(tǒng)實(shí)際上代表了一種高成本,、高維護(hù),、非高并發(fā)的商業(yè)數(shù)據(jù)庫(kù)系統(tǒng)。尤其是隨著數(shù)據(jù)越來(lái)越多,,硬件升級(jí)和維護(hù)的成本會(huì)越來(lái)越驚人,。阿里巴巴采用了數(shù)據(jù)分段的策略,將一些海量數(shù)據(jù)應(yīng)用從集中式的Oracle切換到分布式集群,,從縱向擴(kuò)展到橫向,,解決了數(shù)據(jù)庫(kù)的可擴(kuò)展性問(wèn)題,用PC服務(wù)器替代了小型機(jī),。
由此帶來(lái)的一個(gè)重要變化就是成本的大幅降低,。與分布式關(guān)系型數(shù)據(jù)庫(kù) company的傳統(tǒng)產(chǎn)品相比,OceanBase的升級(jí)和維護(hù)不需要昂貴的共享存儲(chǔ),、高可靠的服務(wù)器和數(shù)據(jù)庫(kù)軟件的許可費(fèi),,可以將商用數(shù)據(jù)庫(kù)的成本降低到一半以下。
3,、高可靠性
分布式關(guān)系型數(shù)據(jù)庫(kù)系統(tǒng)通常由數(shù)據(jù)庫(kù)軟件,、運(yùn)行數(shù)據(jù)庫(kù)軟件的數(shù)據(jù)庫(kù)服務(wù)器硬件和用于存儲(chǔ)數(shù)據(jù)庫(kù)數(shù)據(jù)的數(shù)據(jù)庫(kù)存儲(chǔ)硬件(即共享存儲(chǔ))組成。數(shù)據(jù)庫(kù)的穩(wěn)定性和可靠性也取決于這三個(gè)部分,。使用PC服務(wù)器可以帶來(lái)高可擴(kuò)展性,,降低成本,但其硬件的可靠性相應(yīng)降低,。
如何保證系統(tǒng)的可靠性,?
分布式關(guān)系型數(shù)據(jù)庫(kù)的一個(gè)基本假設(shè)是硬件(服務(wù)器、存儲(chǔ),、網(wǎng)絡(luò)等,。)不靠譜。因此,,OceanBase必須確保少量硬件(服務(wù)器,、存儲(chǔ)、網(wǎng)絡(luò)等,。)任何時(shí)候發(fā)生的異常都不會(huì)影響業(yè)務(wù),。
為此,,OceanBase分布式關(guān)系型數(shù)據(jù)庫(kù)推出了Paxos協(xié)議。每一個(gè)事務(wù),,在主庫(kù)執(zhí)行之后,,都必須同步到一半以上的庫(kù)(包括主庫(kù)本身),比如三個(gè)庫(kù)中的兩個(gè)或者五個(gè)庫(kù)中的三個(gè),,事務(wù)才算成功,。這樣在少數(shù)庫(kù)(比如3個(gè)中的1個(gè)庫(kù)或者5個(gè)中的2個(gè)庫(kù))出現(xiàn)異常后,業(yè)務(wù)不會(huì)受到影響,。
Paxos是一種分布式事務(wù)一致性協(xié)議,,主要用于保證分布式系統(tǒng)中數(shù)據(jù)的可靠性。當(dāng)多數(shù)已經(jīng)成功的機(jī)器,,只要壞了的機(jī)器是少數(shù),,少數(shù)就是三分之一,多數(shù)就是二分之一,。三臺(tái)機(jī)器有兩臺(tái)是成功的,,你可以告訴用戶這個(gè)數(shù)據(jù)不會(huì)丟失。此時(shí),,這臺(tái)機(jī)器可能會(huì)損壞,,但如果任何一臺(tái)機(jī)器損壞,至少會(huì)有另一臺(tái)機(jī)器恢復(fù),。這是系統(tǒng)內(nèi)的自動(dòng)災(zāi)難恢復(fù),。如果哪個(gè)機(jī)器壞了,或者有一個(gè)機(jī)器掉隊(duì)了,,比如其中三個(gè)成功后,,把另外兩個(gè)拖過(guò)來(lái),數(shù)據(jù)就補(bǔ)上了,,肯定能保證另外兩個(gè)沒(méi)問(wèn)題,,最后三個(gè)也沒(méi)問(wèn)題,所以一個(gè)機(jī)器壞了也不會(huì)有問(wèn)題,。
在軟件層面,,OceanBase區(qū)別于傳統(tǒng)分布式關(guān)系型數(shù)據(jù)庫(kù)的一個(gè)關(guān)鍵特點(diǎn)是軟件版本的灰度升級(jí)。
主備模式的傳統(tǒng)數(shù)據(jù)庫(kù)是“單活”的,,只有主數(shù)據(jù)庫(kù)可以進(jìn)行寫(xiě)事務(wù),,雖然在維護(hù)和升級(jí)時(shí)可以先操作備份數(shù)據(jù)庫(kù)。操作完成后,,備份數(shù)據(jù)庫(kù)成為主數(shù)據(jù)庫(kù),,接受用戶訪問(wèn),業(yè)務(wù)一步到位就會(huì)受到影響。如果新版本有問(wèn)題:
傳統(tǒng)數(shù)據(jù)庫(kù):升級(jí)后,,所有讀寫(xiě)流量只能引入一次,。
OceanBase是“多活”設(shè)計(jì),,即多個(gè)庫(kù)(3,、5等。)都可以有部分讀寫(xiě)流量,。升級(jí)時(shí),,先切斷待升級(jí)庫(kù)的讀寫(xiě)流量,對(duì)比升級(jí)后的數(shù)據(jù),,正常后再逐步引入讀寫(xiě)流量,。一切正常并運(yùn)行一段時(shí)間后,升級(jí)其他庫(kù):
基于硬件不可靠,,可以容忍少數(shù)服務(wù)器故障的假設(shè),,OceanBase使用相對(duì)便宜的PC服務(wù)器,而不是高可靠性的服務(wù)器,,不再使用昂貴的共享存儲(chǔ),,因此不僅提供了比使用高可靠性服務(wù)器和共享存儲(chǔ)低得多的成本,而且容忍少數(shù)服務(wù)器甚至少數(shù)集群的故障也意味著比傳統(tǒng)數(shù)據(jù)庫(kù)更高的可靠性,。
通過(guò)灰度升級(jí),,OceanBase避免了傳統(tǒng)數(shù)據(jù)庫(kù)的升級(jí),大大降低了分布式關(guān)系型數(shù)據(jù)庫(kù)維護(hù)升級(jí)的風(fēng)險(xiǎn),。
4,、數(shù)據(jù)的準(zhǔn)確性
許多互聯(lián)網(wǎng)服務(wù)可以允許一定的數(shù)據(jù)錯(cuò)誤,但電子商務(wù)(如交易,、金融領(lǐng)域等,。)不同于一般的互聯(lián)網(wǎng)公司,對(duì)數(shù)據(jù)的一致性要求非常高,。比如要保證錢(qián)的流入流出匹配,,不能丟失任何支付數(shù)據(jù)(阿里巴巴用OceanBase做支付寶系統(tǒng))。
分布式關(guān)系型數(shù)據(jù)庫(kù)的設(shè)計(jì)不同于經(jīng)典的關(guān)系數(shù)據(jù)庫(kù),,讀事務(wù)基本上是分布式并發(fā)執(zhí)行的,,而寫(xiě)事務(wù)目前是集中式串行的,也就是可序列化的,,任何寫(xiě)事務(wù)在提交前對(duì)其他讀寫(xiě)事務(wù)都是不可見(jiàn)的,,所以O(shè)ceanBase是強(qiáng)一致的。這樣,,在設(shè)計(jì)方案中就可以保證沒(méi)有數(shù)據(jù)丟失,。