雙11大促實戰系列|OceanBase 2.0讓百萬支付不是夢?

OB君:你們都很關心的 “OB雙11大促實戰分享” 專題來啦!本系列將為你係統性的介紹OceanBase支撐螞蟻雙11背後的技術原理和實戰分享。從平臺到架構,再到實現,一起來探索螞蟻雙11這場神秘的技術之旅吧!

雙11大促實戰系列|OceanBase 2.0讓百萬支付不是夢?

背景

伴隨著螞蟻業務的蓬勃發展,特別是每年雙11大促不斷創造新的高峰, 交易支付核心鏈路提出了未來實現百萬筆支付/秒的能力 。為了實現這個宏偉目標,特別是提高數據庫層面分佈式擴展能力,如原生sharding/分佈式事務優化,OceanBase 2.0分佈式數據庫應運而生。

百萬支付

傳統數據庫擴容方案,主要是依賴分庫分表拆分進行水平擴容,螞蟻數據庫初期也是同樣思路,通過LDC單元化改造,核心表按用戶UID維度拆分成百庫百表。

但是隨著業務發展,特別是2017年的雙11大促,峰值需求已經遠遠超過單庫單機的最大容量。針對這個問題,我們使用彈性架構,即在大促前,新增兩套彈性數據庫,多套庫共同支持大促峰值。彈性架構雖然解決了大促容量需求,但是也存在一些缺陷,業務在數據路由、後期維護及數據配套設施都非常複雜繁瑣。有沒有更優雅的分佈式數據庫解決方案,即只使用一個庫,就可以支持百萬甚至更高的支付峰值,OceanBase 2.0分區提供了完美的解決方案。

雙11大促實戰系列|OceanBase 2.0讓百萬支付不是夢?

OceanBase 2.0整體架構

原理分析

OceanBase 2.0分區方案思路和傳統的分庫分表拆分一樣。我們在交易支付核心庫上,在原有百庫百表的基礎上繼續按用戶UID進行更深層次拆分,每個分表再拆分成多個partition,應用端只看到一張表,在用戶無感知的前提下把數據拆分到無限多的機器上,突破單機性能瓶頸,自動負載均衡,從而實現百萬支付的能力。

同時為了極致性能,OceanBase 2.0提供了partition group功能,將業務使用的多張邏輯表(table_1、table_2、... table_n),按共同的partition聚合在同一臺服務器上面,從而避免了分佈式事務帶來的額外開銷。

OceanBase 2.0分區方案


雙11大促實戰系列|OceanBase 2.0讓百萬支付不是夢?

OceanBase 2.0整體架構

關鍵點:

  • APP端請求SQL,帶上包含分區的字段—UID信息(如payment_id列)
  • SQL如果沒有分區信息,則在OBServer端並行計算優化
  • OBClient負責分區計算及路由,確保第一跳準確定位到對應分區所在服務器,避免遠程執行
  • OBServer端基於生成列partition_id進行內部分區,不侵入業務
  • OBServer端約束描述多維度分區,實現分區裁剪功能

優點:

  • 業務友好:不改變SQL語義,應用代碼不感知分區信息
  • 架構通用:約束功能,實現分區裁剪;OBServer提供兜底訪問能力
  • 高性能低成本:使用低配置服務器,自動負載均衡,資源利用率高

OceanBase 2.0性能優化

  • 分佈式事務消除:partition group方式,事務涉及所有表的partition按照分區鍵存儲至同一物理機
  • 兩階段提交協議優化:結合事務與日誌,事務prepare成功後內存不用持久保存狀態,按需從日誌中查詢;commit狀態持久化轉換成後臺批量完成
  • Commit異步化:異步化後Worker不等待繼續執行隊列中下一個請求,日誌持久化成功後會異步回調
  • 內存分配器優化:組織了兩層映射關係,既要提升性能又要支持大量分區
  • 存儲優化:數據編碼技術實現高壓縮

優化結果:

整體性能OceanBase 2.0版本較OceanBase 1.4版本性能提升50%,存儲空間節省30%。

總結

2018天貓雙11全球狂歡節成交額超過2135億,OceanBase 2.0成功經受住了考驗,全面支撐了支付寶核心鏈路 ,平穩抗住0:00:00時的峰值壓力,夯實三年戰略“百萬支付”的底盤能力。

OceanBase 2.0還有很多重要特性,比如分佈式全局索引、分佈式全局一致性快照、分佈式存儲過程、索引實時生效、Flashback閃回功能等,這些新功能將強有力支持企業不同業務場景下的持續創新。


分享到:


相關文章: