中國有35項被“卡脖子”的技術?對不起,數據庫已經不是了_風聞
科工力量-观察者网原创视频栏目-欢迎关注“科工力量”微博、微信公众号2020-12-10 10:34
// 作者 | 陳辰
1997年1月27日,在北京機場跑道上,國賓車隊一字排開、閃着大燈。對於如此高規格迎接,甲骨文創始人拉里·埃裏森似乎仍無動於衷。他的專機艙門打開後,一直都沒人出來。
埃裏森有個不良嗜好,喜歡人等,越多人等他,他就越不出現。20分鐘後,飛機上跳下來一個身穿防彈衣的黑人保鏢。他對車隊説:“所有的車門全部打開,我要檢查有沒有炸彈。”
這讓時任甲骨文中國總裁馮星君很頭疼。他的脾氣同樣霸道,但一邊是美國大老闆,一邊是國賓車隊,都不好惹。鑑於職責所在,馮星君不得不委曲求全。
第二天,埃裏森要到長城拍攝推廣網絡計算機的電視宣傳片,吩咐馮星君找來20個小學生參與拍攝。雙方約好早上8點開拍,但直到9點,埃裏森還沒起牀。
當天的北京氣温零下二十多度,小學生們在沒有暖氣的大巴上苦等。馮星君帶着哭腔給埃裏森電話,“那些小孩要凍死了”。埃裏森這才勉強答應啓程,然後在一個多小時後終於現身。
Oracle時期的馮星君
但去了沒多久,埃裏森就讓副手打電話給馮星君説:“老闆很喜歡長城,玩得挺高興,中午就不回來了,你取消下午3點跟李鵬的會面吧。”
一聽這話,馮星君差點暈過去。他急忙説,“下午的會面不是開玩笑的,如果2點鐘看不見埃裏森,我就辭職。我走了,這個責任我擔不起。”
由於還是有所懼怕,埃裏森一行匆匆趕回人民大會堂。但或許沒有在社會主義國家見過世面,黑人保鏢執意跟着進去保護老闆,被攔截後吵鬧得不可開交。
不難發現,埃裏森有恃無恐背後,是當時國內金融、電信、航空等數據庫服務全面依賴甲骨文:哪怕你討厭我,但不能不用我。這就是剛性、卡脖子產品的力量。
而同期國產數據庫在蹣跚起步中緩慢發展,幾乎從未對甲骨文構成實質性挑戰。這一局面直到十餘年後,在電商及雲計算發展湧動中才有所改變。
01
危機
2010年,甲骨文在TPC-C測試中跑出3024萬的成績,是一起參與測試的IBM3倍。此後,被吊打的IBM再無還手之力,而孤獨求敗的甲骨文不再參與成本高昂的TPC-C測試。
雖然提起數據庫,人們幾乎很想到甲骨文。但IBM才是數據庫技術的鼻祖。早在1976年,IBM科學家科德博士發表了一篇題為《大型共享數據庫的關係數據模型》論文,奠定了現代數據庫的理論基礎。
然而,限於當時的計算機水平,IBM認為這種數據庫沒有商業價值,於是把論文當成一篇收穫名聲的學術研究,沒有將其形成產品推向市場。但隨後,美國中情局看上了數據庫的重大戰略意義。
埃裏森(右一)
既然IBM不接單,中情局只好求助於民間高手,然後盯上了埃裏森和他的初創公司SDL(甲骨文前身)。這位落魄程序員,森研讀了IBM的那篇論文,認為這是難得的機會,從此開啓了自己的傳奇人生。
隨後的幾十年中,甲骨文並不缺少挑戰者,IBM和微軟紛紛都加入了數據庫市場競爭,推出了DB2、Microsoft SQL Server等產品,但一直難以撼動甲骨文Oracle數據庫的霸主地位。
歷史的轉折同樣在2010年埋下種子。隨着淘寶網的電商業務席捲中國大地,不斷井噴的用户數據讓阿里成為甲骨文最大的亞洲客户,同時也挑戰着Oracle數據庫能力極限。
2010年是淘寶“雙11”啓動第二年,當天23時59分30秒。眼看“雙11”就要結束,支付寶核心賬務系統突然報警,數據庫資源即將耗盡。當技術人員砍掉最後一個非關鍵應用的時候,距離整個系統崩潰只剩下4秒。
另外,Oracle的標配是IBM小型機和EMC的存儲硬件。一台小型機就要500萬,兩台小型機就要配一個300萬的EMC存儲。阿里算了筆賬,未來採購這些軟件和設備的費用,甚至會超過公司的全部利潤。
於是,時任阿里巴巴集團首席架構師王堅積極推動“去IOE”計劃。所謂“去IOE”計劃,即以廉價PC服務器替代IBM小型機,以基於開源的自研數據庫替代Oracle數據庫,同時不再用EMC高端存儲設備。
具體而言,王堅提出的“基於開源的自研數據庫”,是指以當時流行的國外開源數據庫MySQL為基礎自行改造。這是中國軟件行業最常見的自主化路徑。
在淘寶把數據庫拆分後,很多子數據庫都換成了MySQL數據庫,只有少部分最核心的數據仍然跑在Oracle上。而這條道路後來衍生出的AliSQL,比原版MySQL有70%的性能提升。但有人認為還有更好的路子。
02
進擊
為了推進“去IOE”計劃,2010年,王堅邀請45歲的百度高級科學家陽振坤,從北京辭職南下杭州。畢業於北大數學系的陽振坤,曾是王堅在微軟亞洲研究的同事。而他來到阿里的新工作,便是研發一款數據庫。
在微軟亞洲亞洲研究院時,陽振坤幾乎天天和王堅“吵架”,但是他們在內心裏卻有一個大共識——分佈式系統才是這個世界的終極未來。於是,陽振坤選擇了開發一種全新的分佈式數據庫。
陽振坤
事實證明,這個選擇是明智的,因為不久後Oracle就收購了MySQL,然後宣佈不再完全開源。這意味着,阿里的數據庫還是無法逃離甲骨文的掌心,或者核心技術仍受制於人。
那麼,分佈式數據庫是什麼?它是指區別於Oracle等傳統的集中式數據庫,不再將數據儲存在一台服務器上,而是直接運行在雲上。這個設想最初是由谷歌在2006年提出,是一個前所未有的“革命性”變化。
通常而言,一個合格的數據庫,必須滿足“ACID”特性。簡單地理解,當A給B轉賬100元錢時,要想賬頭一分錢都不錯,數據庫必須做到四個特性:
原子性(Atomicity):A的賬户減少100元,B的賬户增加100元,這兩件必須同時發生,像原子一樣不可分割。一致性(Consistency):轉賬之後,A和B的賬户總和必須跟轉賬前一致。
隔離性(Isolation):A和B之間的轉賬,不影響其它任何賬户。
持久性(Durability):轉賬記錄必須永久存在和有效,即使發生斷電等故障也不能消失。
對比來看,甲骨文、IBM等傳統數據庫,被稱為集中式數據庫,運行在單一的服務器上,可以保證一個任務要麼都發生、要麼都不發生,從而能最大程度上保證ACID特性。
但對於分佈式數據庫來説,如果A、B兩個賬户處在不同的機器上,其中一台機器出現故障,另一台卻在繼續執行任務,原子性和一致性就沒法保證了。
在2010年前,這是一條從未有人成功過的道路,能保證 ACID 的分佈式數據庫根本就不存在。阿里方面深知其難度之大,相當於指揮整個幼兒園的熊孩子,整齊劃一地左手畫龍右手畫彩虹胸口比心。
於是,阿里集團技術負責人吳泳銘告訴陽振坤:“陽老師,我可以給你兩年的時間來證明它是可行的。”但陽振坤呵呵一笑:“用不了。”但後來的事實“教育”了他。
03
戰役
由於當時淘寶的數據庫已經拆分,換上的MySQL又基本運行平穩。因此,沒人想用,也沒人敢用分佈式數據庫。雖然陽振坤要處理的問題有千千萬,但這是最主要的一個。
於是,他拿着自己的PPT在淘寶各個業務線奔走宣傳,像極了在極力養家餬口的“大齡推銷員”。後來總算有一個團隊願意吃螃蟹,就是淘寶裏的一個小版塊——收藏夾。
收藏夾團隊之所以敢這麼做,並不是因為他們看好分佈式數據庫,而是有實實在在的“難言之隱”,即在不斷增大的數據處理壓力下,團隊壯膽申請的400台服務器數量也不一定夠。
陽振坤畫了個大餅,説採用分佈式技術,收藏夾團隊用現有的機器,就能輕鬆應對再多100倍的數據量。結果團隊的同學一激動,給了陽老師一個月的時間,把吹出去的牛逼實現。
但陽振坤硬是弄了八個月,才把分佈式數據庫的底座寫了出來交貨,然後經受住了2011年“雙11”的考驗。團隊給這個數據庫取了個名,OceanBase 0.1,Ocean寓意“星辰大海”,而0.1代表只完成了一點點。
眼看“兩年之約”就到了,整個2012年,陽振坤的時間主要都花在向其它部門推銷產品,但卻幾乎都無功而返。由於分佈式數據庫還沒能充分證明自己,陽振坤心急如焚的找上王堅。
一個重大的轉折點發生在2012年11月15日。力挺陽振坤的王堅,把OceanBase團隊所有人員從淘寶調入支付寶,打算直接用在離錢更近、對ACID要求更高的支付寶上。
而陽振坤解決ACID問題的方法,主要是靠增加備份,將三套OceanBase綁定在一起運行,其中包括一個主庫和兩個備庫。只有當至少一個備庫也完成任務時,主庫才會完成這個任務,能極大降低事故概率。
不過,這個理論看上去簡單,能否在數以億計的交易中保證不出錯,仍受到上下廣泛質疑。2014年5月,OceanBase 三副本版號升級為 0.5,但卻沒有業務團隊再敢吃螃蟹。
內心的煎熬,以及看到團隊失望的眼神,陽振坤忍不住給螞蟻金服管理層發了一封請求郵件。最終,2014年的“雙11”,支付寶決定將1%的流水交給OceanBase承擔,剩下的99%仍使用Oracle。
但意外的是,在臨近“雙11”的壓力測試中,Oracle數據庫居然屢次崩潰,只有將數據量降低到90%才能穩定運行。於是OceanBase的承擔比例,幸運而又沉重的被上調到10%。
當年11月10日晚,螞蟻金服CEO彭蕾專門來到OceanBase的作戰室,問陽振坤:“陽老師有信心嗎?”陽振坤指指窗户,平靜地説“不成功我們就跳下去。後來,OceanBase果然成功了。
2015年,陽振坤團隊獲得螞蟻金服最重磅的獎項——SUPER MA。
04
登頂
2016年,在解決“投票”和“監督”相關機制問題後,一個真正的分佈式數據庫OceanBase 1.0橫空出世。至此,陽振坤跑了六年的馬拉松,看到了第一個里程碑。
第二年底,螞蟻金服核心系統中的最後一個Oracle數據庫被OceanBase替代。另外,阿里巴巴主導的銀行網商銀行,以及幾十家金融機構陸續成為OceanBase的用户。
但在要把OceanBase做到“無限大”目標下,這個數量顯然比陽振坤的預想中要少。他專門跑去問很多銀行的技術領導:“你們不放心國產OceanBase,又為什麼放心美國的Oracle呢?”
銀行的領導説説:“你去查查跑分啊,Oracle是第一名,你OceanBase第幾名啊?都沒有在榜單上。”銀行説的“跑分”,正是TPC-C,會對數據庫很多方面的性能進行測試,而最主要的是針對在線交易數據庫的性能測試。
想當年,Oracle在測試中是以三倍於IBM的姿勢奪魁。如今OceanBase能不能跑出 Oracle 三倍呢?陽振坤的結論是:不能三倍,可以十倍。分佈式一定可以超越集中式數據庫十倍,甚至百倍,這是數學原理決定的。
但由於領導們有點擔心步子邁的太大,於是批覆將跑分控制在Oracle得分的兩倍就行。在項目正式立項後,中國公司以及分佈式數據庫參加 TPC-C 測試,都是史上第一次。
至於測試用的硬件,因為 TPC-C 沒有特別限制,陽振坤選擇租用阿里雲。此後,210台虛擬主機齊裝列陣組成地基,使“分佈式數據庫”彪悍的跑在“分佈式計算上”。
2019年8月,測試正式開始,TPC-C 的審計師特地從美國趕來杭州記錄測試過程。兩個月後,測試結果出爐:螞蟻金服60880800分,正好是Oracle 30249688的兩倍。
然而,陽振坤某種程度也是“技術完美主義者”。“既然説了要超越 Oracle十倍,就要説到做到。”2020年,OceanBase團隊又馬不停蹄地開始,籌備第二次測試。
這次1560台虛擬主機在阿里雲中列陣,堪稱人類史上最大的分佈式數據庫。不過,第二次測試的過程恰逢全球疫情,TPC-C 的審計師們也被迫通過網絡遠程監控OceanBase的數據。
經過漫長等待,2020年5月19日,跑分結果出爐:707351007。火力全開的OceanBase,逆天跑出了自己上一次分數的11.6倍,更是將Oracle創造的紀錄秒成渣渣,超越了23倍。
05
尾聲
OceanBase 團隊,從最初的一個人,到0.1版本時的20人,到1.0時的50人,到2.0時的100人,再到如今所有人都在為 3.0 加班加點。十年難言順遂,但大多數人都未離隊。
做出中國人自己的數據意義非凡。有人曾提問:“你是不是一開始就想造出國產可控的數據庫?”陽振坤斬釘截鐵的回答,“沒有,我只是想做出來心中那個完美的分佈式數據庫。”
對於堅持不懈的理由,陽振坤説,“集中式數據庫的技術已經走到了盡頭,我絲毫不懷疑在未來會有幾家公司打破分佈式數據庫的技術瓶頸。不過,目前我們是世界上唯一的那個…”
今年11月30日,在2020年中國聯通科技創新大會上,中國科學院大學公管學院副院長、中國科學與科技政策研究會常務理事教授劉雲,再次列舉了的35項被“卡脖子”的關鍵技術。
比如光刻機,芯片,操作系統,手機射頻器件,激光雷達,核心工業軟件及數據庫等。但在數據庫領域,OceanBase已爬上歷史舞台,或許35項“卡脖子”技術可以減少一項。
然而,在阿里以外,美國數據庫積威猶在,特別是在對數據庫要求最高的金融、電信等領域。早在上世紀90年代,國內就逐漸形成了Oracle壟斷電信行業,IBM壟斷金融行業的格局。
2013年的稜鏡門事件,讓中國政府意識到使用美國數據庫的巨大安全風險,全力推進去IOE化,但一直進展緩慢,很多大型銀行的核心業務仍然在使用IBM DB2系統。
2019年國內傳統關係型數據庫市場佔比
截至2019年,國外廠商仍佔據我國數據庫市場80%以上份額。在主流的關係型數據庫市場中,Oracle、IBM、Microsoft、SAP四家廠商共佔六成,其中Oracle佔比達34.7%。
由於數據庫是一個需要下游配套的複雜系統,Oracle多年來大舉收購了ERP等下游行業公司,建立起完整的生態系統。而各種辦公系統都各自依託Oracle、IBM開發,相互無法兼容。
因此,OceanBase等國產數據庫面臨的最大挑戰,大抵就是在技術破局後,如何搭建自己的生態系統。在歷史進程中,企業的自身努力固然重要,但有時選對立場才是決定性因素。
目前,雲計算已經走在了時代前沿,任何有互聯網野心的企業,都在紛紛轉投分佈式。在美國,亞馬遜、谷歌等數據庫新玩家,正在憑藉分佈式數據庫瘋狂侵吞甲骨文的地盤。
在國內,阿里、騰訊等互聯網企業,如今已全面進軍數據庫基礎技術領域。它們在激烈的市場競爭中廝殺,用豐厚的利潤為科研輸血,正為中國蹚出一條更高效的數據庫破局之路。