天天看點

2017雙11技術揭秘—X-DB支撐雙11進入分布式資料庫時代

作者:章穎強(江疑)、胡炜

X-DB 1.0(X-Cluster)是阿裡自主研發的,100%相容MySQL生态的,全球級分布式強一緻的關系型資料庫系統。今年雙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和應用仍可以正常提供服務的能力,并保證資料零丢失。

X-DB是阿裡自研的全球級分布式關系型資料庫。現在業界各種類型的分布式資料庫不斷湧現,網際網路巨頭、傳統資料庫廠商、資料庫創業公司都在不斷跟進。那麼X-DB到底有什麼優勢能戰勝這些競品,快速獲得業務價值呢?

新一代分布式關系型資料庫是對傳統關系型資料庫的傳承和革新。分布式資料庫雖然在高可能、強一緻、高性能、低成本、高伸縮等多個方面作出了劃時代的變革;但其依舊傳承了傳統資料庫強大的SQL接口,系統管理能力。NoSQL的衰弱和NewSQL的興起,恰恰證明了這一點。一個新的分布式資料庫,如果沒有傳承,自建一個新的生态,将會極大的提高使用者的學習和使用成本,整個工具和支援配套也将面臨很大的困難。

是以,X-DB作為一個新一代分布式關系型資料庫,設計之初就選了業界相對開放和成熟的MySQL開源生态作為自己的基礎。這樣不單可以讓MySQL生态中的使用者零成本的切換到X-DB中,快速賦予業務分布式資料庫所帶來的多種能力;同時可以讓MySQL生态中的各種周邊工具和DBA等生态的參與者平滑的切換到分布式時代,賦予其支撐分布式資料庫的能力。

事實證明X-DB選擇的這條路是正确的。在阿裡集團及生态下的子公司内部,X-DB在短短的幾個月内、在非常少的人力參與下,迅速的完成了對大量傳統MySQL/AliSQL叢集的換代更新,使得阿裡資料庫整體進入了分布式時代,整個過程業務幾乎零參與。同時X-DB對MySQL生态下的運維系統/工具、知識體系也實作了相容,整個MySQL時代的支撐平台,支撐人員都可以平滑的過度到分布式資料庫時代,擁有了支撐下一代資料庫的能力,這個是非常難得的。

業界支援分布式強一緻的資料庫很多,但是其強一緻都是有範圍的,有些支援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的重新激活,資料零丢失,這在整個行業都是先行者。

Paxos是一種分布式一緻性算法,其最基礎也是最重要的功能是保證分布式系統中多個節點的資料(日志)的強一緻,它是分布式系統的基石。雖然Paxos算法被圖靈獎獲得者Leslie Lamport首次提出到現在已經19年了,離第一個工業實作(Chubby)也已經11年了,但是近幾年,頂級會議/業内文章中Paxos的優化和讨論還是非常的多,而且到目前為止真正工業級的、高性能的、高可擴充的Paxos算法庫還是非常的少見。

X-Paoxs是阿裡獨立設計/研發的,真正工業級的Paxos獨立庫,其在性能上好于業界對手1、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的性能。類似的優化大部分還在理論階段,在同類競品中還非常的罕見。

2017雙11技術揭秘—X-DB支撐雙11進入分布式資料庫時代

Jepsen/TLA+的分布式原理/實作驗證

《Paxos made live》中有過一個說法,證明一個Paxos實作是正确的,比實作這個Paxos本身會更難。是以我們在設計和實作X-Paxos的時候,投入了大量的精力在Paxos的原理證明了實作驗證上。我們用TLA+對X-Paxos進行模組化,驗證其理論正确性。我們将Jepsen對X-Paxos/X-DB進行适配,同時增加了大量的驗證Case和注入錯誤,7X24小時運作,驗證其實作正确性。

業界習慣性的認為,強一緻一定會帶來性能的下降,開強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算法的運轉對于日志的檢索和擷取都有較高的要求,如果檢索一份日志需要先後掃描兩份日志跳轉來判斷比較,那對于效率來說是非常低下的。

2017雙11技術揭秘—X-DB支撐雙11進入分布式資料庫時代

在資料庫中,服務端的線程池是非常有效降低線程上下文切換開銷,提升系統吞吐的技術。但是在跨城/跨國環境下,巨大的網絡延遲使得線程池本身會成為一種瓶頸。例如X-DB叢集的節點分布在網絡RTT達到幾十毫秒級别的兩個Region中,那麼在實際的運作中會發現線程池中絕大部份線程都在等待日志跨Region同步回包,而用戶端的請求就沒有足夠的線程去處理了,這其實造成了伺服器資源的嚴重浪費。

重新回到非線程池的狀态不是一個明智之舉,既要低上下文開銷又要有高資源使用率。我們采取的解決方案是将事務進行中可能最為費時的等待事務日志回報做成異步化。 這樣就把一個完整的事務流程拆成了:處理請求->等待同步->事務送出的三個步驟,

三個步驟可以分别由線程池的不同線程來完成。每個步驟X-DB可以精确控制并發量,例如可以用最少的線程數量來處理事務等待日志同步的工作,用大量的線程來處理事務送出等等。在異步化改造後,隻要使用者的并發請求量足夠多,系統吞吐量上可以有明顯的提高。

2017雙11技術揭秘—X-DB支撐雙11進入分布式資料庫時代

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

集團内外不同的業務對資料庫的部署需求各不相同,為了更廣泛的支援不同的業務X-DB支援的部署模式非常的靈活。業務可以根據自己的容災和業務需求,在不同的部署範圍内(同城多機房/國内多Region/跨國等)選擇任意數量、任意角色的節點進行部署,節點的部署和角色同樣可以線上修改以适應業務的不同時期的不同需求,例如雙11。這樣說有點抽象,這裡舉2個實際的案例

2017雙11技術揭秘—X-DB支撐雙11進入分布式資料庫時代

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

機房級容災資料零丢失,10秒級容災切換

相對于主備方案零成本增加(2資料副本,1日志副本,日志副本資源需求可忽略)

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

當然業務可以在這個模式的基礎上做多種擴充,例如增加隻讀無選舉權的learner節點;增加有選舉權的follower節點等來提升容災等級和讀能力。

2017雙11技術揭秘—X-DB支撐雙11進入分布式資料庫時代

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

真正的跨城強一緻能力:任意城市整體不可用不影響叢集可用性,零資料丢失

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

靈活的切換政策:可分别設定同城節點,跨城節點切換優先級

高伸縮能力:可任意增加/删除/動态修改任意Region的數量和角色

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

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

2017雙11技術揭秘—X-DB支撐雙11進入分布式資料庫時代

在分布式資料庫中經典的Paxos用法是将Paxos作為一個整體來解決高可用和強一緻問題。然而Paxos算法不單單能解決高可用強一緻問題。在X-Paxos中我們對Paxos算法進行了擴充,将Paxos算法中節點的三個角色(Proposer/Accepter/Learner)進行了剝離和重組,形成了多種不同角色的節點,這些節點組合後,可以形成多種适合不同業務的部署模式,同時X-Paxos設計了一整套動态Configure Change算法支援所有部署模式之間的動态切換,對業務非常友好。

2017雙11技術揭秘—X-DB支撐雙11進入分布式資料庫時代

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

X-DB 1.0(X-Cluster): 內建X-Paxos,實作金融級分布式強一緻能力、一體化的架構設計以及統一的生态環境。

X-DB 2.0: 基于自研高性能低成本存儲引擎X-Engine,與分布式存儲結合打造的計算與存儲分離架構,能獨立擴充計算和存儲的能力,為業務在不同場景的負載下,提供靈活的伸縮能力。同時得益于全新設計的存儲引擎,能夠提供其他同類産品難以匹敵的性能。

X-DB 3.0: 新一代分布式關系型資料庫,同時支援了資料自動分片負載均衡,多點可讀可寫,跨域強同步,AZ内快速擴充計算節點的計算存儲分離架構,應用了一系列技術:為充分發揮硬體性能的軟硬體結合技術以及根據資料冷熱特點的分層混合存儲技術,無論上是在擴充性和高可用性,還是成本和性能上都做到極緻,是X-DB計劃資料庫系統演進的最終形态。