本文介紹了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副本,保證讀只讀實例不會因為同步延遲讀到過期數據;Binlog日志服務中,通過時間戳保證分布式事務順序;任意時間點的數據恢復(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的寫入數據同步到其他存儲中。