大家好,我是OceanBase,截至2021年12月13日,我最新版本是3.1.1。通過官網(wǎng)地址可以下載,https://open.oceanbase.com/softwareCenter/community ,目前有社區(qū)版和企業(yè)版,兩者都是同樣的內(nèi)核處理引擎,但是商業(yè)版提供更多的功能服務和技術(shù)支持,保障你生產(chǎn)集群穩(wěn)定健康的運行,當然喜歡白嫖的同事可以使用社區(qū)版,免費的東西也很香。2021年6月1日,我正式開源,這次我是認真的,生態(tài)環(huán)境在大力建設,社區(qū)在布道解惑, 我們努力構(gòu)建開發(fā)者和用戶生態(tài)。我的目標是打造中國人的數(shù)據(jù)庫,事實上在阿里巴巴內(nèi)部,我們已經(jīng)成功把Oracle替代下來,在保障業(yè)務順利平滑的基礎上,而且運行得更快。既然這么好,為什么我不出來奉獻社會,發(fā)揮更大的價值空間。公司領導決定把我商業(yè)化、產(chǎn)品化,下面我把我的故事,我的前世今生和各位觀眾一一闡述。
2008年,信息業(yè)務的高速發(fā)展,集團感受巨大的威脅,集團對國外基礎設施的需求越來越多。終于發(fā)起轟轟烈烈的去IOE運動,我的庫生信仰很明確,那就是把Oracle取替下來。我的其中一個爸爸就是楊傳輝,為了我還寫一本書《大規(guī)模分布式存儲系統(tǒng)》 ,里面介紹單機數(shù)據(jù)庫的數(shù)據(jù)模型、事務與并發(fā)、故障恢復、存儲引擎、數(shù)據(jù)壓縮以及分布式數(shù)據(jù)庫的數(shù)據(jù)分布、數(shù)據(jù)復制、一致性、容錯性、可擴展性等工程特性,包括其它系統(tǒng)如分布式文件系統(tǒng)、分布式鍵值系統(tǒng) 、分布式列簇系統(tǒng)以及分布式數(shù)據(jù)相關(guān)代表作品的技術(shù)原理和架構(gòu)設計,調(diào)研對象有世界OLTP第一的spanner,以及OLAP的皇者vertica,還有數(shù)據(jù)分析領域的的長青樹Greeplum。我的爸爸媽媽生我的時候多少辛苦啊,那時我還不到1.0.0版本。在眾多位爸爸媽媽咬牙切齒,日夜奮斗的情況下,2011年8月底,我悄悄開源,當時開源力量不是很大,所以知道的人也比較少。既然我能夠開源見人,當然是已經(jīng)在集團關(guān)鍵核心業(yè)務穩(wěn)定運行的前提下。
雖然我開源了,但是我還沒有給大眾接受,因為我還有很多問題,尤其可用性和易運維性特別嚴重,只有阿里工程師才能操作使用這套數(shù)據(jù)庫,而且阿里工程師還要努力與研發(fā)工程師配合協(xié)調(diào)一致才能夠把這套數(shù)據(jù)庫系統(tǒng)穩(wěn)定下來。領導發(fā)話,這個不是世界的數(shù)據(jù)庫,這只是阿里的數(shù)據(jù)庫,嚴重違背設計我的初衷。我0.4的時候開源,但是接近1.0.0卻閉源,很大一個原因是架構(gòu)設計臃腫,普通工程師難以使用。當時我是由mergeServer、UpdateServer、RootServer、ChunkServer四大塊組成,架構(gòu)設計如下。

- 客戶端: 用戶使用OceanBase的方式和MySQL數(shù)據(jù)庫完全相同,支持 JDBC、C客戶端使用。基于MySQL數(shù)據(jù)庫開發(fā)的應用程序、工具能夠直拉遷移到OceanBase。
- RootServer: 管理集群所有的服務器,子表數(shù)據(jù)分布以及副本管理,RootServer一般為一主一備,主備之間數(shù)據(jù)強同步。
- UpdateServer: 存儲OceanBase系統(tǒng)的增量更新數(shù)據(jù)。UpdateServer一般為一主一備,主備之間可以配置不同的同步模式。部署時,UpdateServer進程和RootServer進程可以選擇共用物理服務器。
- ChunkServer:存儲OceanBase系統(tǒng)的基線數(shù)據(jù),基線數(shù)據(jù)一般 存儲兩分或者 三份,可配置。
- MergeServer: 接受并解析用戶的SQL請求,經(jīng)過詞法分析、語法分析、查詢優(yōu)化等一系列操作轉(zhuǎn)發(fā)給相應的我ChunkServer或者UpdateServer。如果請求的數(shù)據(jù)分布在多個ChunkServer上, MergeServer還要對多個ChunkServer返回的結(jié)果進行合并。客戶端和MergeServer之用原生的MySQL通信協(xié)議,MySQL客戶端可以直接訪問MergeServer。
如果要實現(xiàn)異地多機房方案,每個機房部署一個包括RootServer、MergeServer、ChunkServer以及UpdateServer的完賴OceanBase集群,每個集群由各自的RootServer負責數(shù)據(jù)劃分、負載均衡、集群服務器管理等操作,集群之間數(shù)據(jù)同步通過主集群的主UpdateServer往備集群同步增量更新操作日志實現(xiàn)。客戶端配置了多個集群的RootServer地址列表,使用者可以設置每個集群的流量分配比例,客戶端根據(jù)這個比例將讀寫操作發(fā)往不同的集群。
當時我非常膨脹,由于我支持雙十一的高峰流量和眾多產(chǎn)品線,我不僅性能好,還有異地容災等強大功能,有人稱我為水利工程的三峽大壩。
直到一天工程師帶我去見客戶,客戶的需求是一個小水庫。在方案演講時,工程師介紹,我們都可以做到,要把這里炸掉,那里填平,運輸十萬噸花崗石,二十萬噸鋼材,客戶面面相覷。
我才驚訝我這么多缺點,因為參考了vertica的存儲機制,我在讀寫上解耦分離,UpdateServer專門寫增量數(shù)據(jù),ChunkServer專門讀數(shù)據(jù),UpdateServer按策略把數(shù)據(jù)寫入到ChunkServer,UpdateServer有且只有一個存儲服務器,一個優(yōu)點是面對高并發(fā)的OLTP請求,OceanBase進行事務處理不需要跨行跨表,不需要進行任何分布式活動, 你不需要考慮 raft協(xié)義和paxios協(xié)議,不需要考慮兩階段提交,直接寫進去就完了。缺點是面向OceanBase的讀寫請求都必須經(jīng)過 UpdateServer,這個對UpdateServer提出更高的要求。為此,集團對UpdateServer進行了個性化定制軟硬件改造,在內(nèi)存操作、網(wǎng)絡運行、磁盤操作方面做了大量的優(yōu)化。大量的個性化使我變成了復雜的工程性作品,而不是簡單的產(chǎn)品性作品,無法進入客戶的心。
在深入了解民間疾苦后,我的爸爸媽媽決心在我回爐重造,不對公眾開放,卻有指向性對一些企業(yè)投入經(jīng)營試點,例如南京銀行、天津銀行等等,根據(jù)客戶的需求,產(chǎn)品更輕量級,架構(gòu)重新組織,更關(guān)心交易處理時數(shù)據(jù)的完整性和數(shù)據(jù)審核性。2019年10月2日,我在TPC-C測試中打破了Oracle保持的世界紀錄,以6088萬tpmC值的成績,成為首個登頂TPC-C榜單的中國數(shù)據(jù)庫。
這時侯我的架構(gòu)設計與以前大不一樣了,既追求力量性能,又追求平衡協(xié)調(diào)。如下。

淬火重鑄后,我由中心化架構(gòu)演變成去中心架構(gòu),過去分為紫白金青,各有所職,現(xiàn)在每個節(jié)點的角色都是平等的。我用上改良后的分布式一致性算法,由標準的兩階段(4次日志延心+2次RPC延遲)到OB兩階段(1次日志延遲+2次RPC延遲)。另外我使用了現(xiàn)在非常流行的LSM Tree作為存儲引擎保存數(shù)據(jù)的基本數(shù)據(jù)結(jié)構(gòu),LSM Tree更適合寫多讀少的應用場景。在LSM的基礎上,我額外開發(fā)了數(shù)據(jù)分發(fā)功能 ,當內(nèi)存中的數(shù)據(jù)合并到硬盤之前,我提前預先分發(fā)數(shù)據(jù)到硬盤上,這樣提高了性能。
我的主業(yè)依然是OLTP業(yè)務場景,畢竟我出身電子商務世家,在我埋首閉源不見世人的時候,我經(jīng)常與各個銀行打交道,了解它們的業(yè)務需求并滿足它們的需求。我也有一個副業(yè)OLAP,副業(yè)是為我的主業(yè)服務,為此我的存儲引擎打造就與orc一樣,先按行組織排列,再按列分組,這樣雖然不是100%的列式存儲,但是你們不要忘了,每個數(shù)據(jù)產(chǎn)品的列式引擎處理時都需要加載數(shù)據(jù),必須要ETL花費大量的時間。而我的數(shù)據(jù)是交易分析同位一體,這樣省掉了大量的時間。
這次我卷土重來,特別關(guān)注了開發(fā)者的使用體驗,畢竟我是為碼民服務,所以我加強了索引設計和分區(qū)設計。我有唯一索引、全局索引、本地索引,分區(qū)有我一級分區(qū)和二級分區(qū),索引細粒度劃分是讓你去指定的范圍去找還是整個集群去找,分區(qū)的細致劃分也是電商復雜業(yè)務的需求,某些查詢需要更精確的劃分。同時我們提供Oracle和Mysql的協(xié)議訪問,讓Oracle和Mysql的開發(fā)者可以輕易接入我們。
我最大的一個變化是去中心化,市面上去中心化的數(shù)據(jù)產(chǎn)品也不少,例 如Cassandra和ElasticSearch都是去中心化,他們都有不俗的性能。為什么 Cassandra會比hbase快,除了Cassandr副本一致性可協(xié)調(diào)策 略,Cassandr充分使用了每個節(jié)點的IO性能,而hbase的master節(jié)點很空閑。去中心化是對外說的,對內(nèi)部而某些節(jié)點上面有rootservice,這個就是管理節(jié)點,你不用提心,如果它宕掉了會自動選擇一個出來。去中心化仍然保留rootservice來做全局管理,如何保障rootservice的高可用性,我通過改良的分布性一致性算法和行業(yè)最出名的paxos保障這一點。paxos理論上可比raft、zap等難多了,我的爸爸媽媽非常刻苦才克服了這個難題。
我還有一個特性是資源管理,如何把硬件資源(cpu、內(nèi)存)分配到最需要數(shù)據(jù)上,如何實現(xiàn)不同租戶之間資源分配,我都已經(jīng)在數(shù)據(jù)庫層面實現(xiàn)了,相對其它廠商都是在云上或者應用層面實現(xiàn)的。我這個可是了不起的亮點,試想一下僧多了,我這碗小粥也可以按需分配,不至于某些人會餓死,某些人撐得太多。
我是100%獨立自主研發(fā),知名TiDB基于rocketsDB研發(fā)的,而GaussDB也是立足postgres9.2.4上,我不一定是他們之中最優(yōu)秀的,但可能是吃苦最多的,畢竟我從0開始,一開場我拿到手是一個sstable文件,這是啥玩意啊?裁判說你把它組成一個數(shù)據(jù)庫,憑什么他們都有選擇參考,我卻要從無到有開發(fā)一個DBMS,裁判叼著一根雪茄,說我的使命與眾不同,多年奮斗,我獲得的獎項如下。


下面我介紹一下我在螞蟻集團的內(nèi)部應用,首先是支付寶核心交易,支付寶最常用的模塊,如交易,支付,積分等業(yè)務的核心鏈路都運行在 OceanBase 上,日常每秒都有上萬筆交易,雙十一期間,每秒可以達到幾十萬筆交易。支付寶是典型的在線 OLTP 數(shù)據(jù)庫場景,支付寶對 OceanBase 所有核心特性進行了驗證,包括響應時間、處理速度、事務的完整性、并發(fā)量等,將 OceanBase 真正打磨成了金融級數(shù)據(jù)庫。從產(chǎn)品成熟度上來講,證明了 OceanBase 能夠承擔金融在線交易的場景。國內(nèi)其他的數(shù)據(jù)庫產(chǎn)品很少有機會能夠在這么大的場景下,進行實實在在的打磨。第二個應用收藏夾是典型的“寫少讀多”場景(一次寫入、多次讀取),峰值的數(shù)據(jù)讀取請求量達到數(shù)百萬次/秒;而且,由于淘寶巨大的活躍用戶體量,這些讀請求要訪問幾個數(shù)據(jù)量很大的表才能拿到所需數(shù)據(jù),其中最大的表保存了數(shù)千億條記錄。OceanBase 數(shù)據(jù)庫借助完備的分布式事務能力、完備的 SQL 引擎、優(yōu)異的性能以及線性水平擴展等能力,很好地解決了海量數(shù)據(jù)下的在線、高并發(fā)、低延時查詢等等需求,為數(shù)億淘寶用戶提供了良好的使用體驗。
2013年斯諾登事件,2018年孟晚舟事件,老外靠不住,國貨當自強,敢做領頭羊,我是OceanBase,我是中國人打造的數(shù)據(jù)庫,從復雜工程級走到簡單產(chǎn)品級,以后我會努力走下去,走入千萬家,謝謝大家。




