深度 | 帶領國產數據庫走向世界,POLARDB底層邏輯是什麼?

POLARDB 是阿里雲自主研發的下一代雲原生分佈式數據庫,100%兼容MySQL、PostgreSQL等開源數據庫,高度兼容Oracle語法,使用RDS服務的客戶不須要修改應用代碼,能夠一鍵遷移到POLARDB,體驗更大的容量,更高的性能,更低的成本,和更靈活的彈性。算法

目前,POLARDB是阿里雲增速最快的數據庫產品,普遍應用於互聯網金融、政府便民工程、新零售、教育、遊戲、社交直播等行業。數據庫

做爲基於計算與存儲分離架構的新一代雲原生數據庫,POLARDB的計算節點裏主要實現了 SQL 解析和優化、以及查詢並行執行與無鎖高性能事務處理,計算節點之間經過高吞吐的物理複製協議同步內存狀態。緩存

而存儲層基於分佈式文件系統PolarFS,經過Parallel Raft共識算法實現多數據副本間的強一致性,在存儲層進行存儲引擎的多版本頁管理來支持全集羣跨計算節點的Snapshot Isolation隔離級別。安全

01基於計算與存儲分離的先進架構

計算節點與存儲節點之間經過理解數據庫語義的智能互聯協議將filter和projection等算子從計算層下推到存儲層執行。爲了保證事務和查詢語句的低延遲,同時下降計算節點之間狀態同步的延遲,計算節點和存儲節點之間使用25Gb高速RDMA網絡互聯,採用Bypass kernel的用戶態網絡協議層進行通信。服務器

基於計算與存儲分離的先進架構,POLARDB能夠從1個計算節點(2個CPU核)彈性伸縮到16個計算節點(最高達到1000核)的事務擴展能力,單實例存儲容量從10GB按使用量彈性擴展到100TB。網絡

計算節點與存儲節點分離的架構設計給POLARDB帶來了實時的水平擴展能力。因爲單個數據庫實例的計算能力有限,傳統的作法是經過搭建多個數據庫副原本分擔壓力,從而提供數據庫Scale out 的擴展能力。數據結構

然而,這種作法須要存儲多份全量數據,而且頻繁同步日誌數據形成了太高的網絡開銷。此外,在傳統數據庫集羣上,增長副本須要同步全部增量數據,這帶來了同步延遲上漲的問題。架構

POLARDB將數據庫文件以及Redo log 等日誌文件存放在共享存儲設備上,確保主實例和全部副本共享同一份全量數據和增量日誌數據。節點間只須要同步內存裏的元數據信息,經過MVCC機制的保證,就能支持跨節點讀取數據的一致性,很是巧妙地解決了主實例和副本之間的數據同步問題,大大節約了跨節點的網絡開銷,下降副本間的同步延遲。併發

02提高事務性能 POLARDB內核層面優化揭祕

爲了提升事務性能,POLARDB 在內核層面進行了大量優化。把一系列性能瓶頸用無鎖(lockless)算法以及各類並行優化算法進行改造,減小甚至消除各類鎖之間的相互衝突,大大增長了系統的scalability 能力。app

同時,咱們依託處理雙十一這種大規模高併發場景下的經驗, 在 POLARDB 上實現了對庫存等熱點數據進行優化的功能。對於簡單重複的查詢,POLARDB支持直接從存儲引擎獲取結果,從而減小了優化器及執行器的開銷。

此外,進一步優化已經高效的物理複製。好比,咱們在重作日誌加了一些元數據,以減小日誌解析CPU開銷. 這個簡單優化減小了60%日誌解析時間。咱們也重用 一些數據結構,以減小內存分配器的開銷。

POLARDB運用了一系列算法來優化日誌應用,好比只有在buffer pool中的數據頁面 才須要日誌應用。同時咱們也優化了page cleaner and double write buffer,大大減小這些工做的成本. 這一系列優化使得在性能上 POLARDB 遠超 MySQL ,在sysbencholtp_insert等大量併發寫入的基準評測中達到最高6倍於MySQL 的性能。

03支持並行查詢(Parallel Query)

爲了提升子查詢和join等複雜查詢(例如TPC-H基準評測)的能力,POLARDB的查詢處理器支持並行查詢(parallel query),能夠將一個查詢同時在多個或全部可用CPU核上進行執行。並行查詢可以將一個查詢任務(當前只支持SELECT語句)劃分爲多個子任務,多個子任務能夠並行進行處理,總體採用Leader-Worker的併發模型。

Leader線程負責生成並行查詢計劃,協調並行執行過程的其餘組件,並行執行計劃會包括並行掃描、多表並行鏈接、並行排序、並行分組、並行彙集等子動做。

Message queue是leader線程和worker線程的通信層,worker線程經過message queue向leader線程發送數據,而leader線程也會經過message queue向worker線程發送控制信息。

Worker線程負責真正的執行任務。Leader線程解析查詢語句生成並行計劃,而後同時啓動多個worker線程進行並行任務處理,爲了高效的執行查詢,Worker上的執行不須要進行再次優化,而是直接從Leader上來拷貝生成好的計劃分片。這須要實現執行計劃樹上全部節點的拷貝。

worker線程在進行掃描,彙集,排序等操做後將中間結果集返回給leader,leader負責收集來自worker的全部數據集,而後進行適當的二次處理(好比merge sort,二次group by 等操做),最後將最終結果返回給客戶端。

Parallel Scan層會結合存儲引擎的數據結構特徵來實現工做負載的均衡。如何將掃描數據劃分紅多個分區,使得全部的工做線程儘量的均勻的工做是數據分區劃分的目標。在以B+樹做爲存儲結構的存儲引擎裏,劃分分區的時候,是先從根上來劃分,若是根上不能劃分出足夠多的分區(>= 並行度),將會繼續從下一層進行劃分。

而若是咱們須要6個分區的話,根節點最多分出4個分區,因此就須要繼續搜索下一層來進行分區,以此類推。在實際實現並行查詢的過程當中,爲了能讓多個工做線程更加均勻的分配掃描段,會在B+樹裏儘量的多劃分分區,這樣若是某個工做線程因爲過濾性比較高會優先完成當前分區,那麼它會自動attach下一個分區繼續執行,經過自動attach的方式來實現全部線程的負載均衡。

04新一代基於代價的優化器

雲上客戶的業務是多樣化的,若是執行計劃選錯會致使慢查詢。爲了系統性地解決這些問題,POLARDB推出了新一代的基於代價的優化器。POLARDB裏實現新的直方圖Compressed Histogram對高頻率數據進行自動探測並構建精確描述,在選擇率計算時考慮數據頻率和取值空間,解決實際應用中廣泛存在的數據傾斜場景。

POLARDB大量基於改良的直方圖進行代價估算,好比估算表和表join的結果大小,是join代價和join order優化的決定性因素,MySQL只能根據經驗公式粗略的估算,不管是有索引時的rows_per_key,仍是無索引時的默認參數值,估算的偏差都較大,這些偏差會在多表鏈接的過程當中不斷放大,致使生成效率低下的執行計劃。

在POLARDB中使用直方圖對重合部分進行合併計算,並根據不一樣的直方圖類型適配不一樣的estimation算法,大大提升了估算精度,幫助優化器作出更優的join order選擇。在隨機生成的正態分佈數據測試中,多表聯合查詢優化後可提速2.4-12倍,TPC-H測試中多個查詢的join order發生變化,性能提高77%-332%。

POLARDB也使用直方圖優化了record_in_range的邏輯,MySQL對於有索引的過濾條件採用index dive來估算區間的記錄數,這個操做在OLTP短查詢中CPU佔比較高。在使用基於直方圖估算替換index dive後,在淘寶電商核心業務中,絕大多數的查詢查詢響應時間減小一半。

0五、自研分佈式文件系統PolarFS:高可靠、高可用、與數據庫協同設計

POLARDB的存儲層採用的是阿里雲自主研製的分佈式文件系統PolarFS。PolarFS是國內首款面向DB應用設計的採用了全用戶空間I/O棧的低延遲高性能分佈式存儲系統(參見VLDB 2018 上的文章 PolarFS: An Ultra-low Latency and Failure Resilient Distributed FileSystem for Shared Storage Cloud Database),其具有與本地SSD硬盤架構至關的低延遲高性能I/O能力,同時也以分佈式集羣的方式提供了優異的存儲容量與存儲性能的擴展能力。

而PolarFS做爲一款與POLARDB深度協同的存儲基礎設施,其最核心的競爭力不只體如今性能和擴展性方面,更深層次的則是在面臨有許多挑戰性的POLARDB客戶業務需求和規模化的公有云研發運維過程當中而長期積累造成的一系列高可靠、高可用、與數據庫協同設計的存儲技術。

爲了支持POLARDB在多個計算節點之間分發查詢且保持全局的Snapshot Isolation語義,PolarFS支持存儲POLARDB存儲引擎B+樹動態生成的多版本(Multi-version page)。

爲了減小讀寫衝突,現代數據庫通常都經過以MVCC併發控制爲框架來提供RC、SI、SSI等不一樣的事務隔離級別,在MVCC機制下,B+樹的每一個頁面會動態維護一系列的版本,併發執行中的多個事務容許各自訪問一個頁面的不一樣版本。

在POLARDB集羣裏,因爲跨節點複製同步延遲的存在,每一個計算節點B+樹的頁面多是不一樣版本的,這時多版本存儲能夠爲各節點提供其所對應版本。在POLARDB中,計算節點向PolarFS寫入一個頁面的同時要提供該數據頁的版本信息(LSN),PolarFS不只存儲數據頁的同時還要存儲數據版本元信息;計算節點讀取數據頁時,也會提供版本信息從存儲獲取相應的數據頁(歷史)版本。

POLARDB數據庫層按期會將集羣全部計算節點版本號的低水位線發送給PolarFS,PolarFS會基於此版本號清理再也不使用的歷史版本。

保證數據可靠性是POLARDB全部設計的底線。在實際的分佈式系統中,硬盤、網絡與內存等硬件、固件或軟件的bug等問題可能會形成數據錯誤,從而給數據可靠性保障帶來各類挑戰。存儲端的可靠性問題來自靜默錯誤(lost write、misdirected write,block corruption等),網絡和內存主要來自於比特反轉和軟件bug。

爲了確保各類異常狀況(包括:硬件故障,軟件故障,人工操做故障)發生時的數據可靠性,POLARDB和PolarFS提供了端到端全鏈路數據校驗保障。

在數據寫入時,POLARDB 從計算節點的存儲引擎開始,一直到PolarFS存儲節點的數據落盤,通過的中間鏈路,都會對數據的正確性作校驗,防止異常數據寫入。

在數據讀取時,PolarFS和POLARDB存儲引擎都會對讀取到的數據作checksum校驗,準確地識別磁盤靜默錯誤的發生,防止靜默錯誤擴散。

在業務流量低峯時,還會在後臺持續性的作數據一致性掃描,用於檢查單副本數據的checksum是否正確以及各個副本間的數據是否一致。數據遷移過程當中的正確校驗性也很是重要:POLARDB在執行任何形式的數據遷移動做時,除了副本自身數據的 checksum 校驗,還會對多個副本數據的一致性作校驗;當這兩個校驗都經過,纔會將數據遷移到目標端;最大限度的防止因爲遷移動做,致使單副本上的數據錯誤擴散,避免數據損壞問題。

PolarFS還支持對POLARDB作快速的物理快照備份與還原。快照是一種流行的基於存儲系統的備份方案。其本質是採用Redirect-On-Write 的機制,經過記錄塊設備的元數據變化,對於發生寫操做的存儲捲進行寫時複製,將寫操做內容改動到新複製出的存儲捲上,來實現恢復到快照時間點的數據的目的。

快照是一個典型的基於時間以及寫負載模型的後置處理機制。也就是說建立快照時,並無備份數據,而是把備份數據的負載均分到建立 快照以後的實際數據寫發生的時間窗口,以此實現備份、恢復的快速響應。

POLARDB經過底層存儲系統的快照機制以及Redo log增量備份,在按時間點恢復用戶數據的功能上,比傳統的全量數據結合邏輯日誌增量數據的恢復方式更加高效。

06高度兼容Oracle語法 成本是商業數據庫的1/10

除了100%兼容MySQL和PostgreSQL這兩個最流行的開源數據庫生態, POLARDB還高度兼容Oracle語法,爲傳統企業上雲提供成本是商業數據庫1/10的方案。

經過用DMS替換Oracle的GUI管理工具OEM,以及用POLARDBPlus替換命令行工具SQL Plus,沿襲了OracleDBA的使用習慣;客戶端SDK能夠從OCI和O-JDBC Driver替換成libpq和JDBC Driver,只須要作so和jar包的替換,程序主體代碼不須要修改;

對Oracle的SQL普通DML語法都能支持,對幾乎全部高級語法如connect by、pivot、listagg等也都全面支持;對PL/SQL存儲過程、以及存儲過程用到的內置函數庫也能作到全面覆蓋支持;

對一些高級功能(如安全管理、AWR等)提供徹底相同的格式佈局和操做語法,因此綜合看來,POLARDB對Oracle的操做方法、使用習慣、生態工具、SQL語法、格式佈局等都作到了全面的兼容和替換,結合遷移評估工具ADAM,應用能夠作到少許改動甚至無改動。

07提早看:更多新技術和企業級特性即將上線

除了上面介紹的技術,POLARDB還有大量新技術和企業級特性在2019下半年陸續發佈,這些技術會全面提高POLARDB的可用性、性能,下降POLARDB的使用成本:

1)從彈性存儲到彈性內存,熱緩衝池(warm buffer pool)技術

POLARDB即將支持和計算節點進程解構的「熱」緩衝池,這將大大減小用戶業務在計算節點重啓時受到的影響。在進行機型替換規格升降級的時候(serverless),對業務的影響更小。同時,一個獨立的內存也使得其動態按需擴展或收縮成爲可能。

2) 性能數倍增加,更好的DDL支持(FAST DDL)

POLARDB即將支持並行DDL,這將大大縮短表級別的DDL延遲。這個功能把並行化作到極致,能夠把建索引等DDL的時間減小近10倍。同時,POLARDB還進行了大量的DDL複製層面的優化,這使得DDL能夠進行跨區域的大批量複製,速度更加迅速,資源的消耗更少。

3) 支持跨地域的全球數據庫(Global Database)

POLARDB 支持跨地域、長距離的物理複製,幫助用戶創建其全球數據庫的部署。經過物理複製,數據能夠實時複製到全球各個機房,使得全球用戶的查詢在當地機房就獲得響應,反應更迅速。

4)分區表的支持

POLARDB支持100T的存儲容量。可是隨着表的大小的增加,單表索引的層次也增長,致使數據的查找定位也變得更慢,一些單表上的物理鎖也致使並行DML碰到天花板。

因此進行合理的分區變得更加緊迫。以前很多用戶依賴數據庫外部中間件的分庫分表的來減小單表的壓力。

可是,隨着POLARDB在各方面好比並行查詢的發展,咱們能夠把這些分庫分表的功能經過分區表的形式在數據庫內更有效的實現。

有效的分區不但使咱們可以支持更大的表,並且它減小了一些數據庫索引的全局物理鎖的衝突,從而提升總體DML的性能。

同時,這種形態以後能夠更好的支持冷熱數據分離,把不一樣「溫度「的數據存放在不一樣的存儲介質中,在保證數據access的性能的同時,減小數據存放的成本。

POLARDB在加強分區表的一系列功能,包括全局索引(Global Index),分區表的外鍵(Foreign Key Constraint),自增分區表(Interval Partition)等,使得POLARDB更好的應對特大表

5) 行級壓縮

POLARDB即將推出行級壓縮功能。業界一般的作法是在數據頁級別經過通用壓縮算法(好比LZ7七、Snappy)進行壓縮,但頁級壓縮會帶來CPU開銷過大的問題,由於改動一行數據,也要把整個數據頁解壓,改動,再壓縮。

此外,有些場景下數據頁壓縮後反而變大(bloat),還會致使多重索引頁分裂 (multiple splits)。POLARDB採用細粒度(fine-grain)行級壓縮技術,對不一樣的數據類型採用特定的壓縮方式。

數據以壓縮的方式同時存在於外存及內存中,只有在要查詢的時候才進行行級數據的解壓,而不用解壓整個數據頁。因爲數據除查詢外都是以壓縮方式存儲,因此日誌也記錄了壓縮的數據,這個進一步減小了日誌的大小,以及在網絡傳輸的數據/日誌的壓力。同時其相對應的索引也只存儲壓縮的數據。

總體數據量的減小足以抵消解壓所引發的額外開銷,使得這種壓縮在大大減小數據存儲的同時並不會引發性能衰退。

6)In-Memory的列存(HTAP)

在傳統的數據庫領域,分析數據庫和在線事務處理是分隔開來的。所以一般須要在一天的經營結束後將在線事務處理的數據與往期分析處理的數據一塊兒導入至數據倉庫後運行分析,以生成相應的報表。

在HTAP數據庫中,則省去了大規模數據搬移的時間與運營成本,一站式解決大部分企業級應用的需求,並在交易結束當天同步出具T+0的分析報告。

在這種需求下,POLARDB在實現in-memory的列存數據表。經過物理邏輯日誌直接和POLARDB行存數據同步。這樣經過特定適合分析的算子能夠對這些列存數據進行實時的大數據分析。使得用戶能夠一站式的獲得分析結果。

7)冷熱分離存儲引擎X-Engine

存儲數據的規模愈來愈龐大,但不是全部的數據訪問頻率都相同,實際上數據訪問老是呈現比較明顯的冷熱分佈特徵,基於這一特徵,X-Engine設計了冷熱分層的存儲架構,根據數據訪問頻度(冷熱)的不一樣將數據劃分爲多個層次,針對每一個層次數據的訪問特色,設計對應的存儲結構,寫入合適的存儲設備。

不一樣於傳統的B+樹技術,X-Engine使用了LSM-Tree做爲分層存儲的架構基礎,使用多事務處理隊列和流水線處理技術,減小線程上下文切換代價,並計算每一個階段任務量配比,使整個流水線充分流轉,極大提高事務處理性能。數據複用技術減小數據合併代價,而且由於數據複用減小緩存淘汰帶來的性能抖動。進一步利用FPGA硬件加速compaction過程,使得系統上限進一步提高。

相對於其餘相似架構的存儲引擎好比RocksDB,X-Engine的事務處理性能有10倍以上提高。

X-Engine的詳細技術參考SIGMOD 2019的論文X-Engine: An Optimized StorageEngine for Large-scale E-Commerce Transaction Processing。

目前,POLARDB不只支撐阿里巴巴集團淘寶、天貓、菜鳥等業務場景,還普遍應用於政務、零售、金融、電信、製造等領域,目前已經有40萬個數據庫遷上阿里雲。

基於POLARDB分佈式數據庫,北京的公交系統快捷、流暢地安排着全市2萬多輛公交車,方便天天800萬人次出行;

衆安保險使用該數據庫處理保單數據,效率提高25%。

解鎖18篇POLARDB深度文章

https://developer.aliyun.com/article/721566?spm=a1z389.11499242.0.0.65452413DHyqZn&utm_content=g_1000083118

雙11福利來了!先來康康#怎麼買雲服務器最便宜# [並不簡單]參團購買指定配置雲服務器僅86元/年,開團拉新享三重禮:1111紅包+瓜分百萬現金+31%返現,爆款必買清單,還有iPhone 11 Pro、衛衣、T恤等你來抽,立刻來試試手氣:https://www.aliyun.com/1111/2...


本文做者:Roin123

原文連接

本文爲雲棲社區原創內容,未經容許不得轉載。

相關文章
相關標籤/搜索