[版本更新]PolarDB-X v2.2.1 生產(chǎn)級關(guān)鍵能力開源升級
2023年3月,PolarDB-X 正式發(fā)布2.2.1版本,在分布式數(shù)據(jù)庫金融標(biāo)準(zhǔn)能力基礎(chǔ)上,重點(diǎn)加強(qiáng)了生產(chǎn)級關(guān)鍵能力,全面提升PolarDB-X面向數(shù)據(jù)庫生產(chǎn)環(huán)境的易用性和安全性,比如:提供數(shù)據(jù)快速導(dǎo)入、性能測試驗(yàn)證、生產(chǎn)部署建議等。
架構(gòu)簡介
PolarDB-X 采用 Shared-nothing 與存儲分離計(jì)算架構(gòu)進(jìn)行設(shè)計(jì),系統(tǒng)由5個核心組件組成。

計(jì)算節(jié)點(diǎn)(CN, Compute Node)
計(jì)算節(jié)點(diǎn)是系統(tǒng)的入口,采用無狀態(tài)設(shè)計(jì),包括 SQL 解析器、優(yōu)化器、執(zhí)行器等模塊。負(fù)責(zé)數(shù)據(jù)分布式路由、計(jì)算及動態(tài)調(diào)度,負(fù)責(zé)分布式事務(wù) 2PC 協(xié)調(diào)、全局二級索引維護(hù)等,同時提供 SQL 限流、三權(quán)分立等企業(yè)級特性。存儲節(jié)點(diǎn)(DN, Data Node)
存儲節(jié)點(diǎn)負(fù)責(zé)數(shù)據(jù)的持久化,基于多數(shù)派 Paxos 協(xié)議提供數(shù)據(jù)高可靠、強(qiáng)一致保障,同時通過 MVCC 維護(hù)分布式事務(wù)可見性。元數(shù)據(jù)服務(wù)(GMS, Global Meta Service)
元數(shù)據(jù)服務(wù)負(fù)責(zé)維護(hù)全局強(qiáng)一致的 Table/Schema, Statistics 等系統(tǒng) Meta 信息,維護(hù)賬號、權(quán)限等安全信息,同時提供全局授時服務(wù)(即 TSO)。日志節(jié)點(diǎn)(CDC, Change Data Capture)
日志節(jié)點(diǎn)提供完全兼容 MySQL Binlog 格式和協(xié)議的增量訂閱能力,提供兼容 MySQL Replication 協(xié)議的主從復(fù)制能力。列存節(jié)點(diǎn) (Columnar)
列存節(jié)點(diǎn)負(fù)責(zé)提供列式存儲數(shù)據(jù),基于行列混存 + 分布式計(jì)算節(jié)點(diǎn)構(gòu)建HTAP架構(gòu),預(yù)計(jì)在今年底或者明年初會正式開源
開源地址:https://github.com/polardb/polardbx-sql
版本說明
梳理下PolarDB-X 開源脈絡(luò):
2021年10月,在云棲大會上,阿里云正式對外開源了云原生分布式數(shù)據(jù)庫PolarDB-X,采用全內(nèi)核開源的模式,開源內(nèi)容包含計(jì)算引擎、存儲引擎、日志引擎、Kube等。
2022年1月,PolarDB-X 正式發(fā)布 2.0.0 版本,繼 2021 年 10 月 20 號云棲大會正式開源后的第一次版本更新,更新內(nèi)容包括新增集群擴(kuò)縮容、以及binlog生態(tài)兼容等特性,兼容 maxwell 和 debezium 增量日志訂閱,以及新增其他眾多新特性和修復(fù)若干問題。
2022年3月,PolarDB-X 正式發(fā)布 2.1.0 版本,包含了四大核心特性,全面提升 PolarDB-X 穩(wěn)定性和生態(tài)兼容性,其中包含基于Paxos的三副本共識協(xié)議。
2022年5月,PolarDB-X正式發(fā)布2.1.1 版本,重點(diǎn)推出冷熱數(shù)據(jù)新特性,可以支持業(yè)務(wù)表的數(shù)據(jù)按照數(shù)據(jù)特性分別存儲在不同的存儲介質(zhì)上,比如將冷數(shù)據(jù)存儲到Aliyun OSS對象存儲上。
2022年10月,PolarDB-X 正式發(fā)布2.2.0版本,這是一個重要的里程碑版本,重點(diǎn)推出符合分布式數(shù)據(jù)庫金融標(biāo)準(zhǔn)下的企業(yè)級和國產(chǎn)ARM適配,共包括八大核心特性,全面提升 PolarDB-X 分布式數(shù)據(jù)庫在金融、通訊、政務(wù)等行業(yè)的普適性。
2023年3月,PolarDB-X 正式發(fā)布2.2.1版本,在分布式數(shù)據(jù)庫金融標(biāo)準(zhǔn)能力基礎(chǔ)上,重點(diǎn)加強(qiáng)了生產(chǎn)級關(guān)鍵能力,全面提升PolarDB-X面向數(shù)據(jù)庫生產(chǎn)環(huán)境的易用性和安全性,比如:提供數(shù)據(jù)快速導(dǎo)入、性能測試驗(yàn)證、生產(chǎn)部署建議等。
01 內(nèi)核的穩(wěn)定性和高性能
PolarDB-X 2.2.1版本,重點(diǎn)面向生產(chǎn)級的部署要求,優(yōu)化數(shù)據(jù)庫實(shí)例的穩(wěn)定性和性能、以及提供面向生產(chǎn)部署的相關(guān)最佳實(shí)踐。
1. 最低部署規(guī)格 (建議>=2c8g)

GMS 和 DN 2.5 倍資源說明:GMS 和 DN 是基于多數(shù)派 Paxos 協(xié)議構(gòu)建的高可靠存儲服務(wù),因此一個 GMS(DN)會包括三個角色的節(jié)點(diǎn):Leader,F(xiàn)ollower,Logger。 Leader 與 Follower 資源要求相同,保證高可用切換后的服務(wù)質(zhì)量,而 Logger 節(jié)點(diǎn),只存儲日志,不回放日志,固定為2核4GB的資源規(guī)格,即可滿足常見百萬級TPS的需求。因此一個 GMS(DN)需要 2.5 倍的資源,其中 2 是 Leader 和 Follower的資源,0.5 是 Logger的資源。
可以參考文檔:PolarDB-X 服務(wù)器推薦配置
2. 在線/離線安裝部署
PolarDB-X 2.2.1在面向很多線下用戶POC測試,受限于現(xiàn)場網(wǎng)絡(luò)條件,需要提供離線部署安裝的能力,比如:從3臺裸機(jī)開始,從0到1安裝PolarDB-X。
PolarDB-X提供了一鍵下載離線安裝包的能力,可參考文檔:PolarDB-X 軟件包下載
同時,結(jié)合生產(chǎn)部署穩(wěn)定性的要求,提供一份系統(tǒng)與環(huán)境配置,包含系統(tǒng)OS參數(shù)、磁盤配置等,可參考文檔:PolarDB-X 系統(tǒng)與環(huán)境配置
3. 性能全面提升
PolarDB-X 2.2.1在公有云上選擇了標(biāo)準(zhǔn)ECS進(jìn)行了性能測試和摸底,相比于2.2.0版本結(jié)合多方面的優(yōu)化,有了明顯的性能提升

可參考性能白皮書:
PolarDB-X sysbench 測試報告
PolarDB-X TPC-C 測試報告
4. 分布式1024節(jié)點(diǎn)
PolarDB-X 分布式數(shù)據(jù)庫中最重要的特性就是線性擴(kuò)展,目前市面上也有眾多分布式數(shù)據(jù)庫號稱超大規(guī)模的線性擴(kuò)展,但理論和實(shí)踐還是需要相結(jié)合,通過面向用戶可驗(yàn)證的方式,來體驗(yàn)下PolarDB-X在分布式1024節(jié)點(diǎn)下的穩(wěn)定性。
PolarDB-X提供了基于k8s生態(tài)構(gòu)建的 polardbx-operator 組件,基于k8s的分布式容器技術(shù)可以快速構(gòu)建PolarDB-X 1024節(jié)點(diǎn),考慮用戶的體驗(yàn)成本,采用了虛擬化的壓縮部署方式,選擇在24臺ECS主機(jī)上完成分布式1024超大規(guī)格節(jié)點(diǎn)的部署,并通過近百萬級別TPS的穩(wěn)定性驗(yàn)證。

說明:
PolarDB-X采用存儲計(jì)算分離的架構(gòu),CN和DN是可以獨(dú)立部署,實(shí)驗(yàn)設(shè)計(jì)部署1024個DN節(jié)點(diǎn),比如公有云PolarDB-X單個DN節(jié)點(diǎn)可支持3TB,那超大規(guī)模節(jié)點(diǎn)下可支持 1024 * 3TB = 3PB
DN節(jié)點(diǎn)選擇了最小的1C8GB (1024節(jié)點(diǎn)下也需要8TB的內(nèi)存),通過k8s的多租戶cgroup技術(shù),采用24臺高配ECS進(jìn)行部署,單個ECS平均需要承載40+的PolarDB-X CN/DN節(jié)點(diǎn)。
本實(shí)驗(yàn)所需要的測試資源的成本,24臺ECS按量付費(fèi) 288元/小時,測試時間1天左右,預(yù)計(jì)花費(fèi)7000元。
參考文檔:分布式1024節(jié)點(diǎn)!1天玩轉(zhuǎn)PolarDB-X超大規(guī)模集群
02 分布式CDC架構(gòu)升級
Binlog是MySQL記錄變更數(shù)據(jù)的二進(jìn)制日志,它可以看做是一個消息隊(duì)列,隊(duì)列中按順序保存了MySQL中詳細(xì)的增量變更信息,通過消費(fèi)隊(duì)列中的變更條目,下游系統(tǒng)或工具實(shí)現(xiàn)了與MySQL的實(shí)時數(shù)據(jù)同步,此機(jī)制也稱為CDC(Change Data Capture,增量數(shù)據(jù)捕捉)
PolarDB-X是兼容MySQL生態(tài)的分布式數(shù)據(jù)庫。通過實(shí)例內(nèi)PolarDB-X的CDC組件,能夠提供與MySQL binlog格式兼容的變更日志,并且對外隱藏了實(shí)例擴(kuò)縮容、分布式事務(wù)、全局索引等分布式特性,讓您獲得與單機(jī)MySQL數(shù)據(jù)庫一致的使用體驗(yàn)
PolarDB-X 2.2.1版本后,提供了兩種形態(tài)的binlog日志消費(fèi)訂閱能力,且兩種形態(tài)可同時共存。
單流形態(tài):即單流binlog日志(也稱為Global binlog),將所有DN的binlog歸并到同一個全局隊(duì)列,提供了保證事務(wù)完整性和有序性的日志流,可以提供更高強(qiáng)度的數(shù)據(jù)一致性保證。例如在轉(zhuǎn)賬場景下,基于Global binlog接入PolarDB-X的下游MySQL,可以在任何時刻查詢到一致的余額。
多流形態(tài):即多流binlog日志(也稱為Binlog-X),并不是將所有DN的binlog歸并到一個全局隊(duì)列,而是將數(shù)據(jù)進(jìn)行Hash打散并分發(fā)到不同的日志流,在一定程度上犧牲了事務(wù)的完整性,但大大提升了擴(kuò)展性,可以解決大規(guī)模集群下單流binlog存在的單點(diǎn)瓶頸問題。
CDC 單流形態(tài):

CDC 多流形態(tài):

多流binlog提供了3種形式的數(shù)據(jù)拆分級別,在開通多流服務(wù)時可進(jìn)行設(shè)定,滿足不同場景下的使用需求。
庫級別按照數(shù)據(jù)庫的名字計(jì)算Hash值并進(jìn)行分發(fā),即對應(yīng)同一個庫的binlog數(shù)據(jù),會始終按序路由給同一個binlog數(shù)據(jù)流,適用于單個PolarDB-X實(shí)例上數(shù)據(jù)庫比較多的場景,如果事務(wù)不涉及跨庫操作,該策略下不僅可以具備多流能力,還可以保證事務(wù)的完整性。
表級別按照數(shù)據(jù)表的名字計(jì)算Hash值并進(jìn)行分發(fā),即對應(yīng)同一張表的binlog數(shù)據(jù),會始終按序路由給同一個binlog數(shù)據(jù)流,適用于表的數(shù)量較多且希望針對單張表的操作(如DML、DDL等)在binlog日志流中保持有序的場景。
記錄級別按照數(shù)據(jù)行的主鍵計(jì)算Hash值并進(jìn)行分發(fā),即對應(yīng)同一數(shù)據(jù)行的binlog數(shù)據(jù),會始終按序路由給同一個binlog數(shù)據(jù)流,適用于希望將數(shù)據(jù)充分打散且不要求日志數(shù)據(jù)按庫或按表保持有序的場景,該策略要求數(shù)據(jù)表必須含有主鍵,無主鍵表的數(shù)據(jù)會被直接丟棄。
使用例子:
MySQL相關(guān)指令體驗(yàn):
PolarDB-X CDC引入多流形態(tài),可以在滿足binlog兼容性的同時,結(jié)合業(yè)務(wù)場景提升分布式增量日志變更的吞吐量。同時CDC多流形態(tài),為了更好的兼容現(xiàn)有binlog開源生態(tài),聯(lián)合alibaba canal提供了多流兼容消費(fèi)的能力,參考PR:add support for polardbx multi binlog streams #4660
canal使用例子:
參考文檔:
CDC單流性能解讀,Sysbench 30w QPS / TPC-C 100w tpmC下,增量數(shù)據(jù)延遲時間 < 1秒
CDC高可用架構(gòu)解讀,可以在各種故障形態(tài)下,滿足RTO在20~45秒內(nèi)
CDC多流形態(tài),以及 如何創(chuàng)建CDC節(jié)點(diǎn)
03 基于時間點(diǎn)的恢復(fù)(point-in-time recovery, PITR)
PolarDB-X 2.2.0的版本中,我們正式提供了靜態(tài)的全量備份集恢復(fù)能力,通過 PolarDB-X Buckup工具 (基于XtraBuckup改造而來) ,我們基于DN的物理備份的方式,結(jié)合分布式并行提升備份吞吐量,備份速度可達(dá)到GB/s,同時提供了分布式下的一致備份集。
在阿里云數(shù)據(jù)庫服務(wù)用戶過程中,經(jīng)常會遇到用戶誤刪數(shù)據(jù)后期望通過備份恢復(fù)的方式找回數(shù)據(jù),對于基于時間點(diǎn)的恢復(fù)有比較強(qiáng)的訴求。因此,PolarDB-X 2.2.1開源版本中,我們提供了日志增量備份 + 基于時間點(diǎn)的恢復(fù)的完整能力,滿足用戶數(shù)據(jù)庫安全性的需求。
大致的工作原理:

說明:
全量備份集,指定調(diào)度規(guī)則進(jìn)行定期全量備份,參考文檔:PolarDB-X 備份調(diào)度
增量日志備份,準(zhǔn)實(shí)時備份增量的日志數(shù)據(jù),備份的實(shí)時性決定了數(shù)據(jù)可恢復(fù)的最近時間點(diǎn),參考文檔:PolarDB-X 增量日志備份
發(fā)起指定時間點(diǎn)恢復(fù)(PITR),找到恢復(fù)時間點(diǎn)最近的一個全量備份集,再從增量備份中找到全量備份集時間點(diǎn)和恢復(fù)時間點(diǎn)之間的增量日志,執(zhí)行一個全量+增量的物理恢復(fù),參考文檔:PolarDB-X 指定時間點(diǎn)恢復(fù)
使用的例子:
04 MySQL一鍵導(dǎo)入PolarDB-X
開源MySQL的主備復(fù)制協(xié)議,主要支持增量日志的同步和消費(fèi),在MySQL 8.0開始在內(nèi)核中新增了Clone Plugin,全量通過物理文件拷貝,結(jié)合增量日志的同步和消費(fèi)提供了clone實(shí)例的效果。
PolarDB-X作為分布式數(shù)據(jù)庫,在物理數(shù)據(jù)分布和文件格式上和開源MySQL略有差異,為了方便用戶體驗(yàn)類似MySQL 8.0的Clone Plugin的效果,PolarDB-X 2.2.1提供了類似Clone Plugin的一鍵導(dǎo)入能力,通過一條DDL指令,可以對存量MySQL進(jìn)行表結(jié)構(gòu)遷移、存量數(shù)據(jù)的全量遷移,最后保持一個持續(xù)的增量數(shù)據(jù)同步
工作原理:

PolarDB-X 一鍵導(dǎo)入工作原理
使用例子:
整個操作體驗(yàn),最大化的兼容了MySQL DBA的運(yùn)維體驗(yàn),基于常見的主備復(fù)制管理方式可以很方便的實(shí)現(xiàn)單機(jī)MySQL到PolarDB-X分布式的一鍵遷移,如果考慮數(shù)據(jù)割接后的回滾鏈路,可以反向配置PolarDB-X到MySQL的主備復(fù)制鏈路。
參考文檔:PolarDB-X 一鍵導(dǎo)入
更詳細(xì)的ChangeLog
PolarDB-X 各組件的開源地址,歡迎訪問github

結(jié)尾
PolarDB-X 是由阿里自主研發(fā)的原生MySQL分布式數(shù)據(jù)庫,堅(jiān)持以全內(nèi)核開源的方式,保持開源的持續(xù)迭代。本次發(fā)布V2.2.1的升級版本,重點(diǎn)加強(qiáng)了生產(chǎn)級關(guān)鍵能力,全面提升PolarDB-X面向數(shù)據(jù)庫生產(chǎn)環(huán)境的易用性和安全性。期望PolarDB-X未來能作為國內(nèi)原生MySQL分布式數(shù)據(jù)庫的開源領(lǐng)導(dǎo)者,持續(xù)做好開源!