【CSDN 編者按】誰能想到,一個本科和碩士都在鉆研數(shù)學(xué)的人,會在后來做出世界上第一款原生分布式數(shù)據(jù)庫?在2010年以前,陽振坤自己也想不到會有一天和數(shù)據(jù)庫建立如此密切的關(guān)系,更想不到,往后十年是他職業(yè)生涯中非常艱難的十年。
作者 | 田瑋靖? ? ? ?
出品 | 《新程序員》編輯部
“如果進(jìn)不去,我們就錯過了支付寶‘去O’的機會,那么OceanBase再也沒有機會了?!?/p>
面對采訪鏡頭,陽振坤淡然地訴說著那場生死之戰(zhàn)。而他口中的OceanBase數(shù)據(jù)庫,是從出生就不被看好的“孩子”,曾幾度站在生死邊緣。
不做工程,紙上談兵
生于1965年的陽振坤,不能完全說他和大多數(shù)人一樣。一樣的是小升初、初升高的學(xué)習(xí)軌跡,不一樣的是,他在1984年考上了北京大學(xué)。20世紀(jì)80年代,大學(xué)有多難考?據(jù)歷年高考數(shù)據(jù)統(tǒng)計顯示,1984年參加高考的人數(shù)為164萬,錄取人數(shù)為48萬人,錄取率29%。表面看,錄取率不低,實則僅約占同齡人的0.0179(據(jù)歷年出生人口數(shù)據(jù),1965年出生人口為2679萬人)。相當(dāng)于100個人里,只有1個人能考上大學(xué),在那個大多數(shù)人只能維持溫飽的年代,又有很多人因為交不起學(xué)費而放棄學(xué)業(yè)。因此,能夠上高中已是“百里挑一”,考上大學(xué)更是被稱為“天之驕子”。
在本科和碩士研究生期間,陽振坤不僅鉆研數(shù)學(xué),也學(xué)習(xí)了很多計算機的基礎(chǔ)課程,研二參與了北大計算機研究所的項目研發(fā)。興趣使然,他在博士研究生期間,選擇了計算機方向。畢業(yè)后留校任教,并被破格提升為副教授、教授,時年32歲。
事業(yè)順風(fēng)順?biāo)H,陽振坤選擇離開學(xué)術(shù)界,進(jìn)入產(chǎn)業(yè)界?;蛟S是受其博士導(dǎo)師王選院士(中國科學(xué)院院士,中國工程院院士,計算機漢字激光照排技術(shù)創(chuàng)始人)的影響,陽振坤覺得“不做工程,等于紙上談兵”。其先后任職于聯(lián)想研究院 、微軟亞洲研究院、百度等。?
到此為止,陽振坤的前45年,都跟數(shù)據(jù)庫搭不上邊。
做一個“大飛機”
彼時的百度、阿里巴巴、騰訊(俗稱“BAT”)這三大互聯(lián)網(wǎng)巨頭,只有阿里巴巴(以下簡稱阿里)看好云計算。陽振坤作為云計算方面的專家,是阿里急需的高端人才。在阿里合伙人劉振飛的邀請下,陽振坤于2010年 5月12日加盟淘寶網(wǎng)。從淘寶網(wǎng)的內(nèi)部任命郵件中,足以見得其對陽振坤的愛重:“陽博士是我們期待已久的人才,在系統(tǒng)設(shè)計和實現(xiàn)、海量信息處理、算法設(shè)計等諸多方面都有著非常豐富的經(jīng)驗。深信陽博士和團(tuán)隊通力合作,一定能為淘寶網(wǎng)打造一個高性能、高可靠、低成本、面向大流量大規(guī)模電子商務(wù)的專用計算平臺,為支撐‘十億消費者,十萬億交易額’提供所需要的基礎(chǔ)技術(shù)?!?/p>
可他偏偏放著似錦前程,選擇了一條最艱難的路——自研分布式數(shù)據(jù)庫。
其實,早在微軟亞洲研究院工作時,陽振坤結(jié)識了如今的阿里云創(chuàng)始人王堅,并接觸了分布式系統(tǒng),二人都非??春梅植际较到y(tǒng)。進(jìn)入淘寶之前,陽振坤在家待了一個月,期間就在思考下一步要做事情。用他的話說,“當(dāng)時有一個大致的思考,到淘寶也不確定能不能做這件事,但是有機會?!?/p>
彼時,集中式數(shù)據(jù)庫獨霸天下,代表產(chǎn)品如美國甲骨文公司的Oracle數(shù)據(jù)庫,更是獨領(lǐng)國際市場,阿里便是其在中國最大的客戶。而互聯(lián)網(wǎng)的廣泛商用、云計算、大數(shù)據(jù)、物聯(lián)網(wǎng)、區(qū)塊鏈、人工智能等技術(shù)的興起,加速了移動互聯(lián)網(wǎng)的到來。在人與人更便捷的互聯(lián)互通、社會更加智能化的背后,是對業(yè)務(wù)系統(tǒng)越來越頻繁的并發(fā)訪問、越來越龐大的數(shù)據(jù)處理量。集中式數(shù)據(jù)庫昂貴的成本及其存儲和計算極為有限的擴(kuò)展能力都顯得捉襟見肘。
集中式數(shù)據(jù)庫的本質(zhì)是單機數(shù)據(jù)庫,在互聯(lián)網(wǎng)日均流量上百億破千億的環(huán)境下,單機數(shù)據(jù)庫的存儲能力都極其有限,更談不上如何分析、處理數(shù)據(jù)。受限于分布式數(shù)據(jù)庫更加復(fù)雜、故障定位更加困難、分布式事務(wù)性能有所降低、系統(tǒng)成熟度有所不足等因素,傳統(tǒng)數(shù)據(jù)庫廠商選擇了“分庫分表+中間件”的解決方案,即基于集中式數(shù)據(jù)庫,對業(yè)務(wù)進(jìn)行較大幅度地改造和拆解、拆分,使每個拆解、拆分后的部分適合于單個集中式數(shù)據(jù)庫,這就是分庫分表數(shù)據(jù)庫。這種方式其實是把原來在一個數(shù)據(jù)庫中的大業(yè)務(wù)拆分為多份小業(yè)務(wù),陽振坤稱之為“沒有大飛機,就分成多份,用小飛機來運”,但如果是重裝備、重武器如坦克大炮,小飛機裝都裝不下。因此,這終究不是徹底解決問題的辦法,而且面臨高額的成本和繁雜的運維。
陽振坤意識到“機會來了!”于是立項,“方向和目標(biāo)是明確的”。盡管分布式聯(lián)機事務(wù)處理的開發(fā)非常復(fù)雜和困難;盡管分布式數(shù)據(jù)庫在SQL優(yōu)化器、存儲架構(gòu)等方面門檻極高;盡管這個分布式數(shù)據(jù)庫需要長時間的、大量的實際場景打磨;盡管分布式架構(gòu)與關(guān)系型數(shù)據(jù)庫結(jié)合,沒有任何可參考的先人經(jīng)驗,
“我們要做一個大飛機,不管你有多大的業(yè)務(wù)量,都能用分布式數(shù)據(jù)庫這個大飛機給你運走”。當(dāng)系統(tǒng)容量不受限制的時候,一定能做更多的事情。這是陽振坤當(dāng)時唯一確定的事——價值。
陽振坤的做事方式是“把事情想清楚再做,做到哪算哪就麻煩大了”,只確定目標(biāo),如何行動依然是問題。好在做分布式數(shù)據(jù)庫需要哪些功能,其實不用發(fā)愁,有現(xiàn)成的如MySQL、Oracle等成熟的開源和商業(yè)數(shù)據(jù)庫,功能早就定義好了。也就是說,創(chuàng)建分布式的環(huán)境,用多臺機器,參考成熟數(shù)據(jù)庫已有的功能列表,實現(xiàn)分布式數(shù)據(jù)庫。
但對于數(shù)據(jù)庫這種基礎(chǔ)軟件而言,尤其是與傳統(tǒng)集中式數(shù)據(jù)庫架構(gòu)完全不同的、新型的分布式數(shù)據(jù)庫,絕不是把架構(gòu)搭建好、代碼寫出來就能應(yīng)用在業(yè)務(wù)中的。而是得從一個個具體的業(yè)務(wù)開始,針對它做基礎(chǔ)功能,滿足其基本業(yè)務(wù)需求,然后一步一步將數(shù)據(jù)庫做大、做強。因此,只有找到業(yè)務(wù)需求帶來的機會,切入進(jìn)去,并且落地,就有機會活下來。
一定要“活下來”
說起來容易,做起來難,陽振坤要做的分布式數(shù)據(jù)庫,是個“難產(chǎn)兒”,根本找不到業(yè)務(wù)。
好在當(dāng)時出任OceanBase項目負(fù)責(zé)人的楚材是淘寶老人,他帶著陽振坤走遍了淘寶各個業(yè)務(wù)技術(shù)團(tuán)隊,幾天后,終于在淘寶收藏夾這個業(yè)務(wù)團(tuán)隊找到一絲的機會。
為什么淘寶收藏夾愿意試水?“收藏夾是一個比較特殊的需求,到現(xiàn)在為止,我們也不知道有什么更好的方案能解決它的問題?!笔詹貖A給淘寶用戶提供的服務(wù)是,一個人可以收藏上百條、上千條自己感興趣的商品,商品的信息變化如降價、下架等都需要及時更新,以便用戶掌握商品動態(tài)。每次用戶打開收藏夾,后臺系統(tǒng)都要查詢數(shù)據(jù)庫成百上千次,獲取每個商品的最新信息,這對于數(shù)據(jù)庫來說,相當(dāng)于幾百萬、幾千萬的人在讀取數(shù)據(jù),再乘百千次的讀次數(shù)。如此高頻的數(shù)據(jù)處理量,幾乎沒有什么數(shù)據(jù)庫能夠扛得住,經(jīng)常被用戶投訴“沒反應(yīng)”“打不開”。
“我們做了一個比較特殊的架構(gòu),后來發(fā)現(xiàn)這個架構(gòu)有非常大的價值”,陽振坤欣喜地說道。簡單來講,商品信息修改不會直接寫進(jìn)硬盤,而是暫存在內(nèi)存中,每次用戶收藏夾展示的時候,只需要從內(nèi)存中獲得修改后的商品信息。相當(dāng)于將收藏夾原來的成百上千次I/O(輸入/輸出)變成了一次I/O,原計劃需要擴(kuò)容至數(shù)百臺機器,現(xiàn)在也只需20多臺機器就能解決問題。這極大地減少了機器數(shù)量,降低了成本,增強了業(yè)務(wù)穩(wěn)定性,初步證明了OceanBase的生存價值。
然而,好景不長,在2011年收藏夾上線之后,整個2012年OceanBase都沒有找到第二個價值如此顯著的業(yè)務(wù)。陽振坤直言“2012年真有點做不下去了?!?/p>
因此,2012年的唯一目標(biāo)就是,活下來。
頂著團(tuán)隊隨時可能解散的壓力,陽振坤找到時任阿里巴巴首席架構(gòu)師的王堅,吐露難處。而后經(jīng)王堅推薦,在2012年11月15日,OceanBase團(tuán)隊從淘寶調(diào)到支付寶。因為支付寶業(yè)務(wù)是跟錢打交道,對數(shù)據(jù)的一致性要求更高,所以希望在支付寶業(yè)務(wù)找到機會。陽振坤知道“如果在支付寶再找不到機會,就完蛋了?!?在“人生地不熟”的新團(tuán)隊,他們一邊熟悉人,一邊摸索生的機會。
幸運的是,OceanBase團(tuán)隊遇到了一位開明的領(lǐng)導(dǎo)人,時任支付寶技術(shù)負(fù)責(zé)人的程立(花名魯肅,現(xiàn)任阿里集團(tuán)CTO),他對新技術(shù)持鼓勵、支持的態(tài)度。恰逢七、八月份的時候,支付寶開始討論怎樣“去O”,即替換Oracle數(shù)據(jù)庫(早在2009年,阿里巴巴就提出了“去O”)。但面臨的極大難點在于,如果不用Oracle數(shù)據(jù)庫,不用共享存儲,選擇類似MySQL這樣單機數(shù)據(jù)庫,數(shù)據(jù)丟了怎么辦?在金融領(lǐng)域,這是無法接受的后果。而繼續(xù)使用Oracle數(shù)據(jù)庫,對于業(yè)務(wù)數(shù)據(jù)量、數(shù)據(jù)并發(fā)量都巨大的阿里業(yè)務(wù),所要付出的軟、硬件成本是無法估量的高昂。
陽振坤胸有成竹地說“我們有辦法解決這個事”。這個辦法就是如今被廣泛應(yīng)用的三副本,每一筆事務(wù)在3個節(jié)點或者5個節(jié)點上同時做,超過半數(shù)成功即認(rèn)為成功。舉個例子,三臺機器中壞掉一臺機器,剩下兩臺機器至少有一臺機器的數(shù)據(jù)是正確的,以此方法解決替換Oracle的核心問題,即放棄共享存儲之后數(shù)據(jù)損壞、丟失的問題。
OceanBase 0.5版本由此誕生,也為OceanBase開辟了一條生路。
但陽振坤明白,這只是給了OceanBase一個證明自己的機會。從提出解決方案,到0.5版本正式發(fā)布,用了7個月左右的時間。另一邊,業(yè)務(wù)團(tuán)隊卻很難一下子接受OceanBase數(shù)據(jù)庫。首先,這個版本沒有經(jīng)過其它業(yè)務(wù)的驗證就應(yīng)用到核心業(yè)務(wù),是否可行?讓OceanBase數(shù)據(jù)庫支撐支付寶的交易庫,處理交易流水?dāng)?shù)據(jù),業(yè)務(wù)團(tuán)隊很難放心。其次,OceanBase技術(shù)方案要求三個機房,需要在原有的主、備機房的基礎(chǔ)上,再增加一個機房,而當(dāng)時除了杭州,阿里和支付寶在其他城市都沒有三個或以上的機房。
為此,雙方幾次三番激烈地爭論。對于OceanBase數(shù)據(jù)庫來講,這是一個生死之戰(zhàn),如果不抓住這次落地機會,不僅是錯過支付寶“去O”的歷史性機會這么簡單,而是OceanBase數(shù)據(jù)庫再也沒有機會了。所以O(shè)ceanBase團(tuán)隊當(dāng)然是極力爭取,另一邊,業(yè)務(wù)團(tuán)隊也保持非常謹(jǐn)慎的態(tài)度,雙方僵持不下。
最后還是魯肅出面說服業(yè)務(wù)團(tuán)隊,便有了OceanBase數(shù)據(jù)庫分流1%的機會,如果出問題,1%的流量會被隨時切走。回想此事,陽振坤的態(tài)度是“我們的運氣不錯”。2014年“雙11”前,大抵是9月底或10月初,業(yè)務(wù)團(tuán)隊開始為“雙11”的支撐做壓測,由于流量非常大,已經(jīng)超出Oracle數(shù)據(jù)庫的預(yù)定容量,超出系統(tǒng)的I/O能力,系統(tǒng)大量報錯。
由于時間緊張,臨時買設(shè)備,手提肩扛服務(wù)器再次擴(kuò)容已經(jīng)來不及。業(yè)務(wù)團(tuán)隊想起壓測時支撐1%流量的OceanBase數(shù)據(jù)庫,找到陽振坤說“給你們10%的流量能不能撐得???”O(jiān)ceanBase團(tuán)隊當(dāng)然高興了:“別說10%,就是100%都可以支撐得下來”。甚至在“雙11”當(dāng)晚的作戰(zhàn)室,面對時任螞蟻金服CEO彭蕾(現(xiàn)任螞蟻集團(tuán)董事長)的擔(dān)憂,陽振坤說出了不成功就跳窗的玩笑話。
結(jié)果很順利,這一戰(zhàn)也基本確定了OceanBase數(shù)據(jù)庫在支付寶的地位。用OceanBase數(shù)據(jù)庫替代Oracle數(shù)據(jù)庫之后,單副本數(shù)據(jù)可以做到原來的1/7,其計算資源投入也降低為原來的1/12,僅存儲一項,就比Oracle數(shù)據(jù)庫節(jié)省了約20億元,相當(dāng)于每賬戶成本節(jié)省了90%。
此后的路便順風(fēng)順?biāo)?015年替換Oracle數(shù)據(jù)庫支撐支付寶的支付系統(tǒng);2016年OceanBase 1.0版本發(fā)布,由原來的半分布式數(shù)據(jù)庫升級為真正的分布式數(shù)據(jù)庫,并于同年替換Oracle數(shù)據(jù)庫支撐支付寶的賬務(wù)系統(tǒng),實現(xiàn)了螞蟻集團(tuán)的“去O”目標(biāo);2017年走出螞蟻集團(tuán),對外商用。
而在對外商用之前,陽振坤要回答一個很關(guān)鍵的問題:別人為什么一定要用OceanBase數(shù)據(jù)庫?
正如前文所述,大飛機比小飛機有價值,但如果別人有小飛機就夠用了,憑什么花費工夫替換一個大飛機?
利益是永恒不變的,對于一個初出茅廬的新事物,只有提供足夠的價值,才能生存。目前絕大部分的數(shù)據(jù)庫產(chǎn)品分為交易系統(tǒng)和分析系統(tǒng),兩套系統(tǒng)的體量和成本都是巨大的。在業(yè)務(wù)場景中,兩套系統(tǒng)往往也會有延遲。如果用一套數(shù)據(jù)庫,既做交易處理,又做分析處理,就能解決成本和實時同步的問題。陽振坤非常確定,“如果這件事情做成了,極有可能是對整個行業(yè)的顛覆,而且這件事情肯定可以做成?!边@便是后來引發(fā)行業(yè)熱議的HTAP(Hybrid Transactional and Analytical Process,一體化事務(wù)和分析處理)。
未來取決于此
都說不被看好的孩子反而更有出息,2019年,OceanBase數(shù)據(jù)庫打破Oracle數(shù)據(jù)庫保持了9年的TPC-C(在線事務(wù)處理基準(zhǔn)測試)世界紀(jì)錄,成為中國首個登頂該榜單的中國數(shù)據(jù)庫產(chǎn)品;2020年,OceanBase數(shù)據(jù)庫再次創(chuàng)下7.07億TPC-C的性能記錄,牢牢占據(jù)了榜首位置;2021年以1526萬QphH的性能打破TPC-H(數(shù)據(jù)分析型基準(zhǔn)測試)世界紀(jì)錄(目前排名第二);同年OceanBase數(shù)據(jù)庫在螞蟻集團(tuán)的支持下,宣布成立北京奧星貝斯科技有限公司,并再次開源。
為什么是“再次開源”?早在2011年,OceanBase 0.2版本就已開源,但在0.4版本后,OceanBase數(shù)據(jù)庫開源中斷了更新。這是因為從當(dāng)時螞蟻集團(tuán)的視角看,OceanBase數(shù)據(jù)庫主要是支撐螞蟻集團(tuán)內(nèi)部的業(yè)務(wù),為淘寶、天貓、支付寶等業(yè)務(wù)服務(wù),OceanBase團(tuán)隊忙于“活下來”而無暇開源事務(wù),所以2013年后, OceanBase數(shù)據(jù)庫開源停止了更新。直到2021年,擺脫所有顧慮的OceanBase更加堅定地?fù)肀ч_源,將存儲引擎、SQL引擎、分布式引擎、分布式事務(wù)、多副本、高性能、擴(kuò)展能力、優(yōu)化器、故障恢復(fù)、多活容災(zāi)等核心技術(shù)及代碼對外開源分享。?
面對業(yè)界對其開源動機的聲聲質(zhì)疑,陽振坤在《曾被“霸凌”的兩個孩子:電動汽車與分布式數(shù)據(jù)庫》一文中,引用《硅谷鋼鐵俠》這本書中對馬斯克開放特斯拉專利的描述,借喻OceanBase開源系統(tǒng)核心的原因?!爱?dāng)馬斯克在2014年宣布特斯拉將公開其所有專利時,分析師們試圖確定他是不是在作秀或者其中是否隱藏了不明動機或者圈套。但馬斯克的決定就是這么坦率,他希望人們制造并購買電動車。馬斯克認(rèn)為,人類的未來取決于此。如果公開特斯拉的專利意味著其他公司能夠更容易地制造出電動車,那么這對人類來說是有利的,這些理念應(yīng)該是免費的。憤世嫉俗的人一定會嘲笑他的觀點,但馬斯克已經(jīng)計劃好這么做,他在解釋自己的想法時是真誠的,而且極為真誠?!?/p>
顯然,陽振坤認(rèn)為,原生分布式數(shù)據(jù)庫是數(shù)據(jù)庫發(fā)展的必然選擇,數(shù)據(jù)實時處理的未來取決于此。陽振坤也希望出現(xiàn)更多真正的分布式數(shù)據(jù)庫產(chǎn)品,這從國產(chǎn)數(shù)據(jù)庫的角度,有望實現(xiàn)“去IOE”,讓更多中國數(shù)據(jù)庫走向國際市場,站在更高的角度,這對數(shù)據(jù)庫生態(tài)的發(fā)展和科技的進(jìn)步是有利的。
尾聲
如今,OceanBase數(shù)據(jù)庫已積累400多個外部企業(yè)客戶,涵蓋銀行、證券、能源、電力、社保等眾多重要行業(yè),且沒有一家企業(yè)后悔使用OceanBase,想換掉它,即便OceanBase用一套系統(tǒng)進(jìn)行交易和分析處理的功能還在走向成熟。
陽振坤實現(xiàn)了他多年的目標(biāo)——做一款真正的分布式數(shù)據(jù)庫。
當(dāng)被問到職業(yè)生涯中,做OceanBase數(shù)據(jù)庫是不是最難熬的,以及團(tuán)隊面臨解散是否想過放棄時,陽振坤的回答讓我們看到了他的堅韌?!笆潜容^難熬,很多時候,你不能把握自己的命運,你知道一件事情是對的,但你想讓其他人相信它,是很難的。所以做OceanBase數(shù)據(jù)庫的過程中,我認(rèn)準(zhǔn)一點,只要這個項目沒有被‘槍斃’,咱就做,放棄也沒好處對吧?如果有一天被‘槍斃’了,咱也沒招對吧?反正只要能做下去,我們就做下去。”
陽振坤,OceanBase分布式關(guān)系數(shù)據(jù)庫創(chuàng)始人,畢業(yè)于北京大學(xué)數(shù)學(xué)系和計算機系并獲得本科碩士和博士學(xué)位后留校,先后破格晉升副教授和教授,1999年成為首批長江學(xué)者。曾獲得國家科技進(jìn)步一等獎(排名第四),北京市科技進(jìn)步一等獎,第六屆中國青年科技獎,第一屆中國科協(xié)求是杰出青年獎,北京市五四青年獎等,并有20多項第一發(fā)明人的發(fā)明專利。
本文為《新程序員004》內(nèi)容,與OceanBase創(chuàng)始人陽振坤暢談他的程序人生?!缎鲁绦騿T004》即將上市,敬請期待。從MySQL之父、MariaDB創(chuàng)始人 Michael "Monty" Widenius,到PostgreSQL全球開發(fā)組聯(lián)合創(chuàng)始人Bruce Momjian、阿里巴巴副總裁賈揚清、指令集創(chuàng)始人兼 CEO潘愛民、著名科技作者吳軍,再到 Vue.js 作者尤雨溪……《新程序員004》以「我們的技術(shù)時代,我的程序人生」為主題,與多位國內(nèi)外知名的技術(shù)先鋒和新生代程序員代表進(jìn)行了深度對話,希望行業(yè)優(yōu)秀人物的技術(shù)之路與人生感悟給大家?guī)韱l(fā)。
《新程序員001-004》全面上市,對話世界級大師,報道中國IT行業(yè)創(chuàng)新創(chuàng)造
— 推薦閱讀 —
?稱釘釘將上線“下班勿擾”功能;蘋果發(fā)生大規(guī)模網(wǎng)絡(luò)宕機;.NET 7 Preview 2發(fā)布|極客頭條?速度是 macOS 的兩倍?首個支持 M1 Mac 的 Linux 發(fā)行版終于出現(xiàn)!?Secure DevOps!探真科技2022云原生安全產(chǎn)品發(fā)布會圓滿落幕
一鍵三連 「分享」「點贊」「在看」
成就一億技術(shù)人
關(guān)鍵詞: 紙上談兵