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