天天看點

技術白皮書—技術原理

分布式線性擴充

PolarDB-X将資料表以水準分區的方式,分布在多個存儲節點(DN)中。資料分區方式由分區函數決定,PolarDB-X支援哈希(Hash)、範圍(Range)等常用的分區函數。

以下圖為例,shop庫中的orders表根據每行資料的id屬性的哈希,被分區水準切分成orders_00~orders_11共計12個分區,均勻分布在4個資料節點上。對于使用者來說,通常無需關心具體的資料分布,PolarDB-X的分布式SQL層将會自動完成查詢路由、結果合并等。

技術白皮書—技術原理

技術白皮書—技術原理

高可用與容災

在生産環境部署資料庫時往往會搭建多個副本(Replica),保證資料庫叢集的高可用性以及資料的持久性。為了保證副本間的強一緻性,現代資料庫往往采用以Paxos算法為代表的多數派複制協定,它要求叢集中至少存在3個節點,每次寫入都要獲得超過半數節點的确認,即便其中1個節點當機叢集也仍然能正常提供服務。PolarDB-X采用X-Paxos複制協定,X-Paxos是阿裡巴巴自研的Paxos協定實作,在功能、性能上都做了大量優化,且經曆了數十載的雙十一考驗,穩定可靠。

技術白皮書—技術原理

基于Paxos複制協定,PolarDB-X可以部署到多個機房中,以實作機房級容災。常見的部署方式有同城三機房、兩地三中心等,其中後者主要應用在混合雲部署中。由于Paxos協定的特性,通常三個機房中有一個主機房負責對外提供服務。

技術白皮書—技術原理

分布式事務

PolarDB-X原生支援分布式事務,并保證事務的ACID性質——原子性(Atomicity)、一緻性(Consistency)、隔離性(Isolation)、持久性(Durability)。

PolarDB-X通過引入中心授時節點(TSO),結合多版本并發控制(MVCC),保證讀取到的一定是一緻的快照,而不會讀到轉賬事務的中間狀态。如下圖所示,送出事務時,計算節點(CN)執行事務時從TSO 擷取到時間戳,随着資料一同送出到存儲節點 (DN)多版本存儲引擎上。讀取時,如果查詢操作的資料涉及多個分區,PolarDB-X首先會擷取全局時鐘作為讀取版本,對每行資料的MVCC多版本進行可見性判斷,確定讀到全局一緻的資料版本。

技術白皮書—技術原理

分布式事務也是許多分布式特性的基礎,例如:對于讀寫分離,資料的事務多版本資訊也會被同步到 Learner 副本,保證讀隻讀執行個體不會因為同步延遲讀到過期資料;全局變更日志中,通過時間戳保證分布式事務順序;任意時間點的資料恢複(PITR,point-in-time recovery)中,利用分布式事務時間戳,能夠精準找到相應時間的、全局一緻的資料版本。

混合負載 HTAP

PolarDB-X是一款支援 HTAP (Hybrid Transaction/Analytical Processing) 的資料庫:在支援高并發、事務性請求的同時,也對分析型的複雜查詢提供了良好的支援。分析型查詢指的是涉及資料量較大、計算比較複雜的查詢,例如對一定時間區間内的資料進行聚合。相比于業務中常見的簡單查詢,這類查詢往往要執行數秒甚至分鐘,需要消耗較多的計算資源。

為了加速複雜分析型查詢,PolarDB-X将計算任務切分并排程到多個計算節點上,進而利用多個節點的計算能力,加速查詢的執行。這種方式也稱為MPP并行計算。

技術白皮書—技術原理

PolarDB-X的優化器面向HTAP負載設計,對複雜查詢有着良好的支援。PolarDB-X采用了基于代價的優化器技術,能夠根據實際資料量、資料分布情況等,搜尋到較優的執行計劃,例如,對Join順序進行調整、選擇合适的Join或聚合算法、對關聯子查詢去關聯化等。

PolarDB-X優化器會基于代價估計将請求區分為TP與AP負載,其中AP查詢會被進一步改寫為分布式執行計劃,發往隻讀叢集進行計算,避免它對主執行個體的TP查詢造成影響。

MySQL生态相容

PolarDB-X将相容MySQL以及周邊生态作為核心設計目标之一。本文從SQL文法、事務行為、導入導出等角度總結了相容性相關特性,具體用法可以參見相關功能文檔。

PolarDB-X通訊協定相容MySQL協定,可以使用常見的MySQL用戶端直接連接配接到PolarDB-X叢集,包括 JDBC Driver、ODBC Driver、Golang Driver等。相容MySQL SSL、Prepare、Load等傳輸協定。

PolarDB-X相容MySQL的各種DML、DAL、DDL文法,包括:

  • 相容絕大部分MySQL函數(包括JSON函數、加密解密函數等)。
  • 相容MySQL 8.0的視圖、CTE、視窗函數、分析函數等。
  • 支援MySQL的各種資料類型,包括類型精度支援(比如時間戳、Decimal 類型)。
  • 相容常見的MySQL字元串Charset及Collation。
  • 相容絕大部分information_schema視圖。