深度干货|云原生分布式数据库 PolarDB-X 的技术演进
簡介:?深入解讀PolarDB-X的產品架構,以及分布式事務、透明分布式、水平擴展等技術內幕。
一、PolarDB-X是什么
PolarDB-X最早起源于阿里集團2009年提出用分布式架構替代傳統商業數據庫,阿里研發了TDDL分庫分表中間件。2014年阿里集團開始全面上云,將TDDL升級成DRDS分布式數據庫服務,實現了在線擴縮容以及數據拆分等能力。2018年后,國內分布式數據庫技術進入一個百家爭鳴的局面,阿里在這方面也做了很多探索,經過對X-DB、PolarDB等技術整合,誕生了PolarDB-X。
PolarDB-X結合了Sharding ?On ?MySQL、NewSQL、Cloud ?Native ?DB幾種數據庫理念的精華,具有云原生分布式的特性,底層使用了PolarDB云原生數據庫的技術,上層用到了很多分布式技術。
二、PolarDB-X 技術架構
PolarDB-X采用經典的兩層架構,分計算層和存儲層。計算層用的PolarDB-X,可以獨立水平擴展、擴縮容,各種能力完備。在整個系統里,一條SQL經過自研的解析器、優化器,得到分布式的執行計劃;然后發送到存儲節點執行;在中間的網絡傳輸層,使用了定制的RPC協議,效率遠高于傳統的JDBC協議;之后執行計劃會發送到PolarDB-X的執行引擎里去做具體的計算。
PolarDB-X目前具有高可用、高可擴展、極致彈性等幾個特性,高兼容、HTAP、開放生態,在MySQL生態里是一款具有競爭力的產品。
三、PolarDB-X的幾個關鍵技術
(一)分布式事務,如何實現ACID?
如果分布式數據庫要支持金融轉賬場景,就必須支持分布式事務,才能保證一致性,不會發生數據丟失等異常。縱觀業界技術,可以歸成以下幾類,第一類是基于MySQL的XA技術,實現兩階段提交;缺點是不能保證全局一致,不能保證全局快照。第二類是TSO技術做全局分配,實現給全局的事務定序,從而實現分布式快照。第三是HLC技術,也存在一定的局限性。第四類是在PG里比較多使用的GTM技術。這幾項技術目前沒有一個能完美解決所有場景,都需要在性能、可用性、擴展性方面去做權衡。PolarDB-X認為TSO是比較契合公有云以及混合云的技術。
PolarDB-X基于TSO技術實現全局分布式事務。第一個問題是如何去做全局時鐘,也就是TSO。TSO會給分布式事務做定序,按照時間戳的順序去做排序。第二個問題是如何基于MySQL的InnoDB做分布式事務。PolarDB-X對InnoDB的事務系統做了深度改造,從原本的ReadView的事務機制改造成基于時間戳的事務系統。有了基于時間戳的事務系統之后,結合TSO技術,就可以實現全局一致的分布式事務。除此之外,事務里還有很多的技術難點,如何處理長寫事務以及做全局的垃圾回收。
用TSO技術有一個必須要解決的問題——通常會增加幾十微秒到幾百微秒的RT。因此,PolarDB-X實現了一階段提交、2PC的異步提交等優化,能夠盡量克服TSO帶來的性能損失。
實現上述性能優化之后,經過與業界產品在sysbench和TPCC等測試集做了性能對比,PolarDB-X的性能相對來說非常有競爭力。
(二)透明分布式,如何優化易用性?
透明分布式主要解決的問題是分布式數據庫的使用門檻。很多分布式數據庫技術聽起來很好,但用戶卻認為很難用。比如用戶常常困擾,為什么某些場景的性能會不如一個單機系統,或者某些功能不具備,或者問題難以排查?從我們對服務用戶的經驗來看,用戶在使用分布式數據庫過程中通常會遇到以下幾個門檻,即如何選擇拆分鍵、如何優化分布式事務、如何優化慢查詢。因此,我們研發了透明分布式的項目,試圖降低用戶使用分布式數據庫的門檻。
第一,如何做Sharding。每個產品都有不同的解決方案,PolarDB-X結合了MySQL分區表語法,從語法上完全兼容MySQL列表,使用二級分區覆蓋到用戶的各種Workload。這背后是基于一致性哈希算法,實現分區級的動態分裂,大大降低擴縮容的代價。以Range分區為例,一開始可能是4千到5千這個數據范圍,當這個Range的數據變多之后,它可以分裂成多個Range,遷移到多個機器上,避免數據過于集中。將這些技術融入PolarDB-X中,能夠有效解決熱點數據等問題。
第二,PolarDB-X做的跟其他產品有差異化的技術,是TableGroup。它解決的問題是Join下推,這是阿里的業務場景中非常常見。如果不能做Join的下推,做分布式Join的性能會比較差。在PolarDB-X中,多個表按一個分區方式做Partition,它們就會放置于同一個TableGroup,因此就可以實現Join下推。當然對應的,一個TableGroup中的分區分裂、遷移,都需要以PartitionGroup為單位了。
第三,擴縮容離不開的一個問題,就是Online DDL。例如PolarDB-X支持單表、拆分表、分區表,當用戶對表類型進行修改,把分區鍵從買家ID改成賣家ID的時候,背后就是用Online DDL的技術。PolarDB-X支持多種的Online DDL,包括拆分鍵修改、創建索引、加減列等等,這些操作都可以在線上直接執行,對用戶業務影響非常小。
PolarDB-X的透明分布式提供了分區表、全局索引、Online DDL等技術,使得用戶的業務能夠以很低的成本接入到分布式數據庫中,并且后續隨著業務的發展,數據庫還可以做通過Scale-Up或者Scale-Out的方式提高性能。
(三)HTAP技術,如何提高分析能力
所謂HTAP,在PolarDB-X的理解中,即能否在線上數據庫中執行復雜查詢。它的價值有兩方面,一方面是能夠降低用戶的使用成本、運維成本,另一方面,就是實時的分析,能夠從實時數據獲得實時洞察。做HTAP面對的技術挑戰有幾方面,分別是負載隔離、計算能力、存儲能力。
對應到PolarDB-X的架構,會通過只讀節點做負載隔離,簡單查詢發到讀寫節點,復雜查詢發到只讀節點執行,因此這兩種負載能夠得到較好的隔離,不會相互影響。這中間的智能路由是通過優化器的代價估算去實現,代價高的判定為AP查詢,代價低的判定TP查詢。除此之外,這種架構還需要解決的一個問題是一致性快照,PolarDB-X通過TSO技術,實現了只讀節點的分布式事務。
接下來的問題是如何提升計算能力和存儲能力。
提高計算能力主要通過MPP并行計算、向量化計算等方式。此前PolarDB-X主要面向TP場景,做算子下推,以及通過分區裁剪盡量查詢更少的分片,優化TP場景的性能。而面對AP場景,需要的技術則很不一樣。具體來說,PolarDB-X提供了原生的MPP支持,能夠充分發揮多個節點的資源進行計算。為此,優化器里中增加了MPP優化階段,在單機執行計劃之后,中間加入Exchange,變成分布式的執行計劃,實現多機并行。具體到執行器,也會有兩種執行模式,一種是本地單機執行,另一種是MPP分布式執行。
具體來看,在MPP并行計算中,PolarDB-X做了兩層的并行,第一層是節點之間的并行,第二層是計算節點內部的運行。分為兩層的好處在于能夠減少調度開銷,減少數據傳輸的開銷。除此之外,PolarDB-X還做了內存池化、流水線化、向量化等精細化的技術,通過向量化提高執行器的執行效率,通過流水線化增加并行度減少數據物化。這些技術使得PolarDB-X在執行復雜SQL查詢時具有較高的效率。
除此之外,就是提高存儲方面的性能。從技術角度看,單獨做一個行存、列存都不難,難的是做一個能夠實時更新的列存。PolarDB-X采用的方案是在寫入節點用行存,在只讀節點用列存,中間通過redo做異步復制,實現列存的實時更新。基于這樣的架構,就可以實現行列混存,行存承擔高并發寫入,列存承擔復雜查詢。結合MPP、行列混存、向量化等技術,PolarDB-X實現了TPC-H場景的5-10倍的性能提升。這一成果也即將在公有云上線,敬請期待。
四、總結
PolarDB-X能夠高度兼容單機MySQL,從SQL兼容到事務兼容到生態兼容。在此基礎上,通過透明分布式的技術降低用戶使用門檻,使得用戶可以快速上手,適配各種用戶業務,并通過彈性擴縮容的能力,適應用戶的業務變化。而HTAP技術,將形成差異化的競爭力,使得用戶能夠從在線數據中獲得實時洞察。
原文鏈接
本文為阿里云原創內容,未經允許不得轉載。?
總結
以上是生活随笔為你收集整理的深度干货|云原生分布式数据库 PolarDB-X 的技术演进的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 阿里园区的这个“格子间” 成为企业高效协
- 下一篇: 人人都是 Serverless 架构师