蚂蚁金服自研分布式关系数据库OceanBase上线阿里云
OceanBase于2020年3月在阿里云上完成了商業(yè)化,在公有云上正式對(duì)外開放。同步上線的還有相關(guān)的生態(tài)產(chǎn)品,包括集群管控(OCP:OceanBase Cloud Platform),診斷(OTA:OceanBase Tunning Advisor),遷移服務(wù)(OMS:OceanBase Migration Service)及開發(fā)者中心(ODC:OceanBase Developer Center)。
一、公共云OceanBase服務(wù)端部署
螞蟻金服自研分布式關(guān)系數(shù)據(jù)庫OceanBase是一款純?cè)姆植际疥P(guān)系數(shù)據(jù)庫,在代碼層面完全可控。公共云OceanBase產(chǎn)品(圖1-1)是基于三份副本3AZ部署,通過paxos協(xié)議保證了多節(jié)點(diǎn)間的數(shù)據(jù)一致性,單點(diǎn)故障甚至單AZ故障,也可以保障業(yè)務(wù)連續(xù)性,RPO=0,RTO<30s,做到機(jī)房級(jí)高可用,未來還將推出三地五中心的產(chǎn)品形態(tài),具備城市級(jí)高可用切換能力。同時(shí),OceanBase的資源管理具有非常高的靈活性。它支持多租戶部署,在OceanBase集群里面,我們可以按需分配實(shí)例,并且可以進(jìn)行在線資源擴(kuò)容或者縮容。
從安全性和可用性來講,OceanBase是非常適合金融業(yè)務(wù)場(chǎng)景的。因?yàn)楸O(jiān)管需求,金融業(yè)務(wù)場(chǎng)景(像銀行業(yè)務(wù)等)不能上公有云。但是這并不影響類金融業(yè)務(wù),像保險(xiǎn)、基金等。
?
?
圖1-1
二、OceanBase架構(gòu)原理
與大多數(shù)分布式系統(tǒng)不同的地方在于,OceanBase這個(gè)系統(tǒng)沒有單獨(dú)的總控服務(wù)器或者總控進(jìn)程。分布式系統(tǒng)一般包含一個(gè)單獨(dú)的總控進(jìn)程,用來做全局管理、負(fù)載均衡,等等。OceanBase沒有單獨(dú)的總控進(jìn)程,它的總控是一個(gè)服務(wù),叫做RootService,集成在ObServer里面。OceanBase會(huì)從所有的工作機(jī)中動(dòng)態(tài)地選出一臺(tái)ObServer執(zhí)行總控服務(wù),另外,當(dāng)總控服務(wù)所在的ObServer出現(xiàn)故障時(shí),系統(tǒng)會(huì)自動(dòng)選舉一臺(tái)新的ObServer提供總控服務(wù)。這種方式的好處在于簡化部署,雖然實(shí)現(xiàn)很復(fù)雜,但是大大降低了使用成本。
OceanBase通過分區(qū)能力做到無限水平擴(kuò)展(圖1-2)。OceanBase跟傳統(tǒng)數(shù)據(jù)庫分區(qū)不一樣的地方,在于傳統(tǒng)數(shù)據(jù)庫所有的分區(qū)只能在一臺(tái)服務(wù)器,而OceanBase每個(gè)分區(qū)可以分布到不同的服務(wù)器,每個(gè)分區(qū)都有三副本。從數(shù)據(jù)模型的角度看,OceanBase可以被認(rèn)為是傳統(tǒng)的數(shù)據(jù)庫分區(qū)表在多機(jī)的實(shí)現(xiàn)。它可以把不同的用戶生成的數(shù)據(jù)全部融合到統(tǒng)一的表里面。無論這些分區(qū)在多臺(tái)服務(wù)器上是如何分布的,整個(gè)系統(tǒng)對(duì)用戶呈現(xiàn)的都是一張表,后臺(tái)實(shí)現(xiàn)對(duì)用戶完全透明。OceanBase在用戶入口使用了OBProxy,它是一個(gè)訪問代理,它會(huì)根據(jù)用戶請(qǐng)求的數(shù)據(jù)將請(qǐng)求轉(zhuǎn)發(fā)到合適的服務(wù)器。ObProxy的最大的亮點(diǎn)在于性能突出,它可以在非常一般的普通服務(wù)器上達(dá)到每秒百萬級(jí)的處理能力。
?
?
圖1-2
如圖1-2,多個(gè)分區(qū)分布在多臺(tái)服務(wù)器上。由于多個(gè)分區(qū)跨ObServer,內(nèi)部通過兩階段提交實(shí)現(xiàn)分布式事務(wù)。當(dāng)然,兩階段提交協(xié)議性能較差,OceanBase內(nèi)部做了很多優(yōu)化。它提出了分區(qū)組的概念,會(huì)把多個(gè)經(jīng)常一起訪問,或者說訪問模式比較類似的不同表的分區(qū)放到一個(gè)分區(qū)組里面。OB后臺(tái)會(huì)將同一個(gè)分區(qū)組盡可能調(diào)度到一臺(tái)服務(wù)器上,避免分布式事務(wù)。同時(shí)優(yōu)化了兩階段提交協(xié)議的內(nèi)部實(shí)現(xiàn)。兩階段提交協(xié)議涉及多臺(tái)服務(wù)器,協(xié)議中包含協(xié)調(diào)者、參與者這兩種角色,參與者維護(hù)了每臺(tái)服務(wù)器的局部狀態(tài),協(xié)調(diào)者維護(hù)了分布式事務(wù)的全局狀態(tài)。常見的做法是對(duì)協(xié)調(diào)者記日志來持久化分布式事務(wù)的全局狀態(tài),而OceanBase的做法是,如果出現(xiàn)故障,通過查詢所有參與者的狀態(tài)來恢復(fù)分布式事務(wù)。這種方式節(jié)省了協(xié)調(diào)者日志,而且只要所有的參與者都預(yù)提交成功,整個(gè)事務(wù)就成功了,不需要等協(xié)調(diào)者寫日志就可以應(yīng)答客戶端。
三、OceanBase存儲(chǔ)架構(gòu)
OceanBase是一個(gè)shared noting的架構(gòu),每一個(gè)OBServer都有獨(dú)立的存儲(chǔ)引擎,將數(shù)據(jù)保存在本地,這樣可以滿足容災(zāi)場(chǎng)景下的數(shù)據(jù)連續(xù)服務(wù)。OceanBase采用LSM-Tree的架構(gòu)來設(shè)計(jì)Cache和數(shù)據(jù)存儲(chǔ),數(shù)據(jù)首先被寫入內(nèi)存中的MemTable當(dāng)中,這樣最高頻和最活躍的數(shù)據(jù)都在內(nèi)存訪問,極大的提升了熱數(shù)據(jù)的訪問效率。當(dāng)MemTable的寫入到達(dá)一個(gè)閾值的時(shí)候,MemTable中的數(shù)據(jù)會(huì)做一次合并,將數(shù)據(jù)轉(zhuǎn)到磁盤的SSTable中。在很多基于LSM Tree的存儲(chǔ)系統(tǒng)中,為了解決寫入的性能問題,通常會(huì)將SSTable分為多層,當(dāng)一層的SSTable個(gè)數(shù)或者大小達(dá)到某個(gè)閾值時(shí),合并入下一層SSTable。
?
?
圖1-3
在OceanBase內(nèi)部,也會(huì)有很多種不同類型的Cache,有類似于Oracle和MySQL的buffer。cache用于緩存sstable數(shù)據(jù)的塊緩存,還有用于緩存數(shù)據(jù)行的行緩存、日志緩存、位置緩存等等?;€數(shù)據(jù)緩存到內(nèi)存中提升查詢性能。對(duì)于不同租戶,每個(gè)租戶都有自己獨(dú)立的緩存,可以配置對(duì)應(yīng)租戶內(nèi)存使用的上下限,做到租戶隔離或者搶占超賣,適用于不同需求的場(chǎng)景。
在存儲(chǔ)成本上,OceanBase采用了多種數(shù)據(jù)壓縮算法,例如lz4、zstd等。OceanBase會(huì)對(duì)數(shù)據(jù)集做兩層瘦身,第一層是encoding,會(huì)使用字典、RLE等算法對(duì)數(shù)據(jù)做瘦身,第二層是通用壓縮,使用lz4等壓縮算法對(duì)encoding之后的數(shù)據(jù)再做一次瘦身。在zstd算法下,相較傳統(tǒng)MySQL Innodb的壓縮,可以做到相同數(shù)據(jù)集只是用MySQL的1/3的存儲(chǔ),幫助用戶極大的節(jié)省存儲(chǔ)成本。更重要的是,傳統(tǒng)數(shù)據(jù)庫定長頁的設(shè)計(jì)壓縮不可避免的會(huì)造成存儲(chǔ)的空洞,壓縮效率會(huì)受影響,而OB這樣的LSM-tree架構(gòu)的存儲(chǔ)系統(tǒng),壓縮對(duì)數(shù)據(jù)寫入性能是0影響的。
四、OceanBase SQL引擎
OceanBase的租戶支持Oracle和MySQL兩種SQL兼容性,首先相較于傳統(tǒng)MySQL,OB除了硬解析以外,與Oracle一樣支持軟解析,同時(shí)解析器還支持SQL參數(shù)化以及綁定變量,如圖1-4所示,解析器將解析后的SQL模板以及執(zhí)行計(jì)劃放在plan cache中,已經(jīng)存在plan cache中的SQL就可以省去每一次硬解析帶來的開銷,提升了SQL運(yùn)行效率。
?
?
圖1-4
基于LSM-Tree的存儲(chǔ)架構(gòu),OB設(shè)計(jì)了一套獨(dú)特的代價(jià)模型,引入統(tǒng)計(jì)信息,擁有了基于代碼模型的優(yōu)化器,這意味著OB可以根據(jù)統(tǒng)計(jì)信息,計(jì)算每條SQL的最優(yōu)訪問路徑,給出最優(yōu)的執(zhí)行計(jì)劃。同時(shí)OB也可以根據(jù)用戶的需求,在線動(dòng)態(tài)綁定固化執(zhí)行計(jì)劃,針對(duì)應(yīng)急、效率的場(chǎng)景可以很好的提供便捷性。在執(zhí)行器方面,OB不僅僅支持Nest Loop的Join方式,同時(shí)也支持了Hash Join、Merge Join,針對(duì)大表join提高效率。還支持并發(fā)執(zhí)行、分布式SQL等等。
五、OceanBase的AACID特性
OceanBase是一個(gè)分布式的關(guān)系型數(shù)據(jù)庫,符合ACID原則。在傳統(tǒng)ACID的基礎(chǔ)上,OceanBase特別強(qiáng)調(diào)多了一個(gè)A,可用性?;赑axos協(xié)議的多副本日志復(fù)制,可以在單點(diǎn)故障的情況下提供無數(shù)據(jù)丟失的業(yè)務(wù)連續(xù)性。在一致性上,OB采用MVCC的多版本一致讀,當(dāng)數(shù)據(jù)塊被更新時(shí),OB會(huì)新開啟一個(gè)數(shù)據(jù)塊并帶上數(shù)據(jù)版本于事務(wù)id,只有事務(wù)內(nèi)的SQL可以訪問到,未提交的數(shù)據(jù)不會(huì)被其他會(huì)話訪問當(dāng)。隔離性上,OB支持Oracle的提交讀和串行化兩種事務(wù)隔離級(jí)別,對(duì)Oracle做到了很好的兼容。在持久性上,和大多數(shù)傳統(tǒng)數(shù)據(jù)庫一樣的日志先行,事務(wù)提交的時(shí)候先保證redo日志的寫成功后才寫數(shù)據(jù),出現(xiàn)異常情況時(shí)不會(huì)存在數(shù)據(jù)二義性。
在數(shù)據(jù)安全上,OB也做了多種保護(hù)措施,最大程度的保障數(shù)據(jù)安全。比如回收站機(jī)制,在租戶級(jí)別設(shè)置回收站的開關(guān),當(dāng)回收站打開的狀態(tài)下,drop table、truncate的情況下數(shù)據(jù)不會(huì)被立馬刪除,而是進(jìn)入了回收站,在回收站保留有效期內(nèi),都可以通過flashback的命令將表恢復(fù)原狀,極大程度上避免了誤操作帶來的一些風(fēng)險(xiǎn)。
針對(duì)delete、update這種數(shù)據(jù)修改類的操作,OB支持基于位點(diǎn)的Flashback Query來將數(shù)據(jù)恢復(fù)到某一個(gè)時(shí)間點(diǎn),這樣針對(duì)業(yè)務(wù)或者運(yùn)維過程中的錯(cuò)誤SQL執(zhí)行,具備數(shù)據(jù)找回能力。同時(shí)在Oracle租戶下,還支持as of timestam/scn這種查詢。
2019年10月,OceanBase斬獲TPC-C性能測(cè)試榜首。創(chuàng)造了tpmc6088萬的世界記錄,是前任榜首Oracle的2倍。同年十一月份,在支付寶的雙十一大促中又創(chuàng)造了6100萬筆/秒的支付峰值,再次打破世界記錄。經(jīng)過多次極端業(yè)務(wù)的考驗(yàn),OceanBase證明,在性能、可靠性、可用性上,分布式數(shù)據(jù)庫是可以和集中式數(shù)據(jù)庫媲美的。傳統(tǒng)的商業(yè)數(shù)據(jù)庫,如oracle、SQL server、DB2都依賴高端的硬件設(shè)備(小機(jī),存儲(chǔ),還有光纖網(wǎng)絡(luò)),但是OceanBase只需要普通的PC服務(wù)器,SSD盤、萬兆網(wǎng)絡(luò)就行。而且它還具有高存儲(chǔ)壓縮率。OceanBase上云后,目前除了數(shù)據(jù)庫本身是按規(guī)格收費(fèi)、遷移服務(wù)按小時(shí)收費(fèi)外,其它管理平臺(tái)(OCP、ODC、OTA)是免費(fèi)的。通過OCP可以方便地管理集群、租戶、數(shù)據(jù)庫。用戶,監(jiān)控租戶和節(jié)點(diǎn)的性能。通過ODC可以方便地管理和維護(hù)數(shù)據(jù)庫對(duì)象(表/視圖/函數(shù)/存儲(chǔ)過程等)。使用其SQLConsole可以便捷地操作數(shù)據(jù)庫。通過OTA,可以及時(shí)發(fā)現(xiàn)當(dāng)前業(yè)務(wù)庫存在問題的SQL,提供優(yōu)化建議,綁定執(zhí)行計(jì)劃。使用這些平臺(tái)可以使運(yùn)維操作白屏化,降低了運(yùn)維難度。
未來,OceanBase將會(huì)根據(jù)用戶需求提供更多實(shí)用、高效的特性,同時(shí)周邊生態(tài)產(chǎn)品的功能也會(huì)越來越完善,敬請(qǐng)期待。
免費(fèi)看直播并有好禮相送:https://yq.aliyun.com/live/2301
100%自研數(shù)據(jù)庫OceanBase正式對(duì)外開放,歡迎前來體驗(yàn):?https://www.aliyun.com/database/oceanbasept
原文鏈接
本文為云棲社區(qū)原創(chuàng)內(nèi)容,未經(jīng)允許不得轉(zhuǎn)載。
總結(jié)
以上是生活随笔為你收集整理的蚂蚁金服自研分布式关系数据库OceanBase上线阿里云的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 友盟+联合EB级云数据 实现友盟域和企业
- 下一篇: 入门云数据库Redis,满足你的高读写性