阿里自研分佈式強一致關係型數據庫——X-DB

0寫在前面

今年雙 11 是 X-DB 的第一次大考,本次雙 11X-DB 服務於天貓 / 淘寶核心交易系統、核心物流系統、核心 IM 系統,經受了零點業務 32.5 萬筆 / 秒峯值的性能考驗(對應數據庫峯值每秒破億次的 SQL 調用);同時 X-DB 支撐起了新一代單元化架構,在分佈式一致性算法 Paxos 的統一框架下,第一次提供了跨 Region 分佈式強一致能力,實現高效的跨 Region 數據同步、跨 Region 容災,保證金融級的數據質量服務。算法

X-DB 爲了下降用戶的遷移和學習成本,選擇了兼容成熟的 MySQL 生態,而且作到了真正 100% 兼容 MySQL 生態,爲業務,爲傳統數據庫賦能。基於 MySQL 的業務能夠無縫從 MySQL 遷移到 X-DB 上來,不須要任何評估和兼容測試,徹底零成本遷移。基於 MySQL 的周邊工具平臺,甚至是 MySQL DBA 均可以很是平滑的轉移到 X-DB 上來。阿里內部從今年 6 月初第一個業務應用灰度切流,到目前爲止 5 個月的時間裏,X-DB 已覆蓋了阿里集團及多個關聯公司旗下的多個事業羣,爲海量的線上業務提供服務,整個過程絕大部分業務都是無感知的。數據庫

X-DB 擁有真正的跨 Region/ 跨國的數據強一致能力,並已獲得實踐的檢驗。雙 11 前夕,核心物流系統、核心 IM 系統首次完成了中心 Region 全部數據庫不可用的「中心城市容災演練」,驗證業務擁有在整個中心 Region 均不可用狀況下,X-DB 和應用仍能夠正常提供服務的能力,並保證數據零丟失。跨域

1X-DB 的核心優點和技術解析服務器

X-DB 是阿里自研的全球級分佈式關係型數據庫。如今業界各類類型的分佈式數據庫不斷涌現,互聯網巨頭、傳統數據庫廠商、數據庫創業公司都在不斷跟進。那麼 X-DB 到底有什麼優點能打敗這些競品,快速得到業務價值呢?網絡

1. X-DB 生態 100% 兼容 MySQL多線程

新一代分佈式關係型數據庫是對傳統關係型數據庫的傳承和革新。分佈式數據庫雖然在高可能、強一致、高性能、低成本、高伸縮等多個方面做出了劃時代的變革;但其依舊傳承了傳統數據庫強大的 SQL 接口,系統管理能力。NoSQL 的衰弱和 NewSQL 的興起,偏偏證實了這一點。一個新的分佈式數據庫,若是沒有傳承,自建一個新的生態,將會極大的提升用戶的學習和使用成本,整個工具和支持配套也將面臨很大的困難。所以,X-DB 做爲一個新一代分佈式關係型數據庫,設計之初就選了業界相對開放和成熟的 MySQL 開源生態做爲本身的基礎。這樣不單可讓 MySQL 生態中的用戶零成本的切換到 X-DB 中,快速賦予業務分佈式數據庫所帶來的多種能力;同時可讓 MySQL 生態中的各類周邊工具和 DBA 等生態的參與者平滑的切換到分佈式時代,賦予其支撐分佈式數據庫的能力。架構

事實證實 X-DB 選擇的這條路是正確的。在阿里集團及生態下的子公司內部,X-DB 在短短的幾個月內、在很是少的人力參與下,迅速的完成了對大量傳統 MySQL/AliSQL 集羣的換代升級,使得阿里數據庫總體進入了分佈式時代,整個過程業務幾乎零參與。同時 X-DB 對 MySQL 生態下的運維繫統 / 工具、知識體系也實現了兼容,整個 MySQL 時代的支撐平臺,支撐人員均可以平滑的過分到分佈式數據庫時代,擁有了支撐下一代數據庫的能力,這個是很是可貴的。併發

2. 跨 Region/ 全球強同步能力app

業界支持分佈式強一致的數據庫不少,可是其強一致都是有範圍的,有些支持 AZ 內強一致,有些支持跨 AZ 強一致,真正能作到跨 Region/ 跨國強一致的倒是百裏挑一。目前業界主流數據庫中,只有 Spanner 宣稱本身是 Global Distribution,包括 Amazon Aurora 在內的其餘主流數據庫目前都不支持跨 Region 的強一致。X-DB 是真正作到了跨 Region/ 跨國強一致的分佈式數據庫,而且在業務上獲得了驗證。今年音視頻服務全站遷移 X-DB,同時 X-DB 支撐了音視頻服務國際化等多個國際化項目,實現跨國部署。包括核心交易系統、核心物流系統、核心 IM 系統在內的大量業務集羣以跨 Region 強同步模式部署,使得業務擁有了城市級容災狀況下,數據零丟失,服務秒級恢復的能力。核心物流系統、核心 IM 系統在雙 11 前夕分別進行了中心 Region 全不可用的容災演練,X-DB 在 15 秒內自動完成跨 Region 的從新激活,數據零丟失,這在整個行業都是先行者。負載均衡

 技術解析:X-Paxos——高性能 Paxos 獨立庫

Paxos 是一種分佈式一致性算法,其最基礎也是最重要的功能是保證分佈式系統中多個節點的數據(日誌)的強一致,它是分佈式系統的基石。雖然 Paxos 算法被圖靈獎得到者 Leslie Lamport 首次提出到如今已經 19 年了,離第一個工業實現(Chubby)也已經 11 年了,可是近幾年,頂級會議 / 業內文章中 Paxos 的優化和討論仍是很是的多,並且到目前爲止真正工業級的、高性能的、高可擴展的 Paxos 算法庫仍是很是的少見。

X-Paoxs 是阿里獨立設計 / 研發的,真正工業級的 Paxos 獨立庫,其在性能上好於業界對手 一、2 個數量級以上,同時其強大的擴展性和完善的生態系統都是競品所沒有的,X-Paxos 爲分佈式高性能數據庫 X-DB 奠基了堅實的基礎。

X-Paxos 從基礎架構,到網絡模型,再到算法自己都有大量的創新:

基於 SEDA 架構的異步併發調度框架

因爲 Paxos 的內部狀態複雜,實現高效的單實例多線程的 Paxos 變成一個很是大的挑戰。大部分競品例如 Oracle/MySQL 的 Group Replication 等針對單個 Paxos 對象都是單線程實現。

X-Paxos 實現了一整套高效的異步併發調度框架,並基於 SEDA(Staged Event-Driven Architecture)思想,對整個 Paxos 協議進行了併發切分和實現,採用了大量無鎖設計;由異步併發調度框架進行調度和執行,充分利用多核資源,實現高性能。

基於 Batching & Pipelining 的網絡優化

跨 Region/ 跨國場景下對 X-Paxos 來講最大的挑戰就是如何在高延遲網絡下保持高吞吐和相對低延遲,X-Paxos 針對高延遲網絡作了大量的協議優化嘗試和測試,並結合學術界現有的理論成果經過合理的 Batching 和 Pipelining,設計並實現了一整套自適應的針對高延遲高吞吐和低延遲高吞吐網絡的通訊模式,極大的提高了 X-Paxos 的性能。相似的優化大部分還在理論階段,在同類競品中還很是的罕見。


圖片

Jepsen/TLA+ 的分佈式原理 / 實現驗證

《Paxos made live》中有過一個說法,證實一個 Paxos 實現是正確的,比實現這個 Paxos 自己會更難。所以咱們在設計和實現 X-Paxos 的時候,投入了大量的精力在 Paxos 的原理證實了實現驗證上。咱們用 TLA+ 對 X-Paxos 進行建模,驗證其理論正確性。咱們將 Jepsen 對 X-Paxos/X-DB 進行適配,同時增長了大量的驗證 Case 和注入錯誤,7X24 小時運行,驗證其實現正確性。

3. 強一致下的高性能

業界習慣性的認爲,強一致必定會帶來性能的降低,開強 MP 的 Oracle,在 Semi-Sync 的 MySQL,MySQL Group Replication 甚至於跨 Region 部署之後的 Spanner,會面臨大幅度的性能降低的問題。今年雙 11 X-DB 在覈心交易系統、核心物流系統等交易核心鏈路上 100% 切流,經歷了多輪全鏈路壓測和雙 11 零點業務 32.5 萬筆 / 秒,數據庫 SQL 上億次 / 秒的峯值的性能考驗,證實了 X-DB 徹底有能力實現強一致和高性能的魚熊兼得。

X-DB 從 Paxos 協議的實現,到 X-Paxos 和 AliSQL 的日誌結合,再到 AliSQL 自己的提交邏輯,鎖策略都作了大量的優化。保證 X-DB 不管是在多機房部署仍是多 Region 部署下,都能保證性能和單節點模式(非強一致)下無大幅度劣化。特別是在跨 Region 部署時,和其餘分佈式數據庫相比,優點尤其明顯。這也是業務可以接受 X-DB 跨 Region 部署的主要緣由。

X-DB 是 AliSQL 和 X-Paxos 的緊密結合而產生的。高性能的 X-Paxos 爲不單爲 X-DB 帶來了高可用和強一致的能力,同時爲 X-DB 的在強一致下的高可用奠基了堅實的基礎。除此之外,咱們在 AliSQL 和 X-Paxos 的結合上也作了大量的優化,例如一體化日誌設計和異步事務提交。

 技術解析:一體化日誌設計

X-DB 的 Consensus 日誌採用了單一事務日誌的方案(區別於 MySQL 的 binlog 和 relay_log 兩份日誌),單一事務日誌格式 MySQL binlog 的事務日誌格式。這份日誌被用於集羣節點間數據的同步以及下游應用的消費。

一體化日誌設計帶來的好處是顯而易見的,首先是日誌量的減小。MySQL 接收到主庫的網絡消息後會先本地落一份 relay_log 日誌,在消費後再產生一份 binlog 日誌。雖然 relay_log 會很快被回收,可是日誌的寫入量是實實在在的兩份。反觀 X-DB 在統一了日誌後,同一個事務在一個實例節點上只須要記錄一份日誌。其次統一日誌可以讓日誌真正按照產生的前後續作到邏輯和物理上的一致,這對於日誌的檢索效率來講是大有裨益的。首先是順序掃描日誌的時候能夠作到物理 IO 上的順序性,其次 Paxos 算法的運轉對於日誌的檢索和獲取都有較高的要求,若是檢索一份日誌須要前後掃描兩份日誌跳轉來判斷比較,那對於效率來講是很是低下的。



 技術解析:異步事務提交

在數據庫中,服務端的線程池是很是有效下降線程上下文切換開銷,提高系統吞吐的技術。可是在跨城 / 跨國環境下,巨大的網絡延遲使得線程池自己會成爲一種瓶頸。例如 X-DB 集羣的節點分佈在網絡 RTT 達到幾十毫秒級別的兩個 Region 中,那麼在實際的運行中會發現線程池中絕大部份線程都在等待日誌跨 Region 同步回包,而客戶端的請求就沒有足夠的線程去處理了,這其實形成了服務器資源的嚴重浪費。

從新回到非線程池的狀態不是一個明智之舉,既要低上下文開銷又要有高資源利用率。咱們採起的解決方案是將事務處理中可能最爲費時的等待事務日誌回報作成異步化。 這樣就把一個完整的事務流程拆成了:處理請求 ->等待同步 ->事務提交的三個步驟,三個步驟能夠分別由線程池的不一樣線程來完成。每一個步驟 X-DB 能夠精確控制併發量,例如能夠用最少的線程數量來處理事務等待日誌同步的工做,用大量的線程來處理事務提交等等。在異步化改造後,只要用戶的併發請求量足夠多,系統吞吐量上能夠有明顯的提升。


4. 豐富靈活的部署模式

針對電商雙 11 這種,不一樣時期不一樣需求的業務模型,X-DB 提供了很是豐富而且靈活的部署模式,例如核心交易系統、核心物流系統,在今年雙 11 前夕,將部署模式從跨城強同步模式一鍵切換回同城強同步模式,並動態調整拓撲,在保證機房級強一致的前提下,有效的下降了 RT,提高了吞吐。

集團內外不一樣的業務對數據庫的部署需求各不相同,爲了更普遍的支持不一樣的業務 X-DB 支持的部署模式很是的靈活。業務能夠根據本身的容災和業務需求,在不一樣的部署範圍內(同城多機房 / 國內多 Region/ 跨國等)選擇任意數量、任意角色的節點進行部署,節點的部署和角色一樣能夠在線修改以適應業務的不一樣時期的不一樣需求,例如雙 11。這樣說有點抽象,這裏舉 2 個實際的案例.

 案例:同城跨機房模式


上圖是一個經典的同城跨機房強同步方案,知足如下需求

  • 機房級容災數據零丟失,10 秒級容災切換

  • 相對於主備方案零成本增長(2 數據副本,1 日誌副本,日誌副本資源需求可忽略)

  • RPO < 1S(經過 X-Paxos SDK 持續備份)

固然業務能夠在這個模式的基礎上作多種擴展,例如增長只讀無選舉權的 learner 節點;增長有選舉權的 follower 節點等來提高容災等級和讀能力。

 案例:跨城單元化模式


圖片

上圖是一個經典的跨城強同步方案,知足如下需求

  • 真正的跨城強一致能力:任意城市總體不可用不影響集羣可用性,零數據丟失

  • 高性能:在跨城強同步下依然保持高性能

  • 靈活的切換策略:可分別設置同城節點,跨城節點切換優先級

  • 高伸縮能力:可任意增長 / 刪除 / 動態修改任意 Region 的數量和角色

目前核心交易系統、核心物流系統、核心 IM 系統等核心集羣均採用相似部署方案保證跨城容災能力。

更重要的是 X-DB 支持動態切換部署模式,例如核心交易系統、核心物流系統等集羣在雙 11 期間一鍵動態將跨城模式切換到同城模式,在保持機房級容災能力的前提下,得到更高的性能;音視頻服務經過在海外 Region 動態擴展一個 Leaner 角色的節點實現國際化。


圖片

大促模式

圖片

擴展讀 Region

 技術解析:Paxos 框架下的角色定製和動態變動

在分佈式數據庫中經典的 Paxos 用法是將 Paxos 做爲一個總體來解決高可用和強一致問題。然而 Paxos 算法不僅僅能解決高可用強一致問題。在 X-Paxos 中咱們對 Paxos 算法進行了擴展,將 Paxos 算法中節點的三個角色(Proposer/Accepter/Learner)進行了剝離和重組,造成了多種不一樣角色的節點,這些節點組合後,能夠造成多種適合不一樣業務的部署模式,同時 X-Paxos 設計了一整套動態 Configure Change 算法支持全部部署模式之間的動態切換,對業務很是友好。


圖片

2X-DB 的演進

X-DB 1.0 是整個 X-DB 的計劃的一部分,整個 X-DB 計劃將按照三步進行

  1. X-DB 1.0(X-Cluster): 集成 X-Paxos,實現金融級分佈式強一致能力、一體化的架構設計以及統一的生態環境。

  2. X-DB 2.0: 基於自研高性能低成本存儲引擎 X-Engine,與分佈式存儲結合打造的計算與存儲分離架構,能獨立擴展計算和存儲的能力,爲業務在不一樣場景的負載下,提供靈活的伸縮能力。同時得益於全新設計的存儲引擎,可以提供其餘同類產品難以匹敵的性能。

  3. X-DB 3.0: 新一代分佈式關係型數據庫,同時支持了數據自動分片負載均衡,多點可讀可寫,跨域強同步,AZ 內快速擴充計算節點的計算存儲分離架構,應用了一系列技術:爲充分發揮硬件性能的軟硬件結合技術以及根據數據冷熱特色的分層混合存儲技術,不管上是在擴展性和高可用性,仍是成本和性能上都作到極致,是 X-DB 計劃數據庫系統演進的最終形態。

相關文章
相關標籤/搜索