OceanBase于2020年3月在阿裡雲上完成了商業化,在公有雲上正式對外開放。同步上線的還有相關的生态産品,包括叢集管控(OCP:OceanBase Cloud Platform),診斷(OTA:OceanBase Tunning Advisor),遷移服務(OMS:OceanBase Migration Service)及開發者中心(ODC:OceanBase Developer Center)。
一、公共雲OceanBase服務端部署
螞蟻金服自研分布式關系資料庫OceanBase是一款純原生的分布式關系資料庫,在代碼層面完全可控。公共雲OceanBase産品(圖1-1)是基于三份副本3AZ部署,通過paxos協定保證了多節點間的資料一緻性,單點故障甚至單AZ故障,也可以保障業務連續性,RPO=0,RTO<30s,做到機房級高可用,未來還将推出三地五中心的産品形态,具備城市級高可用切換能力。同時,OceanBase的資源管理具有非常高的靈活性。它支援多租戶部署,在OceanBase叢集裡面,我們可以按需配置設定執行個體,并且可以進行線上資源擴容或者縮容。
從安全性和可用性來講,OceanBase是非常适合金融業務場景的。因為監管需求,金融業務場景(像銀行業務等)不能上公有雲。但是這并不影響類金融業務,像保險、基金等。

圖1-1
二、OceanBase架構原理
與大多數分布式系統不同的地方在于,OceanBase這個系統沒有單獨的總控伺服器或者總控程序。分布式系統一般包含一個單獨的總控程序,用來做全局管理、負載均衡,等等。OceanBase沒有單獨的總控程序,它的總控是一個服務,叫做RootService,內建在ObServer裡面。OceanBase會從所有的工作機中動态地選出一台ObServer執行總控服務,另外,當總控服務所在的ObServer出現故障時,系統會自動選舉一台新的ObServer提供總控服務。這種方式的好處在于簡化部署,雖然實作很複雜,但是大大降低了使用成本。
OceanBase通過分區能力做到無限水準擴充(圖1-2)。OceanBase跟傳統資料庫分區不一樣的地方,在于傳統資料庫所有的分區隻能在一台伺服器,而OceanBase每個分區可以分布到不同的伺服器,每個分區都有三副本。從資料模型的角度看,OceanBase可以被認為是傳統的資料庫分區表在多機的實作。它可以把不同的使用者生成的資料全部融合到統一的表裡面。無論這些分區在多台伺服器上是如何分布的,整個系統對使用者呈現的都是一張表,背景實作對使用者完全透明。OceanBase在使用者入口使用了OBProxy,它是一個通路代理,它會根據使用者請求的資料将請求轉發到合适的伺服器。ObProxy的最大的亮點在于性能突出,它可以在非常一般的普通伺服器上達到每秒百萬級的處理能力。
圖1-2
如圖1-2,多個分區分布在多台伺服器上。由于多個分區跨ObServer,内部通過兩階段送出實作分布式事務。當然,兩階段送出協定性能較差,OceanBase内部做了很多優化。它提出了分區組的概念,會把多個經常一起通路,或者說通路模式比較類似的不同表的分區放到一個分區組裡面。OB背景會将同一個分區組盡可能排程到一台伺服器上,避免分布式事務。同時優化了兩階段送出協定的内部實作。兩階段送出協定涉及多台伺服器,協定中包含協調者、參與者這兩種角色,參與者維護了每台伺服器的局部狀态,協調者維護了分布式事務的全局狀态。常見的做法是對協調者記日志來持久化分布式事務的全局狀态,而OceanBase的做法是,如果出現故障,通過查詢所有參與者的狀态來恢複分布式事務。這種方式節省了協調者日志,而且隻要所有的參與者都預送出成功,整個事務就成功了,不需要等協調者寫日志就可以應答用戶端。
三、OceanBase存儲架構
OceanBase是一個shared noting的架構,每一個OBServer都有獨立的存儲引擎,将資料儲存在本地,這樣可以滿足容災場景下的資料連續服務。OceanBase采用LSM-Tree的架構來設計Cache和資料存儲,資料首先被寫入記憶體中的MemTable當中,這樣最高頻和最活躍的資料都在記憶體通路,極大的提升了熱資料的通路效率。當MemTable的寫入到達一個門檻值的時候,MemTable中的資料會做一次合并,将資料轉到磁盤的SSTable中。在很多基于LSM Tree的存儲系統中,為了解決寫入的性能問題,通常會将SSTable分為多層,當一層的SSTable個數或者大小達到某個門檻值時,合并入下一層SSTable。
圖1-3
在OceanBase内部,也會有很多種不同類型的Cache,有類似于Oracle和MySQL的buffer。cache用于緩存sstable資料的塊緩存,還有用于緩存資料行的行緩存、日志緩存、位置緩存等等。基線資料緩存到記憶體中提升查詢性能。對于不同租戶,每個租戶都有自己獨立的緩存,可以配置對應租戶記憶體使用的上下限,做到租戶隔離或者搶占超賣,适用于不同需求的場景。
在存儲成本上,OceanBase采用了多種資料壓縮算法,例如lz4、zstd等。OceanBase會對資料集做兩層瘦身,第一層是encoding,會使用字典、RLE等算法對資料做瘦身,第二層是通用壓縮,使用lz4等壓縮算法對encoding之後的資料再做一次瘦身。在zstd算法下,相較傳統MySQL Innodb的壓縮,可以做到相同資料集隻是用MySQL的1/3的存儲,幫助使用者極大的節省存儲成本。更重要的是,傳統資料庫定長頁的設計壓縮不可避免的會造成存儲的空洞,壓縮效率會受影響,而OB這樣的LSM-tree架構的存儲系統,壓縮對資料寫入性能是0影響的。
四、OceanBase SQL引擎
OceanBase的租戶支援Oracle和MySQL兩種SQL相容性,首先相較于傳統MySQL,OB除了硬解析以外,與Oracle一樣支援軟解析,同時解析器還支援SQL參數化以及綁定變量,如圖1-4所示,解析器将解析後的SQL模闆以及執行計劃放在plan cache中,已經存在plan cache中的SQL就可以省去每一次硬解析帶來的開銷,提升了SQL運作效率。
圖1-4
基于LSM-Tree的存儲架構,OB設計了一套獨特的代價模型,引入統計資訊,擁有了基于代碼模型的優化器,這意味着OB可以根據統計資訊,計算每條SQL的最優通路路徑,給出最優的執行計劃。同時OB也可以根據使用者的需求,線上動态綁定固化執行計劃,針對應急、效率的場景可以很好的提供便捷性。在執行器方面,OB不僅僅支援Nest Loop的Join方式,同時也支援了Hash Join、Merge Join,針對大表join提高效率。還支援并發執行、分布式SQL等等。
五、OceanBase的AACID特性
OceanBase是一個分布式的關系型資料庫,符合ACID原則。在傳統ACID的基礎上,OceanBase特别強調多了一個A,可用性。基于Paxos協定的多副本日志複制,可以在單點故障的情況下提供無資料丢失的業務連續性。在一緻性上,OB采用MVCC的多版本一緻讀,當資料塊被更新時,OB會新開啟一個資料塊并帶上資料版本于事務id,隻有事務内的SQL可以通路到,未送出的資料不會被其他會話通路當。隔離性上,OB支援Oracle的送出讀和串行化兩種事務隔離級别,對Oracle做到了很好的相容。在持久性上,和大多數傳統資料庫一樣的日志先行,事務送出的時候先保證redo日志的寫成功後才寫資料,出現異常情況時不會存在資料二義性。
在資料安全上,OB也做了多種保護措施,最大程度的保障資料安全。比如資源回收筒機制,在租戶級别設定資源回收筒的開關,當資源回收筒打開的狀态下,drop table、truncate的情況下資料不會被立馬删除,而是進入了資源回收筒,在資源回收筒保留有效期内,都可以通過flashback的指令将表恢複原狀,極大程度上避免了誤操作帶來的一些風險。
針對delete、update這種資料修改類的操作,OB支援基于位點的Flashback Query來将資料恢複到某一個時間點,這樣針對業務或者運維過程中的錯誤SQL執行,具備資料找回能力。同時在Oracle租戶下,還支援as of timestam/scn這種查詢。
2019年10月,OceanBase斬獲TPC-C性能測試榜首。創造了tpmc6088萬的世界記錄,是前任榜首Oracle的2倍。同年十一月份,在支付寶的雙十一大促中又創造了6100萬筆/秒的支付峰值,再次打破世界記錄。經過多次極端業務的考驗,OceanBase證明,在性能、可靠性、可用性上,分布式資料庫是可以和集中式資料庫媲美的。傳統的商業資料庫,如oracle、SQL server、DB2都依賴高端的硬體裝置(小機,存儲,還有光纖網絡),但是OceanBase隻需要普通的PC伺服器,SSD盤、萬兆網絡就行。而且它還具有高存儲壓縮率。OceanBase上雲後,目前除了資料庫本身是按規格收費、遷移服務按小時收費外,其它管理平台(OCP、ODC、OTA)是免費的。通過OCP可以友善地管理叢集、租戶、資料庫。使用者,監控租戶和節點的性能。通過ODC可以友善地管理和維護資料庫對象(表/視圖/函數/存儲過程等)。使用其SQLConsole可以便捷地操作資料庫。通過OTA,可以及時發現目前業務庫存在問題的SQL,提供優化建議,綁定執行計劃。使用這些平台可以使運維操作白屏化,降低了運維難度。
未來,OceanBase将會根據使用者需求提供更多實用、高效的特性,同時周邊生态産品的功能也會越來越完善,敬請期待。
免費看直播并有好禮相送:
https://developer.aliyun.com/live/2284100%自研資料庫OceanBase正式對外開放,歡迎前來體驗:
https://www.aliyun.com/database/oceanbasept