9月16日,Distributed Cloud|2021全球分布式云大會(huì)·上海站隆重召開。在全球分布式云大會(huì)不懈布道下,云計(jì)算行業(yè)對(duì)分布式云的關(guān)注度愈發(fā)高漲,以全球分布式云聯(lián)盟成員為代表,涌現(xiàn)出了大量分布式云技術(shù)和實(shí)踐成果,為分布式云計(jì)算發(fā)展夯實(shí)了基礎(chǔ)。
2021全球分布式云大會(huì)為分布式云計(jì)算發(fā)展再添強(qiáng)大推力,本次大會(huì)共設(shè)有分布式云主題報(bào)告會(huì)、邊緣云論壇、云原生專題論壇、分布式數(shù)據(jù)庫(kù)論壇四大論壇,圍繞分布式云、邊緣算力、云原生、分布式架構(gòu)等技術(shù)與實(shí)踐展開。全球分布式云聯(lián)盟聯(lián)合阿里云、騰訊云、Google Cloud、中興通訊、京東云、安邁云、網(wǎng)心科技等國(guó)內(nèi)外分布式云頂尖技術(shù)服務(wù)商,共話分布式云創(chuàng)新新趨勢(shì),共謀云計(jì)算變革新未來,共享分布式云計(jì)算新紅利!
在9月16日下午召開的分布式數(shù)據(jù)庫(kù)論壇上,阿里云 數(shù)據(jù)庫(kù)技術(shù)專家 王歡明發(fā)表了題為《云原生分布式數(shù)據(jù)庫(kù) PolarDB-X 的技術(shù)演進(jìn)》的主題演講。
PolarDB-X是什么?
PolarDB-X最早起源于阿里集團(tuán),阿里研發(fā)了TDDL分庫(kù)分表中間件。2014年阿里集團(tuán)開始全面上云,將TDDL升級(jí)成DRDS分布式數(shù)據(jù)庫(kù)服務(wù),實(shí)現(xiàn)了在線擴(kuò)縮容以及數(shù)據(jù)拆分等能力。2018后,國(guó)內(nèi)分布式數(shù)據(jù)庫(kù)技術(shù)進(jìn)入一個(gè)百家爭(zhēng)鳴的局面,阿里在這方面也做了很多探索,經(jīng)過對(duì)X-DB、PolarDB等技術(shù)整合,誕生了PolarDB-X。
PolarDB-X結(jié)合了harding On MySQL、NewSQL、Cloud Native DB幾種數(shù)據(jù)庫(kù)理念的精華,具有云原生分布式的特性,底層使用了PolarDB云原生數(shù)據(jù)庫(kù)的技術(shù),上層用到了很多分布式技術(shù)。
PolarDB-X 技術(shù)架構(gòu)
PolarDB-X采用經(jīng)典的兩層架構(gòu),分計(jì)算層和存儲(chǔ)層。計(jì)算層用的PolarDB-X,可以獨(dú)立水平擴(kuò)展、擴(kuò)縮容,各種能力完備。在整個(gè)系統(tǒng)里,一條SQL經(jīng)過自研的解析器、優(yōu)化器,得到分布式的執(zhí)行計(jì)劃;然后發(fā)送到存儲(chǔ)節(jié)點(diǎn)執(zhí)行;在中間的網(wǎng)絡(luò)傳輸層,使用了定制的RPC協(xié)議,效率遠(yuǎn)高于傳統(tǒng)的JDBC協(xié)議;之后執(zhí)行計(jì)劃會(huì)發(fā)送到PolarDB-X的執(zhí)行引擎里去做具體的計(jì)算。
PolarDB-X目前具有高可用、高可擴(kuò)展、極致彈性,高兼容、HTAP、開放生態(tài),在MySQL生態(tài)里是一款具有競(jìng)爭(zhēng)力的產(chǎn)品。
PolarDB-X的幾個(gè)關(guān)鍵技術(shù)
分布式事務(wù)如何實(shí)現(xiàn)ACID?
如果分布式數(shù)據(jù)庫(kù)要支持金融轉(zhuǎn)賬場(chǎng)景,就必須支持分布式事務(wù),才能保證一致性,不會(huì)發(fā)生數(shù)據(jù)丟失等這些異常。縱觀業(yè)界技術(shù),可以歸成幾類,第一類是基于MySQL的XA技術(shù),實(shí)現(xiàn)兩階段提交缺點(diǎn)是不能保證全局一致,不能保證全局快照。第二類是TSO技術(shù)做全局分配,實(shí)現(xiàn)給全局的事務(wù)定序,從而實(shí)現(xiàn)分布式快照第三是HLC技術(shù),也存在一定的局限性。第四是在PG里比較多使用的GTM技術(shù)。這幾項(xiàng)技術(shù)目前沒有一個(gè)能完美解決所有場(chǎng)景,都需要在性能、可用性、擴(kuò)展性方面去做權(quán)衡。PolarDB-X認(rèn)為TSO比較契合公有云以及混合云的技術(shù)。
PolarDB-X基于TSO技術(shù)實(shí)現(xiàn)全局分布式事務(wù)。第一個(gè)問題是如何去做全局時(shí)鐘,也就是TSO。TSO會(huì)給分布式事務(wù)做定序,按照時(shí)間戳的順序去做排序。第二個(gè)問題是如何基于MySQL的InnoDB做分布式事務(wù)。PolarDB-X對(duì)InnoDB的事務(wù)系統(tǒng)做了深度改造,從原本的ReadView的事務(wù)機(jī)制改造成基于時(shí)間戳的事務(wù)系統(tǒng)。有了基于時(shí)間戳的事務(wù)系統(tǒng)之后,結(jié)合TSO技術(shù),就可以實(shí)現(xiàn)全局一致的分布式事務(wù)。除此之外,事務(wù)里還有很多的技術(shù)難點(diǎn),如何處理長(zhǎng)寫事務(wù)以及做全局的垃圾回收。
用TSO技術(shù)有一個(gè)必須要解決的問題——通常會(huì)增加幾十微秒到幾百微秒的RT。因此,PolarDB-X實(shí)現(xiàn)了一階段提交、2PC的異步提交等優(yōu)化,能夠盡量克服TSO帶來的性能損失。
實(shí)現(xiàn)上述性能優(yōu)化之后,經(jīng)過與業(yè)界產(chǎn)品在sysbench和TPCC等測(cè)試集做了性能對(duì)比,PolarDB-X的性能相對(duì)來說有競(jìng)爭(zhēng)力。
透明分布式如何優(yōu)化易用性?
透明分布式主要解決的問題是分布式數(shù)據(jù)庫(kù)的使用門檻。很多分布式數(shù)據(jù)庫(kù)技術(shù)聽起來很,但用戶卻認(rèn)為很難用。比如用戶常常困擾,為什么某些場(chǎng)景的性能會(huì)不如一個(gè)單機(jī)系統(tǒng),或者某些功能不具備,或者問題難以排查?從我們對(duì)服務(wù)用戶的經(jīng)驗(yàn)來看,用戶在使用分布式數(shù)據(jù)庫(kù)過程中通常會(huì)遇到幾個(gè)門檻,即如何選擇拆分鍵、如何優(yōu)化分布式事務(wù)、如何優(yōu)化慢查詢。因此,我們研發(fā)了透明分布式的項(xiàng)目,試圖降低用戶使用分布式數(shù)據(jù)庫(kù)的門檻。
第一,如何做Sharding。每個(gè)產(chǎn)品都有不同的解決方案,PolarDB-X結(jié)合了MySQL分區(qū)表語法,從語法上完全兼容MySQL列表,使用二級(jí)分區(qū)覆蓋到用戶的各種Workload。這背后是基于一致性哈希算法,實(shí)現(xiàn)分區(qū)級(jí)的動(dòng)態(tài)分裂,大大降低擴(kuò)縮容的代價(jià)。以Range分區(qū)為例,一開始可能是4千到5千這個(gè)數(shù)據(jù)范圍,當(dāng)這個(gè)Range的數(shù)據(jù)變多之后,它可以分裂成多個(gè)Range,遷移到多個(gè)機(jī)器上,避免數(shù)據(jù)過于集中。將這些技術(shù)融入PolarDB-X中,能夠有效解決熱點(diǎn)數(shù)據(jù)等問題。
第二,PolarDB-X做的跟其他產(chǎn)品有差異化的技術(shù),是TableGroup。它解決的問題是Join下推,這是阿里的業(yè)務(wù)場(chǎng)景中非常常見。如果不能做Join的下推,做分布式Join的性能會(huì)比較差。在PolarDB-X中,多個(gè)表按一個(gè)分區(qū)方式做Partition,它們就會(huì)放置于同一個(gè)TableGroup,因此就可以實(shí)現(xiàn)Join下推。當(dāng)然對(duì)應(yīng)的,一個(gè)TableGroup中的分區(qū)分裂、遷移,都需要以PartitionGroup為單位了。
第三,擴(kuò)縮容離不開的一個(gè)問題,就是Online DDL。例如PolarDB-X支持單表、拆分表、分區(qū)表,當(dāng)用戶對(duì)表類型進(jìn)行修改,把分區(qū)鍵從買家ID改成賣家ID的時(shí)候,背后就是用Online DDL的技術(shù)。PolarDB-X支持多種的Online DDL,包括拆分鍵修改、創(chuàng)建索引、加減列等等,這些操作都可以在線上直接執(zhí)行,對(duì)用戶業(yè)務(wù)影響非常小。
PolarDB-X的透明分布式提供了分區(qū)表、全局索引、Online DDL等技術(shù),使得用戶的業(yè)務(wù)能夠以很低的成本接入到分布式數(shù)據(jù)庫(kù)中,并且后續(xù)隨著業(yè)務(wù)的發(fā)展,數(shù)據(jù)庫(kù)還可以做通過Scale-Up或者Scale-Out的方式提高性能。
HTAP技術(shù)如何提高分析能力
所謂HTAP,在PolarDB-X的理解中,即能否在線上數(shù)據(jù)庫(kù)中執(zhí)行復(fù)雜查詢。它的價(jià)值有兩方面,一方面是能夠降低用戶的使用成本、運(yùn)維成本,另一方面,就是實(shí)時(shí)的分析,能夠從實(shí)時(shí)數(shù)據(jù)獲得實(shí)時(shí)洞察。做HTAP面對(duì)的技術(shù)挑戰(zhàn)有幾方面,分別是負(fù)載隔離、計(jì)算能力、存儲(chǔ)能力。
對(duì)應(yīng)到PolarDB-X的架構(gòu),會(huì)通過只讀節(jié)點(diǎn)做負(fù)載隔離,簡(jiǎn)單查詢發(fā)到讀寫節(jié)點(diǎn),復(fù)雜查詢發(fā)到只讀節(jié)點(diǎn)執(zhí)行,因此這兩種負(fù)載能夠得到較好的隔離,不會(huì)相互影響。這中間的智能路由是通過優(yōu)化器的代價(jià)估算去實(shí)現(xiàn),代價(jià)高的判定為AP查詢,代價(jià)低的判定TP查詢。除此之外,這種架構(gòu)還需要解決的一個(gè)問題是一致性快照,PolarDB-X通過TSO技術(shù),實(shí)現(xiàn)了只讀節(jié)點(diǎn)的分布式事務(wù)。
接下來的問題是如何提升計(jì)算能力和存儲(chǔ)能力。
提高計(jì)算能力主要通過MPP并行計(jì)算、向量化計(jì)算等方式。此前PolarDB-X主要面向TP場(chǎng)景,做算子下推,以及通過分區(qū)裁剪盡量查詢更少的分片,優(yōu)化TP場(chǎng)景的性能。而面對(duì)AP場(chǎng)景,需要的技術(shù)則很不一樣。具體來說,PolarDB-X提供了原生的MPP支持,能夠充分發(fā)揮多個(gè)節(jié)點(diǎn)的資源進(jìn)行計(jì)算。為此,優(yōu)化器里中增加了MPP優(yōu)化階段,在單機(jī)執(zhí)行計(jì)劃之后,中間加入Exchange,變成分布式的執(zhí)行計(jì)劃,實(shí)現(xiàn)多機(jī)并行。具體到執(zhí)行器,也會(huì)有兩種執(zhí)行模式,一種是本地單機(jī)執(zhí)行,另一種是MPP分布式執(zhí)行。
具體來看,在MPP并行計(jì)算中,PolarDB-X做了兩層的并行,第一層是節(jié)點(diǎn)之間的并行,第二層是計(jì)算節(jié)點(diǎn)內(nèi)部的運(yùn)行。分為兩層的好處在于能夠減少調(diào)度開銷,減少數(shù)據(jù)傳輸?shù)拈_銷。除此之外,PolarDB-X還做了內(nèi)存池化、流水線化、向量化等精細(xì)化的技術(shù),通過向量化提高執(zhí)行器的執(zhí)行效率,通過流水線化增加并行度減少數(shù)據(jù)物化。這些技術(shù)使得PolarDB-X在執(zhí)行復(fù)雜SQL查詢時(shí)具有較高的效率。
除此之外,就是提高存儲(chǔ)方面的性能。從技術(shù)角度看,單獨(dú)做一個(gè)行存、列存都不難,難的是做一個(gè)能夠?qū)崟r(shí)更新的列存。PolarDB-X采用的方案是在寫入節(jié)點(diǎn)用行存,在只讀節(jié)點(diǎn)用列存,中間通過redo做異步復(fù)制,實(shí)現(xiàn)列存的實(shí)時(shí)更新?;谶@樣的架構(gòu),就可以實(shí)現(xiàn)行列混存,行存承擔(dān)高并發(fā)寫入,列存承擔(dān)復(fù)雜查詢。結(jié)合MPP、行列混存、向量化等技術(shù),PolarDB-X實(shí)現(xiàn)了TPC-H場(chǎng)景的510倍的性能提升。這一成果也即將在公有云上線,敬請(qǐng)期待。
總結(jié)
PolarDB-X能夠高度兼容單機(jī)MySQL,從SQL兼容到事務(wù)兼容到生態(tài)兼容。在此基礎(chǔ)上,通過透明分布式的技術(shù)降低用戶使用門檻,使得用戶可以快速上手,適配各種用戶業(yè)務(wù),并通過彈性擴(kuò)縮容的能力,適應(yīng)用戶的業(yè)務(wù)變化。而HTAP技術(shù),將形成差異化的競(jìng)爭(zhēng)力,使得用戶能夠從在線數(shù)據(jù)中獲得實(shí)時(shí)洞察。