迎雙11十週年,OceanBase 2.0挑戰新巔峯

迎雙11十週年,OceanBase 2.0挑戰新巔峯
2018年是“雙11”十週年。2009年11月11日,當時的淘寶商城(天貓的前身)舉辦了首屆網絡促銷活動,當天銷售額爲0.5億元;2017年的雙11,天貓、淘寶總成交額1682億元,創造了25.6萬筆/秒的新支付峯值,數據庫處理峯值達4200萬次/秒。2017雙11開始後的7分23秒,支付寶的支付筆數突破1億筆,相當於5年前雙11全天支付總筆數!

對於阿里來說,每年的雙11就是一個超級工程,而下一年的雙11又會突破前一年的紀錄,因此雙11其實是一個不停“膨脹”的無限工程。支撐雙11的核心數據庫,就是自2010年開始立項的金融級分佈式數據庫OceanBase。

OceanBase的目標是成爲新一代商用關係型數據庫,其差異化優勢在於底層的分佈式技術。此前的OceanBase 1.0成功支持了2017年雙11的支付峯值,如今OceanBase 2.0已正式上線,迎接即將到來的2018支付新峯值。

OceanBase 2.0有何新功能?對1.0版本進行了哪些優化?能否支撐今後雙11的無限擴展?OceanBase團隊的兩位專家楊傳輝和韓富晟解讀了2.0版本的特點,兩位專家均強調OceanBase 2.0的設計可支撐百萬支付峯值甚至無上限,2018年還將在不增加服務器的基礎上“頂住”新的峯值。此外,在完全兼容MySQL後,OceanBase 2.0加強了對Oracle數據庫的兼容。OceanBase還在以極致精神打磨軟件,挑戰世界級基礎軟件。

進一步提升分佈式架構

今年以來,國內雲服務商陸續推出了各自的分佈式數據庫,楊傳輝強調OceanBase是唯一一個走通用數據庫路線的產品,其特色在於分佈式架構對用戶透明,不需要修改業務。OceanBase的技術定位爲通用的金融級分佈式商業數據庫,從支持金融行業起步,再逐步拓展到支持各個行業。

迎雙11十週年,OceanBase 2.0挑戰新巔峯

(上圖爲螞蟻金服研究員 楊傳輝)

相對1.0版本而言,OceanBase2.0在分佈式架構方面更上一層樓。OceanBase 1.0已經實現了用戶對機器故障的無感知,也就是多臺機器部署數據庫,無論哪臺機器宕機都可以30秒內無損切換,即所謂高可用。OceanBase 2.0進一步實現了多臺機器部署數據庫的時候,用戶對數據分佈的無感知,這就是數據庫層面的自動分片和自動負載均衡。OceanBase 2.0支持在線數據分片,當某個數據分片數據量或者訪問量太大時,在線分裂成多個分片,整個過程對服務沒有任何影響。

分佈式數據庫的數據分片,即把數據集切分成若干子集再分佈到不同機器上,達到分佈均勻、負載均衡、擴縮容時數據遷移少等目的。楊傳輝強調,一臺服務器上的數據分片數量,說明了數據庫底層的技術能力,因爲分片越多則意味着系統開銷越大,數據分片要能做到足夠小,才能實現整個集羣負載的精細化控制和快速數據恢復。外界基於MySQL方案的分片數能達到單機幾十個,而OceanBase 2.0則可支持的單機分片數達到10萬到100萬個,從而實現了無限的可擴展能力。

在實現用戶對機器故障無感知和數據分佈無感知後,OceanBase 2.0還對分佈式事務進行了改進。OceanBase 1.0已經支持了分佈式事務,2.0版本則進一步實現了全局快照和全局索引。所謂全局快照,即當一條SQL語句涉及到多臺機器時,通過全局快照保證各臺機器的強一致讀取。在全局快照讀的基礎上,OceanBase2.0實現了全局索引,就真正做到了用戶對多機環境的無感知。此外,由於出現了全局快照,爲了提高局部的租戶級數據一致性,OceanBase 2.0在全局時鐘的基礎上又引入了租戶級時鐘,從而保證單個租戶的數據一致性,而無須頻繁引用全局時鐘,這樣就避免了全局時鐘成爲整個系統的瓶頸。

強化對Oracle數據庫的兼容

除了日益強大的分佈式架構,OceanBase 2.0相比OceanBase 1.0在功能上最大的亮點是爲用戶提供了一個全新的Oracle兼容模式。衆所周知,MySQL是互聯網場景中最爲流行的數據庫,但從市場規模、功能完備等方面看,Oracle依然是商業數據庫的絕對領導者。OceanBase的Oracle兼容模式使得傳統企業的應用可以平滑遷移到OceanBase,在不改變業務代碼的前提下充分享受分佈式數據庫在擴展性、可用性和系統成本等各個方面帶來的收益。

從MySQL到Oracle的兼容,不僅僅是SQL語法、數據類型、功能等方面的改變,更重要的是從專用數據庫到商用數據庫的全面功能升級,而這一切都是基於OceanBase對於自有內核的全面掌握。 例如,遷移傳統數據庫應用中,存儲過程的支持是繞不過去的一道難題。OceanBase 2.0在兼容Oracle存儲過程各種複雜、靈活的語法與功能的同時,還進一步通過編譯執行(Just-in-Time Compilation)等技術,大大提升了其執行效率和具體場景中的實用性。與此同時,OceanBase 2.0還提供自定義函數、窗口函數、層次查詢、dblink、臨時表、sequence等一系列豐富的數據庫功能。

Oracle兼容模式的另外一個體現是數據庫內核能力方面的增強。例如,爲了更好的處理複雜查詢的處理能力,OceanBase 2.0全面升級了分佈式查詢的優化和執行引擎,增強了對複雜業務的支持能力;爲了實現更精確的查詢優化,OceanBase 2.0實現了直方圖以及實時統計信息更新的機制;同時,OceanBase2.0實現了基於用戶參數的計劃選擇機制,增強了系統對大小查詢混合場景的支持。諸如此類,OceanBase 2.0在SQL引擎中引入了大大小小數十種內核優化手段,向成熟的商用數據庫又邁進了一大步。

數據庫應用與數據的平滑遷移是升級過程中的重要考慮因素。OceanBase 2.0數據遷移平臺支持Oracle業務到OceanBase 2.0的一鍵平滑遷移,爲用戶系統的升級鋪平了道路。

OceanBase 2.0剛剛轉向Oracle兼容,任重而道遠。楊傳輝表示,相信隨着整個團隊的不斷努力,OceanBase會持續降低用戶使用數據庫的門檻,實現對用戶生產力的充分解放與賦能。

挑戰百萬支付新峯值

2017年雙11的支付峯值爲25.6萬筆/秒,那麼2018年及以後的支付峯值目標就上看百萬筆/秒甚至更高。這麼高的目標能否實現?這就是OceanBase 2.0問世的目的:今年雙11交易支付,全部升級到OceanBase 2.0,從而挑戰百萬支付新峯值。

在支撐更高的支付峯值方面,OceanBase 1.0已經無法對數據進一步的拆分而不影響上層的業務,OceanBase 2.0的目標就是在用戶無感知的前提下可以把數據拆分到無限多的機器裏,無需上層的業務改造就可以支撐百萬甚至更高的支付峯值。

OceanBase作爲基礎軟件,是整個支付業務性能的基石。OceanBase一直以來也把性能作爲核心功能對待,一直爲業務×××價比最高的數據庫服務。OceanBase 2.0版本繼續發力,在性能上獲得了跨越式提升,在線事務處理能力(也就是處理OLTP類型業務的能力)提升了50%,爲完成2018年雙11不添加一臺服務器支持新的業務峯值的目標提供了堅實的基礎。

負責性能優化工作的韓富晟具體介紹了OceanBase 2.0的各項改進。OceanBase 2.0主要從三個層面下了大功夫。第一,是數據庫架構層面的革新;第二,是系統實現層面的精雕細琢;第三,是數據庫運行環境的整體調優。

迎雙11十週年,OceanBase 2.0挑戰新巔峯

(上圖爲螞蟻金服資深技術專家 韓富晟)

OceanBase 2.0對事務提交流程進行了大重構,大幅度減少事務提交流程的開銷。支付業務是典型的在線事務處理類,以短小事務爲主,事務的提交執行的頻率特別高。事務的提交也通常是數據庫內部最耗時的一部分。OceanBase 2.0打通日誌服務與事務服務,將原先分佈式事務兩階段提交的多條日誌優化到每個分區只有一條日誌,依然保證很好的支持事務的原子性和一致性的功能。日誌條目數的減少簡化了提交流程,不僅提升了系統處理能力,還顯著減少了事務提交的耗時。

OceanBase 2.0還在哪些地方精打細算了呢?實際上,OceanBase 2.0的整個請求處理路徑都進行了細緻的優化。以內存分配器爲例,OceanBase數據寫入Memtable過程中,會在數據存儲和索引更新過程多次分配內存,內存分配器很容易成爲系統的瓶頸。通常解決這個問題的方法是讓分配器預分配很多內存,但是在OceanBase分佈式多分區的架構下,給大量空閒分區預分配意味着大量閒置的內存無法有效利用。OceanBase 2.0啓用了自適應的內存分配器算法,只對寫入量大的分區進行內存的預分配,有效平衡了空間佔用和系統性能。

數據庫一般都是操作系統壓力最大的進程,也經常觸碰操作系統的各種極限。OceanBase2.0在實際生產環境大壓力運行時,我們還發現了Linux內核的bug。這個bug從3.1版本內核開始出現,目前3.1也是業界在生產環境普遍使用的一個版本。在內核專家的支持下,我們發現了Linux調度系統的缺陷,這個缺陷使得CPU無法充分利用。僅解決此bug一項,就給系統帶來了7%的性能提升。

爲什麼OceanBase要這麼細摳系統性能呢?這是因爲做軟件有兩大代價要應對,一個是開發代價,一個是運行代價,有些系統很側重開發代價,特別是變化頻繁的業務系統,好的開發效率是系統迭代的關鍵。但是數據庫這樣的底層系統在關注開發效率的同時,更關注運行代價或者說是運行效率,爲什麼要關注運行效率?對於一個商業數據庫來說,運行在成千上萬臺機器上,點滴運行效率的提升可以帶來計算資源的大量節省,比如OceanBase 2.0對於在線處理業務50%的性能提升,如果原先是1萬臺機器上運行的話,通過性能提升就能節約出三分之一的機器。“越基礎的軟件性能越關鍵,一個微小的改變就會爲業務節省大量的資源,持續的系統優化是必須要做的事情。”韓富晟表示。

安全、升級與遷移

OceanBase 2.0還在更多方面進行了優化,這些包括數據安全與質量、軟件系統與遷移等方面的優化。

在數據安全方面,OceanBase 2.0實現了商業數據庫一個重要功能,即數據閃回(Flashback)。數據閃回之所以特別有用,在於一旦發現操作有誤,可以閃回到一段時間之前的數據狀態。OceanBase 2.0支持數據的多版本存儲,即把內存中的數據存儲到磁盤時,會把併發的多版本以及歷史版本信息等根據用戶需求存儲到磁盤裏。

如何實現OceanBase 1.0到2.0的平滑過渡?一方面,爲了保障業務的平穩過渡,OceanBase提供了灰度切換和業務雙寫,灰度切換指的是數據流量按一定百分比逐步切換到新系統中,一旦出現問題即可回滾。而業務雙寫,即業務系統同時使用1.0和2.0兩個版本,兩套數據庫並行工作以及進行數據對比,在運行很長一段時間後確保切換沒有問題,再一點一點按比例切換,切換的過程中仍然使用灰度控制,這樣就保證了從1.0到2.0的平滑升級。

兼容性也是OceanBase團隊提供的1.0到2.0版本升級中的重要保障機制。OceanBase支持1.0版本與2.0版本同時運行在一個業務下,“在一個集羣裏,兩個大版本的數據庫同時運行,技術難度非常大”,楊傳輝強調。首先是不同版本數據庫之間的協議兼容,也就是當1.0版本給2.0版本發1.0的協議以及2.0版本給1.0版本發2.0的協議,二者之間都能兼容。此外,在數據格式方面,由於2.0版本對底層進行了比較大的改造,因此2.0在兼容1.0的數據格式方面也做了細緻的工作。而更難的是功能兼容,在2.0版本中對不少功能都進行了較大的改動,因此每一個被改動功能的兼容性都需要逐一處理。

在遷移工具方面,OceanBase支持阿里巴巴和螞蟻金服體系內的數據遷移工具,例如阿里雲平臺上的數據傳輸服務DTS。在螞蟻金服內部開發了MySQL到OceanBase一鍵遷移平臺,業務不需要修改一行代碼,就可以將原來使用的MySQL切換爲OceanBase。

OceanBase 2.0還在其它方面進行了更多的優化。在底層優化方面,OceanBase 2.0將實現存儲和計算的分離,這相當於在數據庫底層形成了一個分佈式存儲系統。在自治數據庫方面,OceanBase整個的產品願景一直在朝這個方向發展,儘可能減少人工干預。

OceanBase 2.0的正式對外發布,代表了OceanBase產品化的又一個新里程碑,也是OceanBase在走向商業數據庫產品之路上的一個重要節點。OceanBase的持續開發和優化過程,反應了中國基礎軟件在基於雲計算的分佈式計算時代的新機遇,儘管要重走一遍傳統IOE軟件曾經走過的基礎軟件優化道路,但基於雲計算的分佈式環境給了中國基礎軟件一個劃時代的機遇,抓住這個機遇就有可能成就來自中國的世界級基礎軟件,OceanBase也有機會站在世界軟件之巔!(文/寧川)

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