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的榜首。性能
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規範的測試工具,須要將大量的人力和資源投入到產品研發和改進方面。「無論怎麼說,測試只是手段,作出更好的產品纔是目的。」蔣志勇說。
專攻測試工具的團隊很快組建起來,蔣志勇牽頭,成員人數一雙手就數得過來。
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委員會的承認。「心頭的一塊大石頭總算落了地。」蔣志勇鬆了口氣。各個羣裏一片歡騰,但這還只是路程中的第一塊里程碑。
「聚到一個項目裏,你們從肉體到心靈,都靠得更近了。」
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項目啓動的時候,陽老師說必定要作到世界第一,而後你們團結一致爲了這個目標去努力。」師文匯說,「螞蟻技術人一直在追求極致,不斷的用創新去突破當前技術的限制,這個在雙11、TPC-C測試以及平常的工做中都有所體現,好比想盡辦法去優化CPU的消耗、用各類方法下降RT時間。」
「比打破紀錄更重要的,是OceanBase爲這個行業打開了全新的可能性。」蔣志勇說,「假如按Oracle的路子走,Oracle就是頂峯了,但OceanBase用分佈式的方式去作這件事,取得了一個新的紀錄,讓市場和客戶有了新的選擇。」
以這個世界第一爲契機,平時不太接觸技術領域的人,也開始瞭解中國自研的數據庫。「個人家人終於知道我是作什麼的了。」曹暉感慨說,「更讓我高興的是,他們已經開始給別人講什麼是數據庫了。」
楊傳輝把OceanBase登頂成功的報道轉到了朋友圈,他很快接到了母親的電話:「你朋友圈裏發的那個‘世界第一’是什麼?」七歲的女兒也興致盎然地來問他,他對孩子解釋說,這是一個跑得很快很快的東西。
但每一位工程師都清楚地知道,「跑得很快」只是一個優秀數據庫的必要條件,而非充分條件。
數據庫像個跑車。極限速度取決於發動機,但跑車不只僅只是一個發動機。OceanBase在TPC-C測試的成績,證實咱們在「發動機」性能方面達到了全球領先水平。可是數據庫的綜合能力方面,咱們還有很大的進步空間。
下一步,OceanBase還要開發更豐富的功能,提高複雜查詢的能力,在同一套引擎裏既支持OLTP又支持OLAP。此外還要基於上下游產業來營造一整套生態系統。這些就像是跑車的外觀、車內設施、配套服務等等,只有全都作好,才能打造出一款頂級跑車。
此外,螞蟻金服還決定將本身開發用於TPC-C測試的工具開源。這意味着TPC-C將變成一種「普惠」測試。「任何一家公司只要在阿里雲上租用資源,用這個開源工具跑測試,而後請審計人員來審計就能夠了。」楊傳輝說,「關鍵只在於,你的產品夠不夠好。」
2018雙十一中的OceanBase團隊
OceanBase用了九年將本身的產品打磨至此,但創造一個新紀錄並非它最終的目的。更重要的是,它爲中國自研的數據庫鋪平了一條道路。
《螞蟻金服OceanBase挑戰TPCC | 測試流程解析》經過這篇文章能夠了解到OceanBase如何作TPC-C測試。