本文為您介紹PolarDB-X的主要技術原理。
分布式線性擴充
PolarDB-X將資料表以水平資料分割的方式,分布在多個儲存節點(DN)中。資料分區方式由分區函數決定,PolarDB-X支援雜湊(Hash)、範圍(Range)等常用的分區函數。
以下圖為例,shop庫中的orders表根據每行資料的ID屬性的雜湊,被分區水平切分成orders_00~orders_11共計12個分區,均勻分布在4個儲存節點上。對於使用者來說,通常無需關心具體的資料分布,PolarDB-X的分布式SQL層將會自動完成查詢路由、結果合并等。

擴容遷移
隨著業務的增長,資料量越來越大,往往需要添加更多的儲存節點以承載更多的資料。當新的儲存節點加入執行個體時,PolarDB-X將自動觸發擴容任務,將資料進行重新平衡(Rebalance)。
以下圖為例,orders表原本分布在4個儲存節點上。使用者進行擴容後,執行個體的儲存節點數量從4個增加到6個,觸發PolarDB-X的重新平衡任務,將部分資料分區從舊節點移動到新節點上。這一過程在後台利用空閑資源完成,對業務線上流量無影響。

高可用與容災
在生產環境部署資料庫時往往會搭建多個副本(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副本,保證讀唯讀執行個體不會因為同步延遲讀到到期資料;BinlogLog Service中,通過時間戳記保證分散式交易順序;任意時間點的資料恢複(PITR,point-in-time recovery)中,利用分散式交易時間戳記,能夠精準找到相應時間的、全域一致的資料版本。
集中式與分布式一體化
PolarDB-X支援集中式和分布式一體化架構,簡稱集分一體化。
面向集分一體化架構,PolarDB-X兼具分散式資料庫的擴充性和集中式資料庫的功能和單機效能,兩種形態可以無縫切換。在集分一體化資料庫中,儲存節點被獨立出來作為集中式形態,完全相容單機資料庫形態。當業務增長到需要分布式擴充的時候,架構會原地升級成分布式形態,分布式組件無縫對接到原有的儲存節點上進行擴充,不需要資料移轉,也不需要應用側做改造。
適配集分一體化,PolarDB-X的產品主售形態主要分為標準版(集中式形態)和企業版(分布式形態),支援標準版原地升級分布式。
HTAP一體化
PolarDB-X是一款支援 HTAP (Hybrid Transaction/Analytical Processing) 的資料庫:在支援高並發、事務性請求的同時,也對分析型的複雜查詢提供了良好的支援。分析型查詢指的是涉及資料量較大、計算比較複雜的查詢,例如對一定時間區間內的資料進行彙總。相比於業務中常見的簡單查詢,這類查詢往往要執行數秒甚至數分鐘,需要消耗較多的計算資源。
為了加速複雜分析型查詢,PolarDB-X引入列存索引的技術,結合向量化運算元提供更好的分析加速能力。
MySQL生態相容
PolarDB-X將相容MySQL以及周邊生態作為核心設計目標之一。本文從SQL文法、事務行為、匯入匯出等角度總結了相容性相關特性,詳細內容請參見MySQL相容性。
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視圖。
另外,PolarDB-X相容 MySQL Binlog 複製協議。使用者可以將PolarDB-X叢集看作一個普通的MySQL 節點,將其他MySQL節點作為PolarDB-X的同步源端或目標端。PolarDB-X的Binlog格式和MySQL原生格式一致,因此也可以用於CDC情境,例如利用canal等將PolarDB-X的寫入資料同步到其他儲存中。