數(shù)據(jù)庫與芯片、操作系統(tǒng)并列為全球信息技術(shù)三大件,也是企業(yè)IT系統(tǒng)必不可少的核心技術(shù),同時也是一切數(shù)字處理、計算力和智能化的基石。
上世紀70年代,E.F.Codd 發(fā)表了一篇劃時代的論文“A Relational Model of Data for Large Shared Data Banks”。從這篇論文開始,關(guān)系型數(shù)據(jù)庫軟件革命的序幕被拉開了。
80年代初期支持SQL的商用關(guān)系型數(shù)據(jù)庫Oracle和DB2相繼面市,以及90年代誕生的SQL Server,開源的MySQL、PostgreSQL等都是關(guān)系型數(shù)據(jù)庫成功的代表。
時至今日,隨著全球不同類型數(shù)據(jù)的指數(shù)級增長,市場上涌現(xiàn)出越來越多的新型數(shù)據(jù)庫,然而關(guān)系型數(shù)據(jù)庫仍然占據(jù)主導地位。根據(jù)市場研究機構(gòu)IDC的最新統(tǒng)計數(shù)據(jù)顯示,關(guān)系型在全球數(shù)據(jù)庫中占據(jù)約80%的份額。
關(guān)系型數(shù)據(jù)庫經(jīng)受住時間的考驗,為全世界用戶的鐘愛,最主要的原因之一就是關(guān)系型數(shù)據(jù)庫采用了SQL標準,這種高級的非過程化編程接口語言,將計算機科學和易于人類理解認知的數(shù)據(jù)管理方式完美的銜接在了一起。到今天,這種編程語言還沒有更加完美的替代品。
數(shù)十年來,關(guān)系型數(shù)據(jù)庫都應用在以IOE為代表的軟硬件緊耦合的技術(shù)架構(gòu)環(huán)境之下,但是今天,關(guān)系型數(shù)據(jù)庫面對著云計算是承載工作流的主要環(huán)境的巨大改變。
這種使用環(huán)境的變革性遷移之下,客戶對關(guān)系型數(shù)據(jù)庫也提出了新的要求,比如可以支持更大的存儲、彈性擴縮容上更靈活,甚至數(shù)據(jù)庫可以實現(xiàn)“自動駕駛”。
阿里云的數(shù)據(jù)庫團隊認識到,如果基于傳統(tǒng)關(guān)系型數(shù)據(jù)庫的架構(gòu)進行小修小補,很難解決這些客戶提出的問題,必須從根本上演進云上的關(guān)系型數(shù)據(jù)庫架構(gòu),做一個全新的云原生關(guān)系型數(shù)據(jù)庫。
PolarDB云原生關(guān)系型數(shù)據(jù)庫也就此誕生。
過去5年,阿里云針對PolarDB進行了諸多創(chuàng)新,通過采用存儲計算分離、軟硬一體化設計,PolarDB實現(xiàn)成本僅為傳統(tǒng)商業(yè)數(shù)據(jù)庫的十分之一。所實現(xiàn)的計算、內(nèi)存與存儲資源的“三層解耦”架構(gòu)、多主多寫、基于IMCI(內(nèi)存列存索引)的HTAP、Serverless等功能已是全球首創(chuàng)或業(yè)內(nèi)領(lǐng)先的技術(shù)。
從PolarDB發(fā)布以來,它在技術(shù)和商業(yè)化上都獲得了迅猛發(fā)展,如今已經(jīng)成為阿里云數(shù)據(jù)庫產(chǎn)品家族中最閃耀的產(chǎn)品。
在本文中,我們將向大家詳細介紹,PolarDB發(fā)布5年來所實現(xiàn)的技術(shù)創(chuàng)新。
01 “三層解耦”:資源解耦的極致
從40多年前數(shù)據(jù)庫誕生開始,數(shù)據(jù)庫的CPU和內(nèi)存都是綁定在一起的,最多做到計算和存儲解耦,沒有數(shù)據(jù)庫能做到CPU和內(nèi)存的解耦,即使演進到目前的云原生數(shù)據(jù)庫階段,在PolarDB之前也沒有任何數(shù)據(jù)庫能夠做到這一點。
然而在云計算時代,每一層的資源解耦都可以使得彈性能力帶來數(shù)量級的提升。當前云原生數(shù)據(jù)庫雖然實現(xiàn)了計算存儲的解耦,相對于傳統(tǒng)數(shù)據(jù)庫,其彈性能力有了不小的提升,但是CPU和內(nèi)存的強耦合極大地限制了彈性能力的進一步提升,難以實現(xiàn)秒級跨機遷移;同時也限制了內(nèi)存的橫向擴展,使得內(nèi)存受到單機容量限制。
PolarDB歷史性地提出并實現(xiàn)了基于CPU、內(nèi)存和存儲資源分離的“三層解耦”架構(gòu),構(gòu)建了獨立的CPU資源池、分布式內(nèi)存資源池、分布式存儲資源池,實現(xiàn)了資源的徹底解耦,CPU和內(nèi)存分別獨立計費。同時通過分布式內(nèi)存和數(shù)據(jù)庫秒級跨機遷移,使得彈性能力有了數(shù)量級的提升,大幅降本增效。
02 多主架構(gòu):云原生數(shù)據(jù)庫不再是單寫數(shù)據(jù)庫
云原生數(shù)據(jù)庫從誕生開始,就和一寫多讀綁定在了一起,似乎云原生數(shù)據(jù)庫天生只能是單寫。
寫擴展能力的缺失,給用戶帶來了很大的困擾,很多用戶在寫節(jié)點到達甚至接近最大規(guī)格一半的時候,就開始擔憂后續(xù)業(yè)務快速增長會導致數(shù)據(jù)庫出現(xiàn)瓶頸,因此不得不重新考慮其他數(shù)據(jù)庫架構(gòu)方案,而放棄云原生數(shù)據(jù)庫;亦或是依賴傳統(tǒng)數(shù)據(jù)庫的橫向擴展方案,例如中間件來實現(xiàn)橫向擴展。
雖然業(yè)內(nèi)也有個別廠商開始嘗試多主節(jié)點,單受限于節(jié)點數(shù),并不能實現(xiàn)真正的橫向?qū)憯U展。
作為應云而生的云原生數(shù)據(jù)庫,有沒有一個云原生的解決方案來實現(xiàn)寫擴展呢?“PolarDB多主架構(gòu)”由此而生。這是業(yè)內(nèi)第一個支持大規(guī)模多主多寫的云原生數(shù)據(jù)庫,最大支持32個寫節(jié)點。
在PolarDB多主架構(gòu)中,阿里云在整體架構(gòu)從元數(shù)據(jù)、事務、鎖、Undo/Redo、IO、代理等所有子系統(tǒng)均做了多主化改造;并采用了PolarFusion技術(shù),實現(xiàn)了多個寫節(jié)點的高效數(shù)據(jù)交互。
PolarDB多主架構(gòu)從根本上解決了用戶的單主焦慮,使得PolarDB第一次突破了單主限制,實現(xiàn)了橫向?qū)憯U展;數(shù)據(jù)互通后的主主互備通過消除備節(jié)點在RTO不變的情況下節(jié)約一半的成本;跨主節(jié)點秒級流量切換也為SaaS、游戲等行業(yè)解決了多租戶/游戲服的跨節(jié)點調(diào)度提供了強有力的手段。
03 Serverless的跨機突破
Serverless是最適合云數(shù)據(jù)庫的一種交付模式,實現(xiàn)了On-demand Provision,使得用戶不需要再為數(shù)據(jù)庫規(guī)劃容量,在高峰時自動升配提升穩(wěn)定性,在低峰時自動降配降低成本。因此一時間云數(shù)據(jù)庫廠商都紛紛推出了自己的Serverless形態(tài)。
然而,當前業(yè)內(nèi)的數(shù)據(jù)庫Serverless形態(tài)均為單機Serverless,其容量上限受到了很大的限制(8~32 core),并不能很好的實現(xiàn)其高峰時自動升配以保障穩(wěn)定性的目標,也限制了企業(yè)級客戶的使用,同時讀寫節(jié)點自身的升降配對本節(jié)點的吞吐同樣存在影響。
這些限制的本質(zhì)是目前云數(shù)據(jù)庫的無感跨機彈性和強一致跨機擴展能力都尚不成熟,導致當前的Serverless只能實現(xiàn)單節(jié)點下有限的Serverless。
跨機彈性的限制是節(jié)點無法跨機調(diào)度,因此單節(jié)點彈性上限只能限制到一個遠小于物理機限制的值;而跨機強一致讀擴展的能力缺失,導致其無法通過增刪強一致的只讀節(jié)點來實現(xiàn)讀流量的彈性。
為解決單機Serverless的局限性,阿里云在業(yè)內(nèi)第一次突破了這兩個技術(shù)難點:基于事務續(xù)傳和秒級切換的無感秒切技術(shù),解決跨機彈性問題;性能無損的強一致讀技術(shù),結(jié)合熱節(jié)點池技術(shù),解決跨機透明讀擴展問題。
基于以上技術(shù)突破,PolarDB Serverless的上限規(guī)格突破了1000core,帶來了數(shù)量級的Serverless能力提升,使得Serverless技術(shù)有了支撐企業(yè)級業(yè)務的能力。
04 HTAP:同時處理交易和分析性負載
傳統(tǒng)面向OLTP場景設計的關(guān)系型數(shù)據(jù)庫,一般優(yōu)化目標是提升單核性能/多核擴展性/增強集群能力以提升可用性等,其分析性能往往不佳。然而真實業(yè)務的SQL又天然是TP/AP混合的,其需要事務處理和實時數(shù)據(jù)分析兼具的HTAP系統(tǒng)。
面對此問題,傳統(tǒng)方案是使用一套數(shù)據(jù)同步系統(tǒng)串聯(lián)起上游的TP系統(tǒng)和下游的數(shù)倉系統(tǒng),形成一套搭積木的方案,用多套系統(tǒng)的組合來完成任務。
在云數(shù)據(jù)庫時代這種架構(gòu)因為串聯(lián)了OLTP數(shù)據(jù)庫,消息中間件,OLAP數(shù)據(jù)庫三套系統(tǒng),上下游協(xié)議不兼容,運行維護復雜。在云上很難規(guī)模部署以滿足各種客戶的需求。
針對這些問題,在PolarDB云原生數(shù)據(jù)庫領(lǐng)域的技術(shù)積累基礎(chǔ)上,阿里云在PolarDB上推出了In-Memory Column Index功能,其為PolarDB帶來列式存儲以及內(nèi)存計算能力,讓用戶可以在一套PolarDB數(shù)據(jù)庫上同時運行OLTP和OLAP型混合負載,在保證現(xiàn)有PolarDB優(yōu)異的OLTP性能的同時,大幅提升PolarDB在大數(shù)據(jù)量上運行復雜查詢的性能,讓PolarDB真正成為一款HTAP數(shù)據(jù)庫。
PolarDB HTAP包含如下幾個關(guān)鍵技術(shù)創(chuàng)新:
1、PolarDB存儲引擎新增對列式索引(Columnar Index)的支持,用戶可以選擇通過DDL將一張表的全部列或者部分列創(chuàng)建為列索引,同時列索引采用列壓縮存儲,其存儲空間消耗會遠小于行存格式。
2、在PolarDB的SQL執(zhí)行器層,阿里云重寫了一套面向列存的執(zhí)行器引擎框架(Column-oriented), 該執(zhí)行器框架充分利用列式存儲的優(yōu)勢,使用向量化執(zhí)行方法提升算子處理海量數(shù)據(jù)的效率。同時充分發(fā)揮現(xiàn)代CPU的SIMD指令能力,提升CPU單核心處理數(shù)據(jù)的吞吐,且所有關(guān)鍵算子均支持并行執(zhí)行。在列式存儲上,新的執(zhí)行器對比MySQL原有的行存執(zhí)行器性有幾個數(shù)量級的性能提升。
3、支持行列混合執(zhí)行的優(yōu)化器框架,該優(yōu)化器會根據(jù)兼容性及執(zhí)行計劃代價兩方面的因素,以選中最優(yōu)的執(zhí)行路徑。
同時阿里云還充分利用了PolarDB云原生數(shù)據(jù)庫的技術(shù)優(yōu)勢,支持HTAP節(jié)點的規(guī)格異構(gòu)及按需彈性(Serverless),為用戶提供一體化HTAP體驗的同時兼具極致的性價比。
05 并行查詢:突破單節(jié)點的資源和性能瓶頸
傳統(tǒng)的基于MySQL的關(guān)系型數(shù)據(jù)庫在部署到云上后,依然采用了主備復制的數(shù)據(jù)同步模式來提供實例的高可靠和高可用,但基于邏輯復制導致實例延遲增大、多份存儲等問題。
PolarDB通過共享存儲和物理復制實現(xiàn)了云上的計存分離和資源池化能力,為用戶提供了最優(yōu)的彈性能力和性價比。
而從線上的長期運維可以發(fā)現(xiàn),云上用戶實例對CPU資源的平均利用率是較低的,同時MySQL對查詢的單線程處理方式又無法滿足業(yè)務上基于海量數(shù)據(jù)的實時分析需求,這造成了極大的資源浪費。
為此阿里云推出了節(jié)點內(nèi)以及跨節(jié)點并行查詢(Parallel Query)功能,針對性的利用多核CPU并行計算來提升查詢響應速度。
但隨著共享存儲層的數(shù)據(jù)量進一步增長,單機的擴展能力將遇到瓶頸,包括CPU、Memory和IO等,傳統(tǒng)數(shù)據(jù)庫通過share nothing的分片架構(gòu)和MPP計算引擎來突破單機的資源瓶頸,但這破壞了云上計存分離帶來的獨立擴展性和極致彈性能力,有悖于現(xiàn)代云原生數(shù)據(jù)庫的發(fā)展趨勢。
PolarDB解決這個問題的方案是更為先進的計算、內(nèi)存、存儲"三層解耦"模式,通過將資源進一步拆解,在各個層面上各自獨立擴展。
而針對大數(shù)據(jù)量分析查詢,我們在計算這一層層基于Parallel Query進一步演進,推出了基于共享存儲的分布式彈性并行查詢(Elastic Parallel Query),通過節(jié)點間+節(jié)點內(nèi)兩層并行的結(jié)合以及基于分布式資源視圖的智能調(diào)度策略,打通了集群內(nèi)的多節(jié)點計算資源,與傳統(tǒng)的固化的MPP架構(gòu)相比,這帶來了多方面的技術(shù)和成本優(yōu)勢:
1、通過多粒度的并行,更充分的利用集群級的計算資源,突破單節(jié)點的資源和性能瓶頸,PolarDB在利用并行查詢提升CPU利用率的同時,也開發(fā)了并行DDL等能力,大大縮短了DDL的時間,解決了一些大表用戶的一個重要痛點,實現(xiàn)和傳統(tǒng)MPP系統(tǒng)相同甚至更優(yōu)的極致查詢性能。
2、基于分布式的全局資源視圖,并結(jié)合數(shù)據(jù)的親和性特征,對查詢內(nèi)的子計算任務進行智能調(diào)度,在盡可能避免IO的情況下實現(xiàn)各節(jié)點計算資源的均衡利用,避免局部熱點帶來的性能和維護問題。
3、與云上的自動彈性無縫結(jié)合,隨著實例計算層的scale up/scale out自適應的調(diào)整并行計算策略,既滿足了用戶的成本和性能需求,又無需額外的配置維護動作。
4、靈活控制實例級別的計算資源拓撲,通過不同接入地址(子集群),實現(xiàn)不同業(yè)務的相互隔離和各自獨立配置,滿足具有不同特性的查詢業(yè)務需求。
架構(gòu)演進的示意圖
06 分布式:實現(xiàn)透明分布式體驗
數(shù)據(jù)庫經(jīng)歷過去40多年的發(fā)展,隨著互聯(lián)網(wǎng)、大數(shù)據(jù)的飛速發(fā)展,單臺務器上的性能極限已經(jīng)慢慢顯露,在這種情況下,技術(shù)人員逐漸開始探索數(shù)據(jù)庫的擴展能力,目前整體擴展架構(gòu)又兩種形態(tài):基于共享存儲的share-storage架構(gòu)、以及基于share-nothing的分布式架構(gòu),這兩種架構(gòu)分別代表了兩個不同的擴展思路,有各自的優(yōu)缺點。
基于scale-up的單機擴展架構(gòu),在面向高并發(fā)場景下,容易遇到單機擴展性的天花板,因此在2019年開始,PolarDB基于share-nothing的分布式架構(gòu),正式推出了云原生分布式版(PolarDB-X),支持多寫多讀、以及低成本的冷熱分離分層架構(gòu)。
PolarDB云原生分布式版(PolarDB-X)作為一款基于原生MySQL的云原生分布式數(shù)據(jù)庫,高度兼容MySQL的協(xié)議和開源生態(tài),引入Paxos多數(shù)派共識協(xié)議,聚焦國產(chǎn)化MySQL替代、分布式線性擴展、以及HTAP混合負載等場景。
PolarDB云原生分布式版(PolarDB-X)包含如下幾個關(guān)鍵技術(shù)創(chuàng)新:
1、透明分布式體驗:引入自動數(shù)據(jù)分區(qū)與數(shù)據(jù)自動親和性聚集技術(shù),自動識別數(shù)據(jù)的業(yè)務屬性進行相關(guān)性綁定和統(tǒng)一調(diào)度,在提升數(shù)據(jù)庫線性擴展能力的同時,避免因為跨分區(qū)的事務和復雜查詢帶來的性能開銷,最大程度將事務涉及范圍局限在單個物理節(jié)點,以及最大化下推計算算子減少數(shù)據(jù)交換。
結(jié)合全局二級索引、在線數(shù)據(jù)變更,做到分布式數(shù)據(jù)庫接近單機數(shù)據(jù)庫體驗,打破了分布式能力應用現(xiàn)實場景中的關(guān)鍵障礙。
2、冷熱分離存儲架構(gòu):引入數(shù)據(jù)分區(qū)的Time-to-Live(TTL)策略,隨著時間推進,可以將歷史不常訪問的冷數(shù)據(jù)進行定期歸檔,PolarDB分布式結(jié)合云對象存儲OSS作為冷存儲介質(zhì),采用編碼壓縮、以及OSS本身的成本優(yōu)勢,冷數(shù)據(jù)僅有MySQL InnoDB在線數(shù)據(jù)1/20的存儲成本,同時提供單個數(shù)據(jù)庫實例的透明使用體驗,統(tǒng)一SQL訪問、備份操作等。
3、全面擁抱國產(chǎn)化:基于全內(nèi)核開源的策略,堅持基于MySQL的敏捷可控路線,目前PolarDB已經(jīng)順利高分通過分布式數(shù)據(jù)庫的金融行業(yè)標準認證、信通院的分布式數(shù)據(jù)庫性能和高可用認證等。
除了滿足公有云的交付外,PolarDB可以面向傳統(tǒng)金融、政府行業(yè)的私有云交付、以及基于開源內(nèi)核的純軟部署能力,全面支持數(shù)據(jù)庫的多場景、多形態(tài)的交付能力。
PolarDB云原生分布式版(PolarDB-X)的數(shù)據(jù)庫形態(tài),結(jié)合云原生+分布式+國產(chǎn)化的技術(shù),未來也會進一步融合HTAP混合負載能力,引入行列混存架構(gòu),更好的滿足數(shù)據(jù)實時性的要求。
07 性能演進:提出一系列優(yōu)化方法
設計之初,PolarDB的理念就是為云上用戶提供具備極致彈性、高性能、海量存儲、安全可靠的數(shù)據(jù)庫服務。PolarDB采用計算和存儲分離的架構(gòu),通過物理復制技術(shù)和共享存儲架構(gòu),在滿足業(yè)務容量彈性擴展需求的同時極大的降低了用戶的存儲成本。
在設計上,PolarDB既融合了商業(yè)數(shù)據(jù)庫穩(wěn)定可靠、高性能、可擴展的特征,又具有開源云數(shù)據(jù)庫簡單開放、自我迭代的優(yōu)勢。
依托于阿里云先進可靠的硬件平臺,PolarDB采用RoCE RDMA網(wǎng)絡、3DXpoint存儲介質(zhì)等先進技術(shù),并面向新硬件架構(gòu)實現(xiàn)軟硬一體優(yōu)化。從數(shù)據(jù)庫內(nèi)核、文件系統(tǒng)到網(wǎng)絡通訊協(xié)議和分布式存儲系統(tǒng),PolarDB實現(xiàn)了縱貫軟件棧各層次的深度優(yōu)化。
僅僅構(gòu)建高性能硬件底座并不能完全解決云原生數(shù)據(jù)庫的性能問題。
例如即便擁有高吞吐的RDMA網(wǎng)絡但聚合帶寬難以充分利用;遠端節(jié)點I/O訪問、多副本持久化等要求使得云存儲I/O延時遠高于本地存儲;又比如更長的數(shù)據(jù)鏈路中有更多的排隊,導致I/O間的隔離性變低;共享存儲架構(gòu)cache concurrence代價等。
針對云原生數(shù)據(jù)庫面臨的性能挑戰(zhàn),PolarDB的存儲引擎提出了一系列優(yōu)化方法:
1、并行化多任務:例如對集中Log buffer按Page Partition分片,實現(xiàn)并行寫入并基于分片進行并行Recovery。
2、預取和讀取裁剪:例如通過收集并聚合原分散meta至統(tǒng)一的superblock,將多個I/O合一實現(xiàn)fast validating;通過預讀利用聚合讀帶寬、減少讀任務延時等。
3、鎖優(yōu)化:針對系統(tǒng)瓶頸,實現(xiàn)無鎖刷臟、基于blink-tree的無鎖SMO等。
4、訪問打散和優(yōu)先級調(diào)度:例如將單個大I/O并發(fā)分散至不同存儲節(jié)點分散訪問,充分利用云存儲聚合帶寬;在DB層面對不同I/O進行打標、調(diào)度優(yōu)先級,消除長鏈路、低隔離I/O任務的影響。
5、通過Bypassing Caches來避免分布式文件系統(tǒng)的cache coherence,并在DB層面優(yōu)化I/O格式匹配存儲最佳request格式。
上述例子也只是顯露了冰山一角,PolarDB在性能演進之路上也將不斷向前邁進。
08 展望未來:一切才剛剛開始
上市5年來,PolarDB在架構(gòu)、功能、性能等方面不斷創(chuàng)新,其實這些創(chuàng)新都是圍繞一個目的,就是不斷釋放云計算資源池化的潛力,最大化云計算資源池化的價值。
不僅如此,PolarDB還堅持開源開放的理念,將PolarDB-PG和PolarDB-X進行了全內(nèi)核開源,推動了整個行業(yè)的技術(shù)變革。
2021年杭州云棲大會上,阿里云智能數(shù)據(jù)庫產(chǎn)品事業(yè)部與達摩院數(shù)據(jù)庫與存儲實驗室負責人李飛飛提出,PolarDB要將云原生進行到底。
因為他早在2019年就斷言,未來的數(shù)據(jù)庫一定是云原生數(shù)據(jù)庫。他說,云原生數(shù)據(jù)庫在成本、靈活度、安全、技術(shù)進化層面都優(yōu)于傳統(tǒng)數(shù)據(jù)庫,“傳統(tǒng)數(shù)據(jù)庫會像馬車一樣被淘汰”。
現(xiàn)代數(shù)據(jù)庫技術(shù)已經(jīng)有40多年發(fā)展歷史,對比之下,新一代云原生數(shù)據(jù)庫的創(chuàng)新也不過幾年時間。一個全新的云原生數(shù)據(jù)庫時代已經(jīng)到來,創(chuàng)新才剛剛開始。