支付寶如何處理巨大的交易量?這離不開由數百人研發出的分布式資料庫。相比於傳統的集中式資料庫,它有著獨一無二的優點,在效能榜單上也遙遙領先…
出品:格致論道講壇
以下內容為OceanBase資料庫創始人、首席科學家陽振坤
演講實錄:
大家好,我是來自OceanBase資料庫的陽振坤,很高興能跟大家介紹我們在資料庫方面做的一些工作。
我很幸運,上大學的時候來到了北京大學,並且遇到了王選院士。我跟著王老師先做實習生,後來跟著他讀博士,再之後留在北京大學電腦研究所,繼續跟著王老師工作,從事電腦漢字雷射照排技術的研究。

這張照片右手邊的第二個人是王老師,王老師背後角落裏的那個人就是我。那時候的我比今天胖很多。

這張照片是我們的工作獲得了北京市科技進步獎一等獎。這個獎的大部份工作其實是我在博士期間跟著王老師做的,博士生的工作毫無疑問是在導師的指導下完成的。而且當時我在這個領域研究的時間還比較短,很多具體的方法、演算法上也都是王老師手把手教出來的。但是,王老師仍然把我的名字放在了第一位。
不僅如此,我覺得這些年我跟王老師學到了一個更重要的東西,就是要「技術頂天,市場立地」。
我決定做OceanBase資料庫的時候,也是這兩句話在指導著我。
到了2002年,當時互聯網的發展已經非常迅速了,對社會的影響也逐漸擴大。於是我選擇了離開,離開科研機構,離開北大。我想到互聯網一線看一看,看一看互聯網一線的工作和學校裏的工作有哪些差別。

離開了北大之後,我先到了聯想的研究院,後來到了微軟的研究院做了一些工作。幸運的是,這兩段經歷讓我有機會開始做分布式系統的工作,為我後來選擇分布式資料庫奠定了基礎。
到了2010年年初,我離開上一家公司,接受了淘寶的offer。在去淘寶報到之前,我提了一個要求,希望他們給我一個月的時間。這一個月時間幹什麽呢?我希望休息休息,想一想我自己去了淘寶之後能做什麽、要做什麽?什麽事情能夠發揮我的價值呢?
我是一個做軟體開發的人,淘寶的業務系統我肯定也能做。但是我覺得,這不是我最大的長項,我最大的長項還是底層系統。於是在那時候,我就看到了資料庫這個機會。
為什麽要做資料庫?
已完成:10% /
/////////
在講接下來內容之前,我先簡單地跟大家介紹一下究竟什麽是資料庫。雖然我們每天都在和資料庫打交道,但只有很少的人會直接使用資料庫。因為當我們用訂票軟體、用網購APP的時候,見到的是業務系統,其實這些業務系統都需要跟資料庫打交道。

就像我們在買火車票的時候,因為可能同時有很多的人在買這個日期、這趟車次的車票,那如何保證這張座的票只賣給了一個人呢?只能依靠資料庫。
包括網上購物,假如衣服只有3件庫存,你要是能賣4件,那系統肯定是有問題的。誰來保證這件衣服最多只能賣出去3件呢?資料庫。

資料庫是當今資訊社會的基石,也是市場價值非常大的產品。在2023年,全球的資料庫的市場規模超過了1000億美元。美國大概占了其中的50%,其次是歐洲,之後就是咱們中國。這麽大的一個市場,競爭對手也一定非常強大。
而且資料庫還有一個很好的特征,就是它跟語言文化或者地域無關,是全球通用的,所以贏者通吃
。大家可能會說,我們有地理資訊的資料庫、有醫藥的資料庫呀?但這些都是資料庫的套用,是資料庫裏的數據,而資料庫系統本身其實跟這些東西無關。

那今天世界上資料庫業務做得最好的是誰呢?Oracle,也就是甲骨文,而且甲骨文也是所有資料庫裏面真正賺大錢的。其他的資料庫要麽賺一點小錢,要麽就是在溫飽線掙紮地活著。
還有一個很優秀的資料庫MySQL,它也是甲骨文這家公司的,它是個開源的資料庫。
那既然已經有了開源的、免費的資料庫,為什麽還要用一個新的還要花錢的資料庫呢?這些都是我們做資料庫之前需要考慮和解決的問題。
但是我覺得,15年前開始做資料庫,對於我們來說是趕上了一個非常好的機會。這也是我說服公司當時相關領導人來做這個決策的重要原因。因為在一家互聯網公司裏,做一個長遠的計畫是一個很大的挑戰。當時我的老板就是今天阿裏集團的CEO吳泳銘,最終我說服了他,他也願意支持我們做這個計畫。

我跟他講到了要做這個計畫的幾個原因。第一個原因「天時」,傳統的資料庫是集中式的,需要用高端硬體,因為它們的可靠性要很高。在互聯網到來之後,數據量、存取量已經有了幾百倍幾千倍的增長。在這種情況下繼續使用這種高可靠性的高端硬體,成本是讓人難以接受的。這就導致了集中式資料庫這條路很難走下去。適合這個大數據時代的資料庫,一定是分布式的。

第二個原因「地利」,我們從阿裏的雙11的數據就能看得到。從2009年第一次雙11開始,那時候大概做了5000多萬的業務。到了10年以後的2019年,業務量為2600多億,出現了幾千倍的增長。
整個阿裏先有淘寶,後來有了天貓,還有支付寶,這些業務系統都是構建在資料庫之上的。那我們的資料庫就有了機會在這些業務系統上成長、成熟起來。所以說,電子商務在中國的井噴式發展,特別是在淘寶和支付寶上的發展,給了我們一個特別好的做資料庫的機會。

第三個原因是「人和」。其實這也是這個計畫最大的爭議之一,因為當時的我並沒有資料庫的背景。大家說,你一個沒有資料庫背景的人怎麽能做一個這麽難的計畫?我們國家也罷、全世界也罷,當時已經有十幾年沒有出現過新的資料庫產品了。憑什麽要讓一個不懂資料庫的人來做資料庫呢?
我的理由是,資料庫在集中式這條路上,技術上已經走到了盡頭,它一定會往分布式方向走。
分布式資料庫還沒有人做過,因為它有很多的困難。而我自己最近這些年做的就是分布式的工作。
但是,資料庫發展了這麽多年,甲骨文公司有十幾萬人在做資料庫,為什麽他們沒有做分布式資料庫呢?我們當時整個阿裏包括淘寶和支付寶一共才幾千人,就算一個人頂別人十個人,我們也做不出來資料庫跟人家來競爭啊。
分布式資料庫能做成嗎?
已完成:40% ///
/
//////
那我們先來看看,分布式資料庫到底好在哪裏,它的難點我們究竟能不能克服。

就像剛才說的,分布式資料庫最重要的價值,就在於它的容量是可以伸縮的,可以說解決了資料庫系統的容量問題。其次,硬體的成本也會大振幅地降低,因為分布式系統不再會使用也不再需要那些高端的硬體了。

那最大的困難在哪兒呢?大家知道,資料庫裏面一些很關鍵的操作,是需要有「原子性」和「永續性」的。比如轉賬從一個帳戶轉到另一個帳戶,如果用一台集中式高可靠性的機器,它就會很少出故障。但是在分布式系統裏面,整個系統的故障跟結點數密切相關,結點越多出故障的機率也越大。
如果我昨天跟人做了一筆生意,別人給我轉了一個億,結果銀行今天告訴我,因為資料庫的硬碟故障了,一個億沒了,我想沒有人能接受這樣的情況。所以這是我們在做分布式資料庫之前首先要解決的。如果不解決這個問題,資料庫最基本的東西就不成立了,就不可能有人用。
我們解決這個問題的辦法,簡單來講就是少數服從多數。因為我們使用的就是普普通通的PC機,價效比很高,但是穩定性和可靠性沒那麽高。那我們就把一筆交易同時用3台機器做,這中間只要至少2台機器做成功了,我們就認為這件事情是成功的。即使其中任何一台機器壞了,那剩下那2台機器裏面一定至少還有1台機器有數據,那麽我們就可以透過這1台機器把系統迅速地恢復回來。

所以我們其實是改變了資料庫產業處理故障的方法。以前用的高端硬體很少出故障,可是你一定要對它出故障有所準備。它也許一兩年內不會出問題,但三四年可能還是會出故障的。一旦出了故障,就需要投入大量人力物力讓這些系統盡可能快地恢復。總不能像我剛才跟大家說的,銀行硬碟壞了就讓一個億憑空消失了。
我們現在的做法是,讓資料庫可以自動地恢復,而且恢復時間很短,幾十秒就能完成。我們現在把這個時間做得更短了,只要幾秒的時間就能把整個系統恢復。特別是像支付寶,它重要的系統有幾百套甚至是更多。這時系統出故障的機率其實很高了,但我們做成了自動恢復之後,做業務的同事就再也不用擔驚受怕了,做系統的同事也不用擔心出了故障就要立刻去應急解決問題。
一個峰回路轉的故事
已完成:50% ///
/
/
/////
到了第2年也就是2011年,我們的第一個業務——淘寶的我的最愛上線了。我的最愛這個業務看起來可能很普通,只是把你感興趣的商品都放到我的最愛裏,但是你每次開啟這個系統,我的最愛都要把這些商品的最新狀態展示給你。

這裏面一個很大的挑戰就是,商品的價格狀態是在變化的。有的商品降價了。有的商品參與了一些促銷,還有的商品可能賣完下架了。那麽在你開啟我的最愛的時候,這個系統就要去查商品庫,把每一件商品的價格變動、是否下架這些狀態都讀出來並更新。如果你收藏了100件商品,那它就要讀100次商品,這就給了資料庫一個很大的壓力,它是100倍的放大。如果你收藏了更多的商品,這個放大的倍數更大。

我們解決這個問題的辦法是,我們把這些商品的修改放到了記憶體而非硬碟裏面。
這就有點像傳統的圖書館。傳統的商品是正常的圖書,放在一個大書架上,而那些經常借閱的書是放在一個小書架上。我們把修改的資訊放到記憶體也就是這個小書架上,那麽每次要展示的時候,只需要去看這個小書架就行了。
小書架的優點是,第一內容少,第二記憶體裏的讀取速度非常快,要比大書架也就是硬碟要快得多。所以這樣我們就可以很快地把最新的資訊展示給使用者,解決了我的最愛的問題。
但是接下來,我們遇到了一個非常大的挑戰,就是那些最核心的業務都不願意來嘗試我們這個新的資料庫。

這件事情我充分地理解,因為沒有一個核心業務願意嘗試一個新的、沒有被證明過的資料庫。但是反過來,一個資料庫沒有大量地被使用,你是沒有辦法來證明它是穩定可靠的。
所以在2012年底,整個集團給了我們這個團隊一個復活的機會,就是把我們從淘寶調到了支付寶,讓我們重新來找機會。如果沒有這一次復活的機會,我覺得就沒有今天的一切。
到了支付寶之後,困難仍然是存在的。尤其是當2014年我們決定在支付寶的交易庫使用OceanBase的時候,這個困難變得更大了。
支付寶在雙11主要幹什麽呢?就是做交易。如果這個交易庫不能工作,整個支付寶就完全不能工作了。所以業務方面肯定對此非常擔心,也有非常大的壓力。

當時在極端的困難之下,我給當時公司的董事長兼CEO彭蕾寫了一封信件,說明了一些情況。我說,確實要給我們這些技術團隊一些機會,讓我們能夠嘗試。最後大家經過很多輪的激烈討論,決定給我們1%的業務。
不要小看這個1%,對於業務來講,1%也是很大的風險。因為支付寶有幾億的使用者,1%也就意味著幾百萬的使用者。
後來故事的發展真的有點戲劇性了。因為到了臨近雙11前夕,支付寶對整個系統進行壓力測試。大家發現,當整個系統的壓力達到預定的90%以上之後,當時用的資料庫就開始報錯了,因為到了它的效能天花板。
所以當時的業務團隊來找我們,說給你們10%行不行?那我們當然拍手歡迎了。而且幸運的是,在那個雙11期間,我們整個系統非常平滑地支撐了業務,也從此得到了大家的信任。
於是在隨後的一兩年裏面,我們把支付寶所有核心業務都逐步替換成OceanBase資料庫,包括金融系統裏面最核心的賬務庫。
不服跑個分
已完成:70% ///
/
/
/
/
///
到2016年的年底,隨著我們在整個螞蟻集團資料庫的逐步替換,我們這個團隊也看到了內部的天花板,我們就需要往外面去。
那走出去之後,其實我們遇到了跟內部類似的困難,甚至是更大的困難,因為沒有人知道OceanBase這個資料庫。畢竟甲骨文這麽多年都沒做出分布式資料庫,你們憑什麽說做出來了分布式資料庫?
我們當時的團隊規模也小,也就是百十來個人。所以在這種情況之下,我們決定去跑跑分。因為資料庫跟超級電腦一樣,它有個全世界的效能排行榜。我們需要先向這個非營利組織證明你是一個資料庫,你能滿足做交易時要求的「原子性」和「永續性」。完成了這個證明之後,你才有可能去跑效能。所有的這些都是在這個組織的監督之下做的。

▲全球事務處理效能排行榜(2019)
在這件事情裏面,我們做到了好幾個第一。
這是第一次有中國的資料庫登上了這個榜首。
這是第一次有分布式資料庫去跑分,因為以前的資料庫都是集中式的。這個相當於改變了整個遊戲的規則,因為你一旦能用分布式去跑分了,100台機器跑一個效能,200台機器做不到2倍但可以做到1.8倍、1.9倍。那麽後來的發展確實是這樣的。
還有一個第一是說,以前的資料庫在跑分的時候要去買裝置、買硬體、買機器、買儲存,我們沒有,我們是在雲上租的。我們第一次用雲上的虛擬機器來跑分,這給我們提供了很大的便利。首先就是我們跑分的成本大振幅降低,不用投入大量成本買這麽多的機器硬體裝置了,其次就是這些裝置完成測試後就可以釋放掉,不用再額外付費。
做面向全球、頂天立地的資料庫
已完成:80% ///
//
/
/
/
//
到了2020年,集團決定讓我們這一塊獨立出來,獨立成長。

經過了過去四五年的發展,到2025年初,我們現在大概有2000個付費客戶,還有大概三萬多套使用者是我們知道的開源使用者,因為我們也是一個開源的軟體,可以免費使用。我們服務了很多像金融、銀行、證券、保險、能源、交通、物聯網、社保等等領域的客戶。

我們不僅在國內發展,也嘗試著走出國門。在這個過程中,我們其實也遇到了問題。在前面也跟大家提到過,商業的資料庫Oracle非常的穩定,還有開源的免費資料庫MySQL也很好用,那究竟誰會願意來花錢買我們這個資料庫呢?
這個時候我想到,資料庫其實要做兩件事情。一個是我們前面講的交易處理,但其實它還要幹一件重要的事情就是做分析處理,也就是做報表。
由於數據量的增長,傳統的集中式資料庫已經很難做分析了,或者說根本不能做。所以很多業務系統是一套交易資料庫,再加上一個大數據系統搭配使用。因為分析系統往往數據量更大,比如要跟前一年的數據做對比,你就必須得有前一年的數據。其實這個大數據系統本身也算是一類資料庫,這就讓整個系統很臃腫,成本也很高,並且有很多使用方面的挑戰。
這一點對我們來說很好解決,因為我們是個分布式系統,我們的容量不是問題。那就有可能在這個系統裏面既把交易做了,又把分析做了;既降低使用者的成本,又能讓使用者在使用上得到極大的簡化。我覺得這個應該就是我們今後的機會。

接下來的挑戰就是效率。因為按照硬碟的塊裝置的特征,做交易的時候它是需要把一條記錄的相關數據存在一起的,這樣你的IO(Input/Output,數據的讀取和寫入)就比較少,效率比較高。

但是做分析的時候不是這樣的,比如人口資訊有姓名、有身份證、有住址、有出生日期,還有好多好多的資訊。如果我們只想看看身份證號,不需要關心其他的。如果這些資訊還是像剛才那樣把一條記錄的所有資訊存在一起的話,效率就會非常低。而我們前面大書架、小書架的思路恰好能夠解決這個問題。

就是你把要分析的數據用列來存,要做交易的數據用行來存。所有這些數據要做的修改都是放在記憶體裏面的,這個東西就是我們前面講的小書架。記憶體對於行或列其實不那麽敏感,因為它是個隨機存取的裝置,速度也非常快。這樣,我們就能解決這個效率的問題了。

因此,我們不只是做了一個交易的資料庫去跟其他資料庫競爭,我們要在資料庫賽道裏走出來一條新的路,把自己變成新一代的大數據平台
。對使用者來說,這既大振幅地降低了成本,又大振幅地簡化了使用方式。我想,這就是OceanBace真正要在國際資料庫市場上生存下來的秘訣。
說到這裏,我還想說,王老師對我的影響其實是非常大的,遇到他是我的幸運。當時做OceanBase資料庫的時候,我經常跟我們團隊的同學們講,資料庫是一個沒有國界的產品,我們一定不能只給淘寶做,不能只給支付寶做,不能只給天貓做。當然,我們要服務好這些使用者,但也一定要做一個頂天立地、面向全世界的通用的資料庫,讓我們不只在技術領先,在市場上也一定要能立得住,能夠服務整個世界。

謝謝大家!
「格致論道」,原稱「SELF格致論道」,致力於非凡思想的跨界傳播,旨在以「格物致知」的精神探討科技、教育、生活、未來的發展,由中國科學院電腦網路資訊中心和中國科學院網路安全與資訊化辦公室主辦,中國科普博覽(中國科學院科普雲平台)提供技術支持。