天天看點

過去5年,阿裡雲 PolarDB 雲原生資料庫的技術創新丨深度盤點

作者:淩雲時刻
過去5年,阿裡雲 PolarDB 雲原生資料庫的技術創新丨深度盤點
本文我們将向大家詳細介紹,PolarDB 釋出 5 年來所實作的技術創新。

資料庫與晶片、作業系統并列為全球資訊技術三大件,也是企業 IT 系統必不可少的核心技術,同時也是一切數字處理、計算力和智能化的基石。

上世紀 70 年代,E.F.Codd 發表了一篇劃時代的論文“A Relational Model of Data for Large Shared Data Banks”。從這篇論文開始,關系型資料庫軟體革命的序幕被拉開了。80 年代初期支援 SQL 的商用關系型資料庫 Oracle 和 DB2 相繼面市,以及 90 年代誕生的 SQL Server,開源的 MySQL、PostgreSQL 等都是關系型資料庫成功的代表。

時至今日,随着全球不同類型資料的指數級增長,市場上湧現出越來越多的新型資料庫,然而關系型資料庫仍然占據主導地位。根據市場研究機構 IDC 的最新統計資料顯示,關系型在全球資料庫中占據約 80% 的份額。

關系型資料庫經受住時間的考驗,為全世界使用者的鐘愛,最主要的原因之一就是關系型資料庫采用了 SQL 标準,這種進階的非過程化程式設計接口語言,将計算機科學和易于人類了解認知的資料管理方式完美的銜接在了一起。到今天,這種程式設計語言還沒有更加完美的替代品。

數十年來,關系型資料庫都應用在以 IOE 為代表的軟硬體緊耦合的技術架構環境之下,但是今天,關系型資料庫面對着雲計算是承載工作流的主要環境的巨大改變。

這種使用環境的變革性遷移之下,客戶對關系型資料庫也提出了新的要求,比如可以支援更大的存儲、彈性擴縮容上更靈活,甚至資料庫可以實作“自動駕駛”。

阿裡雲的資料庫團隊認識到,如果基于傳統關系型資料庫的架構進行小修小補,很難解決這些客戶提出的問題,必須從根本上演進雲上的關系型資料庫架構,做一個全新的雲原生關系型資料庫。

PolarDB 雲原生關系型資料庫也就此誕生。

過去5年,阿裡雲 PolarDB 雲原生資料庫的技術創新丨深度盤點

過去 5 年,阿裡雲針對 PolarDB 進行了諸多創新,通過采用存儲計算分離、軟硬一體化設計,PolarDB 實作成本僅為傳統商業資料庫的十分之一。所實作的計算、記憶體與存儲資源的“三層解耦”架構、多主多寫、基于IMCI(記憶體列存索引)的 HTAP、Serverless 等功能已是全球首創或業内領先的技術。

從 PolarDB 釋出以來,它在技術和商業化上都獲得了迅猛發展,如今已經成為阿裡雲資料庫産品家族中最閃耀的産品。

在本文中,我們将向大家詳細介紹,PolarDB 釋出 5 年來所實作的技術創新。

“三層解耦”:資源解耦的極緻

從 40 多年前資料庫誕生開始,資料庫的 CPU 和記憶體都是綁定在一起的,最多做到計算和存儲解耦,沒有資料庫能做到 CPU 和記憶體的解耦,即使演進到目前的雲原生資料庫階段,在 PolarDB 之前也沒有任何資料庫能夠做到這一點。

然而在雲計算時代,每一層的資源解耦都可以使得彈性能力帶來數量級的提升。目前雲原生資料庫雖然實作了計算存儲的解耦,相對于傳統資料庫,其彈性能力有了不小的提升,但是 CPU 和記憶體的強耦合極大地限制了彈性能力的進一步提升,難以實作秒級跨機遷移;同時也限制了記憶體的橫向擴充,使得記憶體受到單機容量限制。

PolarDB 曆史性地提出并實作了基于 CPU、記憶體和存儲資源分離的“三層解耦”架構,建構了獨立的 CPU 資源池、分布式記憶體資源池、分布式存儲資源池,實作了資源的徹底解耦,CPU 和記憶體分别獨立計費。同時通過分布式記憶體和資料庫秒級跨機遷移,使得彈性能力有了數量級的提升,大幅降本增效。

過去5年,阿裡雲 PolarDB 雲原生資料庫的技術創新丨深度盤點

多主架構:雲原生資料庫不再是單寫資料庫

雲原生資料庫從誕生開始,就和一寫多讀綁定在了一起,似乎雲原生資料庫天生隻能是單寫。寫擴充能力的缺失,給使用者帶來了很大的困擾,很多使用者在寫節點到達甚至接近最大規格一半的時候,就開始擔憂後續業務快速增長會導緻資料庫出現瓶頸,是以不得不重新考慮其他資料庫架構方案,而放棄雲原生資料庫;亦或是依賴傳統資料庫的橫向擴充方案,例如中間件來實作橫向擴充。雖然業内也有個别廠商開始嘗試多主節點,單受限于節點數,并不能實作真正的橫向寫擴充。

作為應雲而生的雲原生資料庫,有沒有一個雲原生的解決方案來實作寫擴充呢?“PolarDB 多主架構”由此而生。這是業内第一個支援大規模多主多寫的雲原生資料庫,最大支援 32 個寫節點。在 PolarDB 多主架構中,阿裡雲在整體架構從中繼資料、事務、鎖、Undo/Redo、IO、代理等所有子系統均做了多主化改造;并采用了 PolarFusion 技術,實作了多個寫節點的高效資料互動。

PolarDB 多主架構從根本上解決了使用者的單主焦慮,使得 PolarDB 第一次突破了單主限制,實作了橫向寫擴充;資料互通後的主主互備通過消除備節點在 RTO 不變的情況下節約一半的成本;跨主節點秒級流量切換也為 SaaS、遊戲等行業解決了多租戶/遊戲服的跨節點排程提供了強有力的手段。

過去5年,阿裡雲 PolarDB 雲原生資料庫的技術創新丨深度盤點

Serverless 的跨機突破

Serverless 是最适合雲資料庫的一種傳遞模式,實作了 On-demand Provision,使得使用者不需要再為資料庫規劃容量,在高峰時自動升配提升穩定性,在低峰時自動降配降低成本。是以一時間雲資料庫廠商都紛紛推出了自己的 Serverless 形态。

然而,目前業内的資料庫 Serverless 形态均為單機 Serverless,其容量上限受到了很大的限制(8~32 core),并不能很好地實作其高峰時自動升配以保障穩定性的目标,也限制了企業級客戶的使用,同時讀寫節點自身的升降配對本節點的吞吐同樣存在影響。

這些限制的本質是目前雲資料庫的無感跨機彈性和強一緻跨機擴充能力都尚不成熟,導緻目前的 Serverless 隻能實作單節點下有限的 Serverless。跨機彈性的限制是節點無法跨機排程,是以單節點彈性上限隻能限制到一個遠小于實體機限制的值;而跨機強一緻讀擴充的能力缺失,導緻其無法通過增删強一緻的隻讀節點來實作讀流量的彈性。為解決單機 Serverless 的局限性,阿裡雲在業内第一次突破了這兩個技術難點:

  • 基于事務續傳和秒級切換的無感秒切技術,解決跨機彈性問題;
  • 性能無損的強一緻讀技術,結合熱節點池技術,解決跨機透明讀擴充問題。

基于以上技術突破,PolarDB Serverless 的上限規格突破了 1000core,帶來了數量級的 Serverless 能力提升,使得 Serverless 技術有了支撐企業級業務的能力。

HTAP:同時處理交易和分析性負載

傳統面向 OLTP 場景設計的關系型資料庫,一般優化目标是提升單核性能/多核擴充性/增強叢集能力以提升可用性等,其分析性能往往不佳。然而真實業務的 SQL 又天然是 TP/AP 混合的,其需要事務處理和實時資料分析兼具的 HTAP 系統。面對此問題,傳統方案是使用一套資料同步系統串聯起上遊的 TP 系統和下遊的數倉系統,形成一套搭積木的方案,用多套系統的組合來完成任務。

在雲資料庫時代這種架構因為串聯了 OLTP 資料庫,消息中間件,OLAP 資料庫三套系統,上下遊協定不相容,運作維護複雜。在雲上很難規模部署以滿足各種客戶的需求。

針對這些問題,在 PolarDB 雲原生資料庫領域的技術積累基礎上,阿裡雲在 PolarDB 上推出了 In-Memory Column Index 功能,其為 PolarDB 帶來列式存儲以及記憶體計算能力,讓使用者可以在一套 PolarDB 資料庫上同時運作 OLTP 和 OLAP 型混合負載,在保證現有 PolarDB 優異的 OLTP 性能的同時,大幅提升 PolarDB 在大資料量上運作複雜查詢的性能,讓 PolarDB 真正成為一款 HTAP 資料庫。

過去5年,阿裡雲 PolarDB 雲原生資料庫的技術創新丨深度盤點

PolarDB HTAP 包含如下幾個關鍵技術創新:

1、PolarDB 存儲引擎新增對列式索引(Columnar Index)的支援,使用者可以選擇通過 DDL 将一張表的全部列或者部分列建立為列索引,同時列索引采用列壓縮存儲,其存儲空間消耗會遠小于行存格式。

2、在 PolarDB 的 SQL 執行器層,阿裡雲重寫了一套面向列存的執行器引擎架構(Column-oriented), 該執行器架構充分利用列式存儲的優勢,使用向量化執行方法提升算子處理海量資料的效率。同時充分發揮現代 CPU 的 SIMD 指令能力,提升 CPU 單核心處理資料的吞吐,且所有關鍵算子均支援并行執行。在列式存儲上,新的執行器對比 MySQL 原有的行存執行器性有幾個數量級的性能提升。

3、支援行列混合執行的優化器架構,該優化器會根據相容性及執行計劃代價兩方面的因素,以選中最優的執行路徑。同時阿裡雲還充分利用了 PolarDB 雲原生資料庫的技術優勢,支援 HTAP 節點的規格異構及按需彈性(Serverless),為使用者提供一體化 HTAP 體驗的同時兼具極緻的成本效益。

并行查詢:突破單節點的資源和性能瓶頸

傳統的基于 MySQL 的關系型資料庫在部署到雲上後,依然采用了主備複制的資料同步模式來提供執行個體的高可靠和高可用,但基于邏輯複制導緻執行個體延遲增大、多份存儲等問題。PolarDB 通過共享存儲和實體複制實作了雲上的計存分離和資源池化能力,為使用者提供了最優的彈性能力和成本效益。而從線上的長期運維可以發現,雲上使用者執行個體對 CPU 資源的平均使用率是較低的,同時 MySQL 對查詢的單線程處理方式又無法滿足業務上基于海量資料的實時分析需求,這造成了極大的資源浪費。

為此阿裡雲推出了節點内以及跨節點并行查詢(Parallel Query)功能,針對性的利用多核 CPU 并行計算來提升查詢響應速度。但随着共享存儲層的資料量進一步增長,單機的擴充能力将遇到瓶頸,包括 CPU、Memory 和 IO 等,傳統資料庫通過 share nothing 的分片架構和 MPP 計算引擎來突破單機的資源瓶頸,但這破壞了雲上計存分離帶來的獨立擴充性和極緻彈性能力,有悖于現代雲原生資料庫的發展趨勢。

PolarDB 解決這個問題的方案是更為先進的計算、記憶體、存儲"三層解耦"模式,通過将資源進一步拆解,在各個層面上各自獨立擴充。而針對大資料量分析查詢,我們在計算這一層層基于 Parallel Query 進一步演進,推出了基于共享存儲的分布式彈性并行查詢(Elastic Parallel Query),通過節點間+節點内兩層并行的結合以及基于分布式資源視圖的智能排程政策,打通了叢集内的多節點計算資源,與傳統的固化的 MPP 架構相比,這帶來了多方面的技術和成本優勢:

1、通過多粒度的并行,更充分的利用叢集級的計算資源,突破單節點的資源和性能瓶頸,PolarDB 在利用并行查詢提升 CPU 使用率的同時,也開發了并行 DDL 等能力,大大縮短了 DDL 的時間,解決了一些大表使用者的一個重要痛點,實作和傳統 MPP 系統相同甚至更優的極緻查詢性能。

2、基于分布式的全局資源視圖,并結合資料的親和性特征,對查詢内的子計算任務進行智能排程,在盡可能避免 IO 的情況下實作各節點計算資源的均衡利用,避免局部熱點帶來的性能和維護問題。

3、與雲上的自動彈性無縫結合,随着執行個體計算層的 scale up/scale out 自适應的調整并行計算政策,既滿足了使用者的成本和性能需求,又無需額外的配置維護動作。

4、靈活控制執行個體級别的計算資源拓撲,通過不同接入位址(子叢集),實作不同業務的互相隔離和各自獨立配置,滿足具有不同特性的查詢業務需求。

架構演進的示意圖如下:

過去5年,阿裡雲 PolarDB 雲原生資料庫的技術創新丨深度盤點

分布式:實作透明分布式體驗

過去5年,阿裡雲 PolarDB 雲原生資料庫的技術創新丨深度盤點

資料庫經曆過去 40 多年的發展,随着網際網路、大資料的飛速發展,單台務器上的性能極限已經慢慢顯露,在這種情況下,技術人員逐漸開始探索資料庫的擴充能力,目前整體擴充架構又兩種形态:基于共享存儲的 share-storage 架構、以及基于 share-nothing 的分布式架構,這兩種架構分别代表了兩個不同的擴充思路,有各自的優缺點。

基于 scale-up 的單機擴充架構,在面向高并發場景下,容易遇到單機擴充性的天花闆,是以在 2019 年開始,PolarDB 基于 share-nothing 的分布式架構,正式推出了雲原生分布式版(PolarDB-X),支援多寫多讀、以及低成本的冷熱分離分層架構。

PolarDB 雲原生分布式版(PolarDB-X)作為一款基于原生 MySQL 的雲原生分布式資料庫,高度相容 MySQL 的協定和開源生态,引入 Paxos 多數派共識協定,聚焦國産化 MySQL 替代、分布式線性擴充、以及 HTAP 混合負載等場景。

過去5年,阿裡雲 PolarDB 雲原生資料庫的技術創新丨深度盤點

PolarDB雲原生分布式版(PolarDB-X)包含如下幾個關鍵技術創新:

1、透明分布式體驗,引入自動資料分區與資料自動親和性聚集技術,自動識别資料的業務屬性進行相關性綁定和統一排程,在提升資料庫線性擴充能力的同時,避免因為跨分區的事務和複雜查詢帶來的性能開銷,最大程度将事務涉及範圍局限在單個實體節點,以及最大化下推計算算子減少資料交換。結合全局二級索引、線上資料變更,做到分布式資料庫接近單機資料庫體驗,打破了分布式能力應用現實場景中的關鍵障礙。

2、冷熱分離存儲架構,引入資料分區的 Time-to-Live(TTL)政策,随着時間推進,可以将曆史不常通路的冷資料進行定期歸檔,PolarDB 分布式結合雲對象存儲 OSS 作為冷存儲媒體,采用編碼壓縮、以及 OSS 本身的成本優勢,冷資料僅有 MySQL InnoDB 線上資料 1/20 的存儲成本,同時提供單個資料庫執行個體的透明使用體驗,統一 SQL 通路、備份操作等。

3、全面擁抱國産化,基于全核心開源的政策,堅持基于 MySQL 的靈活可控路線,目前 PolarDB 已經順利高分通過分布式資料庫的金融行業标準認證、信通院的分布式資料庫性能和高可用認證等。除了滿足公有雲的傳遞外,PolarDB 可以面向傳統金融、政府行業的私有雲傳遞、以及基于開源核心的純軟部署能力,全面支援資料庫的多場景、多形态的傳遞能力。

PolarDB 雲原生分布式版(PolarDB-X)的資料庫形态,結合雲原生+分布式+國産化的技術,未來也會進一步融合 HTAP 混合負載能力,引入行列混存架構,更好的滿足資料實時性的要求。

性能演進:提出一系列優化方法

設計之初,PolarDB 的理念就是為雲上使用者提供具備極緻彈性、高性能、海量存儲、安全可靠的資料庫服務。PolarDB 采用計算和存儲分離的架構,通過實體複制技術和共享存儲架構,在滿足業務容量彈性擴充需求的同時極大的降低了使用者的存儲成本。在設計上,PolarDB 既融合了商業資料庫穩定可靠、高性能、可擴充的特征,又具有開源雲資料庫簡單開放、自我疊代的優勢。

依托于阿裡雲先進可靠的硬體平台,PolarDB 采用 RoCE RDMA 網絡、3DXpoint 存儲媒體等先進技術,并面向新硬體架構實作軟硬一體優化。從資料庫核心、檔案系統到網絡通訊協定和分布式存儲系統,PolarDB 實作了縱貫軟體棧各層次的深度優化。

僅僅建構高性能硬體底座并不能完全解決雲原生資料庫的性能問題。例如即便擁有高吞吐的 RDMA 網絡但聚合帶寬難以充分利用;遠端節點 I/O 通路、多副本持久化等要求使得雲存儲 I/O 延時遠高于本地存儲;又比如更長的資料鍊路中有更多的排隊,導緻 I/O 間的隔離性變低;共享存儲架構 cache concurrence 代價等。針對雲原生資料庫面臨的性能挑戰,PolarDB 的存儲引擎提出了一系列優化方法:

  • 并行化多任務:例如對集中 Log buffer 按 Page Partition 分片,實作并行寫入并基于分片進行并行 Recovery。
  • 預取和讀取裁剪:例如通過收集并聚合原分散 meta 至統一的 superblock,将多個 I/O 合一實作 fast validating;通過預讀利用聚合讀帶寬、減少讀任務延時等。
  • 鎖優化:針對系統瓶頸,實作無鎖刷髒、基于 blink-tree 的無鎖 SMO 等。
  • 通路打散和優先級排程:例如将單個大 I/O 并發分散至不同存儲節點分散通路,充分利用雲存儲聚合帶寬;在 DB 層面對不同 I/O 進行打标、排程優先級,消除長鍊路、低隔離 I/O 任務的影響。
  • 通過 Bypassing Caches 來避免分布式檔案系統的 cache coherence,并在 DB 層面優化 I/O 格式比對存儲最佳 request 格式。

上述例子也隻是顯露了冰山一角,PolarDB 在性能演進之路上也将不斷向前邁進。

展望未來:一切才剛剛開始

上市 5 年來,PolarDB 在架構、功能、性能等方面不斷創新,其實這些創新都是圍繞一個目的,就是不斷釋放雲計算資源池化的潛力,最大化雲計算資源池化的價值。不僅如此,PolarDB 還堅持開源開放的理念,将 PolarDB-PG 和 PolarDB-X 進行了全核心開源,推動了整個行業的技術變革。

2021 年杭州雲栖大會上,阿裡雲智能資料庫産品事業部與達摩院資料庫與存儲實驗室負責人李飛飛提出,PolarDB 要将雲原生進行到底。因為他早在 2019 年就斷言,未來的資料庫一定是雲原生資料庫。他說,雲原生資料庫在成本、靈活度、安全、技術進化層面都優于傳統資料庫,“傳統資料庫會像馬車一樣被淘汰”。

現代資料庫技術已經有 40 多年發展曆史,對比之下,新一代雲原生資料庫的創新也不過幾年時間。一個全新的雲原生資料庫時代已經到來,創新才剛剛開始。

過去5年,阿裡雲 PolarDB 雲原生資料庫的技術創新丨深度盤點

繼續閱讀