支付寶OceanBase登頂TPC-C:無關比賽,只是在追求自我的極致

1年前OceanBase團隊開了個會,定了個小目標,接下來的一年中這羣工程師閉關攻堅。從掉頭髮到睡幾個小時就跳起來看郵件,更甚至有人天天焦慮地捧着手機等郵件。

1年後,螞蟻金服自研數據庫OceanBase登上TPC-C排行榜榜首,這一成績開創了多項世界先河:中國數據庫第一次登上TPC-C榜單;第1次基於公有云通用機型進行測試;分佈式無共享關係數據庫第1次通過審計並取得創紀錄成績。今天,我們走到幕後看成績背後的光榮與夢想,艱辛與淚水。

2010年,在全球OLTP數據庫權威測試TPC-C中,老牌數據庫巨頭Oracle取得了tpmC 3000多萬的成績,接近第二名IBM的3倍,堪稱“獨步武林”。此後的9年中,這一紀錄無人能破。

事情回到2011年,阿里巴巴內部一個數據庫團隊在備戰雙11時遇到了點麻煩,他們所支持的淘寶收藏夾業務只要流量一大就反覆宕機。大戰在即,團隊全員立刻匯合,緊急修改代碼。

今天看來這不過是個小問題,但在當時卻生死攸關。“要是解決不了這個問題,我們的項目就掛了。”

螞蟻金服研究員楊傳輝當時就站在負責修改代碼的工程師背後,一行一行給他review。他的身旁站着陽振坤——他們的Leader,也是這個數據庫項目的創始人。

他們的項目名叫OceanBase,第一次正式承接雙11流量時,這個數據庫還沒滿2歲,淘寶收藏夾是他們唯一支持的業務。

那一年誰也沒有想到,九年之後,OceanBase一舉超越Oracle,登上了TPC-C benchmark的榜首。

image.png

測試只是手段,做出更好的產品纔是目的

TPC-C是全球目前最具公信力的聯機交易處理(OLTP)數據庫的功能與性能結合的測試標準。簡而言之,一款商業數據庫想要向業界證明自身實力,TPC-C測試是一項硬指標。TPC-C的排行榜長期被Oracle、IBM等外國廠商佔據,從未出現過中國自研品牌的身影。

很高的測試門檻,把衆多廠商擋在門外。首先,TPC-C測試需要模擬真實的交易環境去運行,整個測試的工具,包括所有鏈路在內,都需要自己搭建,而且要嚴格按照TPC委員會發布的標準來做——一份100多頁的PDF,事無鉅細,全是英文。其次,交易數據庫性能的提升本身就是一件極爲困難的事,Oracle已經站在巔峯,想超越它談何容易。

“我們不是去年纔想起要跑TPC-C測試的,我們從2010年立項第一天就研究過這個指標。”楊傳輝說。但是他們也清楚地知道,拿着尚未成熟的產品去跑測試是白費功夫:“三四十名可能都拿不到。”

厚積薄發,這一“積”就是九年多。

2018年8月,螞蟻金服技術專家鄒銀超和OceanBase團隊一起開了個會。在這場爲籌備TPC-C測試而開的項目會上,楊傳輝定下了打榜“小目標”:超越Oracle的紀錄。

鄒銀超感到震驚。Oracle 3000多萬的紀錄已經保持了九年,無人可以撼動,OceanBase起步至今也才九年,對於數據庫來說還非常年輕,第一次衝擊TPC-C紀錄,就直接劍指數據庫王者Oracle。

“這個項目大概要做兩三年吧?”他當時如此揣測。

按照既有的經驗,兩三年時間都很緊張。螞蟻金服資深技術專家蔣志勇作爲OceanBase團隊的核心成員,在籌備的初期階段跟隨陽振坤先後拜訪了浪潮集團喬鑫總經理和清華大學陳文光教授,學習和了解TPC-C測試的相關流程。而爲了做出符合TPC-C規範的測試工具,需要將大量的人力和資源投入到產品研發和改進方面。“不管怎麼說,測試只是手段,做出更好的產品纔是目的。”蔣志勇說。

專攻測試工具的團隊很快組建起來,蔣志勇牽頭,成員人數一雙手就數得過來。

image.png
TPC-C項目北京團隊閉關攻堅

技術攻堅組也組建到位,北京一個團隊,杭州一個團隊,各佔一個項目室,開始閉關攻堅。

其他各個團隊都伸出了援手:硬件團隊、中間件團隊、阿里雲……DBA團隊和業務團隊也以極大的包容,在人手緊張資源不足的情況下,支持着OceanBase技術攻堅。

困難雖多,但開弓沒有回頭箭。“螞蟻的技術人是使命必達的。”正如DBA團隊的資深運維專家師文匯所言,定下了世界第一的目標之後,所有人都會團結一致,就會傾盡全力去戰鬥。“追求極致,沒有上限。”

“審計員都沒見過的新玩意兒”

TPC-C測試的流程中,非常重要的一環是審計員來現場審計,以確認測試的所有細節符合規範。審計員全世界只有三位,滿世界飛來飛去,日程緊張。

鄒銀超來自數據技術部,在項目中負責硬件選型、系統性能優化和測試方案評估,幾乎每天都要和審計員進行郵件溝通。因爲十多個小時的時差,他最常做的事就是凌晨把郵件發出去,睡幾個小時,然後跳起來看審計員有沒有回覆。

一開始的測試方案是基於物理機做的傳統方案。但到了2019年新年前後,策略發生了變化:準備使用阿里雲ECS虛擬機進行測試。

比起使用昂貴的專用設備,上雲意味着大幅度降低實際測試成本,以及優秀的可擴展性。OceanBase的這個方案,硬件成本僅佔18%,遠低於Oracle的硬件成本佔比,但是在公有云上做TPC-C測試,前所未有。

審計員對此表示出了強烈的興趣。分佈式數據庫來測TPC-C,OceanBase已經是第一家了,以如此大規模的集羣上雲測試,更是聞所未聞。

但是面對這樣一種全新的形式,審計員也很謹慎,每一個細節都“摳字眼”式地確認。“有時候我們所有測試都跑完了,審計員忽然指出‘這裏不合規’,就又得重頭來過。”回憶起艱辛的溝通過程,蔣志勇苦笑。

“來回溝通了三個月左右,因爲拿不準會測什麼和怎麼測,每一種測試方案都要準備和溝通。”鄒銀超說,“天天焦慮地捧着手機等郵件。”

更讓他們焦慮的事來了:到了2019年5月,整整一個星期,審計員沒有任何反饋。

陽振坤保持淡定:“再等兩天。”

兩天過去了,仍然杳無音信。團隊坐不住了,寫郵件過去詢問。這一次審計員回了一封極長的郵件,原來是因爲OceanBase的測試方案從未有人做過,而且規模特別龐大,審計員自己也沒把握,專程去了一趟TPC組織總部,把方案提交給TPC-C技術委員會開會討論。

討論的結果反饋到了陽振坤手中,他第一時間把消息發到了整個項目的每一個相關羣裏。“通過了!”測試方案最終獲得了TPC-C委員會的認可。“心頭的一塊大石頭總算落了地。”蔣志勇鬆了口氣。各個羣裏一片歡騰,但這還只是路程中的第一塊里程碑。

“大家像戰友一樣,把後背交給對方”

“聚到一個項目裏,大家從肉體到心靈,都靠得更近了。”

image.png
TPC-C項目杭州攻堅團隊

螞蟻金服技術專家曹暉是早期就加入TPC-C測試項目的成員之一,這一年多來,他最常感到的就是“時間不夠用”。物理機換成虛擬機,單機50%的性能差距很快顯現出來,如何在短時間內找到優化點提升性能,成爲團隊攻堅的重點任務。

杭州閉關室的牆上畫着一張性能表,每週更新,這條性能曲線也成爲團隊成員的“心情曲線”:“看着它像階梯一樣一步一步地走高,大家就非常高興,要是連續一段時間爬不上去,就要開始掉頭髮了。”曹暉笑着說。

掉頭髮的不僅僅是OceanBase的攻堅團隊。師文匯和DBA團隊也每天都在“發愁”穩定性和研發效能。螞蟻最核心的業務全部都運行在OceanBase上,穩定性絲毫不容有失,但大量人力和資源投入到TPC-C項目後,支持和維護日常業務的重擔都落到DBA團隊和業務團隊肩上,工作量激增。

“最緊張的是研發環境,如果出問題,很多業務開發都會受影響。”整整一個半月,DBA、交付、系統等團隊都在攜手應對這個問題,終於,風險排除了。

TPC-C測試的結果公佈後,陽振坤在羣裏向所有兄弟團隊表示感謝:“感謝大家對OceanBase的理解和寬容。”

想要取得任何重大成就,一個團隊的力量始終有限,但百川匯海,聚沙成塔。“一場仗,一顆心。”楊傳輝用這六個字總結這場舉全員之力的聯合作戰,師文匯的說法更熱血也更感性一些:“勝則舉杯同慶,敗則拼死相救。大家像戰友一樣,把後背交給對方。”

“從來沒見過這麼平穩的曲線”

7月底,性能攻堅告一段落,真正用於測試的大規模集羣由阿里雲準備到位,交到了項目團隊手中。曹暉被任命爲“操作員”,掌控兩百多臺ECS雲服務器。

意想不到的事又發生了。之前在小規模集羣上解決掉的問題,一上到大規模集羣,又一一暴露出來。“壓力不均勻,抖動很厲害,還出現了不少完全沒預料到的問題。”蔣志勇說,“而且這還只是一些基礎問題,把它們解決掉之後,還得把曲線跑得很平穩才行。”

按照TPC-C的要求,在測試取值的2小時之內,系統抖動不能超過2%。

而此時距離審計員前來杭州現場審計,時間僅剩兩週。

從拿到正式測試的大規模集羣開始,大家就開始連軸轉。曹暉天天在羣裏“釘”人,他盯着200多臺雲服務器的運行,只要發現問題,馬上“釘”到對應的同學,被“釘”的同學無論在杭州還是北京,第一時間抄起電腦就衝到閉關室。

阿里雲團隊也傾力配合,IaaS層的配置和性能的優化,問題一個一個地在他們的支持下被攻克。

“想法很簡單,就是往前衝。沒有退路,很多崗位連backup都沒有。”

沒有兩三年時間,只用了一年,OceanBase就迎來了TPC-C的最終大考。

8月6日,TPC-C審計員抵達杭州螞蟻金服總部。

“一邊很有信心,一邊又很緊張。”楊傳輝這樣形容當時的心情。信心來自於九年以來的積澱,他們自信已經具備了衝擊Oracle紀錄的實力;緊張來自於時間緊迫,最後針對大規模集羣的調試只有兩週,會不會有不可預知的問題發生?

測試工具啓動,OceanBase開始運行,預熱的時間中,審計員出去喝了杯咖啡。等他再回來時,性能曲線已經展示在了屏幕上——極其平穩,沒有絲毫抖動。

經驗豐富的審計員大爲驚歎,因爲從來沒有見過這麼平穩的曲線:“Very impressive!”

TPC-C的性能測試要求取值時段是2小時,OceanBase是8小時;TPC-C要求的抖動幅度是不超過2%,OceanBase是低於0.5%。

現場審計結果獲得審計員認可,接下來又經過了一個多月的調優,9月底,OceanBase跑出了Finalrun結果。凌晨4點,曹暉和鄒銀超把最終報告發給審計員。

10月2日一早,審計通過的結果出現在了TPC-C官網上——tpmC 6088萬,是Oracle紀錄的兩倍多,新的紀錄誕生了。

“那一刻真沒有感覺到特別興奮,反而覺得,這就是理所當然的。”蔣志勇說。

“技術男不會特別情緒化。而且,我們在2014年就已經興奮過了。”楊傳輝說。這位從頭看着OceanBase誕生和成長的工程師經歷過更多風浪,最情緒化的反應留在了當年OceanBase第一次承接核心支付業務成功的時刻,“寫代碼這件事,只要堅持得足夠長,肯定能做出來,但是就是需要堅持,這種堅持可能以十年二十年爲單位。到了真正做出來的時刻,就會覺得是理所當然的了。”

“不管是在做TPC-C還是日常工作中,我覺得螞蟻的技術人是使命必達的,在做一件事情或者確定一個目標以後,傾盡全力去戰鬥。就像TPC-C項目啓動的時候,陽老師說一定要做到世界第一,然後大家團結一致爲了這個目標去努力。”師文匯說,“螞蟻技術人一直在追求極致,不斷的用創新去突破當前技術的限制,這個在雙十一、TPC-C測試以及日常的工作中都有所體現,比如想盡辦法去優化CPU的消耗、用各種方法降低RT時間。”

“家人終於知道我是做什麼的了”

“比打破紀錄更重要的,是OceanBase爲這個行業打開了全新的可能性。”蔣志勇說,“假如按Oracle的路子走,Oracle就是頂峯了,但OceanBase用分佈式的方式去做這件事,取得了一個新的紀錄,讓市場和客戶有了新的選擇。”

以這個世界第一爲契機,平時不太接觸技術領域的人,也開始瞭解中國自研的數據庫。“我的家人終於知道我是做什麼的了。”曹暉感慨說,“更讓我高興的是,他們已經開始給別人講什麼是數據庫了。”

楊傳輝把OceanBase登頂成功的報道轉到了朋友圈,他很快接到了母親的電話:“你朋友圈裏發的那個‘世界第一’是什麼?”七歲的女兒也興致盎然地來問他,他對孩子解釋說,這是一個跑得很快很快的東西。

但每一位工程師都清楚地知道,“跑得很快”只是一個優秀數據庫的必要條件,而非充分條件。

數據庫像個跑車。極限速度取決於發動機,但跑車不僅僅只是一個發動機。OceanBase在TPC-C測試的成績,證明我們在“發動機”性能方面達到了全球領先水平。但是數據庫的綜合能力方面,我們還有很大的進步空間。

下一步,OceanBase還要開發更豐富的功能,提升複雜查詢的能力,在同一套引擎裏既支持OLTP又支持OLAP。此外還要基於上下游產業來營造一整套生態系統。這些就像是跑車的外觀、車內設施、配套服務等等,只有全都做好,才能打造出一款頂級跑車。

此外,螞蟻金服還決定將自己開發用於TPC-C測試的工具開源。這意味着TPC-C將變成一種“普惠”測試。“任何一家公司只要在阿里雲上租用資源,用這個開源工具跑測試,然後請審計人員來審計就可以了。”楊傳輝說,“關鍵只在於,你的產品夠不夠好。”

image.png
2018雙十一中的OceanBase團隊

OceanBase用了九年將自己的產品打磨至此,但創造一個新紀錄並不是它最終的目的。更重要的是,它爲中國自研的數據庫鋪平了一條道路。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章