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