【DTCC 2022】雲原生數據庫PieCloudDB全新eMPP架構是如何煉成的
12月14-16日,第十三屆中國數據庫技術大會(DTCC 2022)在線上隆重召開。拓數派贊助並參與了數據庫盛會DTCC,在會議中,拓數派CTO 郭罡分享了《雲原生數據庫 PieCloudDB eMPP架構設計與實現》的主題演講。在演講中,郭罡分析了傳統分佈式MPP架構的痛點,介紹了雲原生數據庫PieCloudDB的eMPP架構的設計背景與重要功能組件。本文整理自現場演講內容。
相關PPT歡迎訪問拓數派官網鏈接進行預覽和下載。演講視頻歡迎訪問B站鏈接。
傳統分佈式MPP架構痛點
MPP(Massive Parallel Processing,大規模並行處理),一直被譽為當今數據庫的主流架構,被廣泛用於眾多數據庫產品中,包括Greenplum、Teradata、Vertica等。MPP分析型數據庫針對分析工作負載進行了大量優化,以滿足用户聚合和處理大型數據集的需求。它會將任務並行的分佈到多個服務器和節點上,並在完成計算後,將結果返回並彙總,從而完成對海量數據的分析處理。
然而,傳統分佈式MPP架構存在很多瓶頸,我們將客户的真實生產場景中遇到的問題進行歸納,總結出5個痛點:
- 缺乏彈性
傳統數據倉庫的計算和存儲是緊密耦合的,計算資源和存儲資源按某一比例強綁定,因此用户在擴容時,必須同時擴容計算資源和存儲資源,在擴容、運維、遷移上都存在一定的挑戰。當企業遇到負載高峯時刻或需要緊急得到某個報表結果時,傳統數據倉庫無法及時擴資源,導致大數據系統無法彈性、快速的分析業務數據,錯失了充分挖掘數據價值所帶來的商業機會。
- 成本高昂
傳統數據庫價格高昂的軟硬件、開發運維人員的高昂薪資需要企業進行巨大的前期投入。在我們與客户接觸的過程中,經常發現客户的生產環境資源利用率,無論是存儲或是計算資源往往不盡人意。隨着存儲和工作負載需求的日益增長,面臨數據庫的擴容和升級時,由於傳統數據庫架構存儲和計算的緊密耦合,往往需要企業花費巨大的運維和時間成本,且操作繁瑣;
- 木桶效應
傳統MPP數據庫架構存在”木桶效應”,數據庫集羣整體執行速度取決於最”短板”節點的性能。因此,一個節點的表現往往會”拖垮”整個集羣的性能,導致查詢速度變慢。 雖然理論上可以針對這一情況進行優化,但往往都是”治標不治本”。隨着時間的推移,業務的增長,企業往往需要在1-2年後對集羣增加計算節點,此時,無論新的計算節點性能如何優異,集羣總體性能都會受制於老的節點。因此真實生產環境中,我們常常見到客户在需要擴容時,採取重新新建集羣的方式。
- 數據孤島
隨着業務的發展,數據量的增加,和信息化建設的需求,企業會為不同部門建設相應的業務信息化系統。我們在很多真實客户生產環境中,常常看到企業有成百上千個集羣,但這些集羣的元數據往往都是一樣的。這種情況下,很多元數據在不同集羣間會存在不一致的版本信息。如果企業需要做跨集羣的訪問,往往非常困難,會造成數據孤島的存在。
- 運維成本
對於傳統MPP數據庫,企業往往會需要配備運維人力,且對運維、開發人員要求高,需要相關人員掌握複雜的技術棧,技術的更新迭代迅速,需相關人員保持積極的知識更新。相關人才市場較小,人才匱乏。高昂的學習成本造成用户使用過程中性能差、故障率高、故障修復時間長等問題;
正是因為傳統分佈式MPP架構的這些痛點,我們認為企業急需一款全新的eMPP雲原生數據庫。
雲解決了什麼?
隨着數據量和計算能力的爆發式增長,雲計算技術的迅猛發展,基礎軟件尤其是數據庫軟件上雲已大勢所趨, 那麼云為數據庫軟件解決了什麼問題呢?
藉助於雲上分佈式存儲,數據庫軟件可以實現解耦存儲;通過KVM等虛擬化技術,以及構建之上的IaaS系統,數據庫可以實現計算層的解耦,讓用户可以做到按需啟動虛擬機。在存儲和計算解耦後,資源可以完成池化,按需使用。雲計算讓用户能夠專注於使用,將運維等工作交給IaaS/SaaS廠商。
上雲≠雲原生
雖然數據庫上雲已經是大勢所趨,但上雲並不等於雲原生。業界經常會對上雲和雲原生兩個概念有所混淆, 我們認為:如果僅僅是將數據庫在雲上進行部署,並不是真正的雲原生。雲原生需要滿足以下幾個條件:
- 計算和存儲彈性:業界經常提到”存算分離”,在實現存算分離後,存儲資源和計算資源都要做到彈性伸縮,按需付費。但這只是實現計算和存儲彈性的第一步,
- 多租户隔離:雲上存儲資源和計算資源需要做到彼此隔離,保證數據安全。
- 智能化雲原生平台:一款雲原生數據庫,除了底層架構,一款雲原生數據庫的用户操作也需要是”雲原生”的。智能化可視化平台可以簡化用户的操作,讓用户得以用雲原生的思維操作數據庫。
為什麼選擇PieCloudDB
基於這樣的設計思路,全新的雲原生數據庫 PieCloudDB Database 誕生了。PieCloudDB是一款全新的eMPP分佈式雲原生分析型數據庫,通過重新打造雲上的數據庫內核,突破了PC時代計算平台的限制,實現雲上存算分離。在雲上,計算資源可按需啟動,對計算模型以更低成本提供存儲和計算資源,幫助企業的業務模型發現新的洞察或提高精準度,從而建立競爭壁壘。
PieCloudDB 重要特點如下:
eMPP
PieCloudDB Database 重新打造了全新的eMPP分佈式架構,繼承了傳統MPP架構分佈式、海量數據並行處理的優勢,解決了前文提到的MPP傳統架構的痛點。
這裏的”e”是指elastic,彈性。PieCloudDB 做到了計算資源的橫向和縱向的彈性伸縮。這裏的”橫向”是指節點數的增多,而”縱向”是指虛擬機規格的提升。除了計算資源上的彈性,PieCloudDB 還實現了第三個彈性維度:多集羣。由於用户數據和元數據都是共享的,用户數據被存儲在對象存儲上,而元數據被分佈式KV存儲管理,PieCloudDB 做到了真正的 ”serverless” 無狀態。
全面的SQL兼容度
PieCloudDB 高度兼容SQL:2016標準,完全支持SQL:1992標準、大部分的SQL:1999和部分SQL:2003標準(主要支持其中的OLAP 特性),支持包括窗函數、彙總、立方和各種其他表達功能。此外,PieCloudDB 實現了友好的用户接口,完全支持和認證標準數據庫接口(PostgreSQL、 SQL、ODBC、JDBC 等) 。
雲原生,雲中立
PieCloudDB 實現存算分離,用户數據被存儲在對象存儲中,支持按需付費。PieCloudDB 實現了雲中立,沒有和任何一款雲平台綁定,為用户提供更大的靈活性,可以按用户需求被部署在行業雲、私有云、公有云、混合雲等雲平台上。 此外,PieCloudDB 也支持HDFS,NAS等文件系統。
完備的事務支持
PieCloudDB實現了完備的事務支持,兼具數據倉庫的標準SQL、ACID、和數據湖的大規模異構數據存儲等功能,並具備了RR和RC的隔離級別。
安全可靠
PieCloudDB開發團隊早在設計初期就將數據安全作為重要的設計目標,通過透明加密、可視化角色與權限管理、SQL標準和標準數據庫接口的兼容等多種安全技術全方位保證數據安全,實現了「Unbreakable」(堅不可破),做到了真正的安全可靠。此外,PieCloudDB 分佈式對象存儲多副本多可用區進一步保證數據安全,整個數據庫只有一份數據,有效避免了數據不一致。
PieCloudDB在整個架構設計上充分考慮到了各個節點的高可用,避免單點故障,用户使用上感覺更可靠。
很快,PieCloudDB 將支持Time Travel(時間溯回)功能,用户藉助該功能可以查詢”回收站”數據,為用户的數據安全“添磚加瓦”。
完善的生態
PieCloudDB 原生支持PostgreSQL/Greenplum 生態組件,兼容包括 PostGIS、in Database AI 組件 MADlib、JSON、Text 等。PieCloudDB 對各種外表數據源聯邦查詢組件天然支持,實現了高性能的實時ETL/ELT功能,原生支持Kafka數據導入和查詢,在PieCloudDB 側導入實現exactly once 語義。
PieCloudDB也在打造自己的生態體系,通過創建生態工具、建立合作伙伴生態網絡、打造活躍的技術和用户社區等舉措,為用户帶來更便捷的使用體驗。
PieCloudDB:雲原生數據庫的設計與打造
PieCloudDB的內核架構簡介優雅,從上而下被分為元數據層、彈性計算層和共享存儲層。內核主要組件如下:
元數據管理
PieCloudDB的元數據以key-value的形式被存儲在開源數據庫 FoundationDB 中。FoundationDB是一個開源的 NoSQL 的KV數據庫,PieCloudDB 利用 FoundationDB Key的自然排序實現索引。同時,基於MVCC,PieCloudDB 也實現了RR和RC的事務隔離級別。
PieCloudDB 的多個集羣(虛擬數倉)共享一份元數據,是PieCloudDB 得以實現存算分離的很重要的一個原因。 PieCloudDB 藉助FoundationDB 的KV特性、可串行事務、watcher機制等特性,將除元數據以及將包括鎖、事務等在內的臨時狀態存儲在了 FoundationDB 中。FoundationDB 具有高可用和備份恢復設計,保證了元數據的可靠性和可用性。
為了避免元數據被存儲在遠端會造成 FoundationDB 集羣負擔,避免網絡延遲,加速查詢優化, PieCloudDB 以 Postgres 原生的元數據緩存概念為基礎,優化重構實現了適用於多集羣架構的元數據層全新的緩存階段,有效減少了訪問元數據服務器帶來的網絡通信開銷和元數據服務器的負載。有效提高元數據訪問的速度,從而提高了數據庫系統性能。
用户數據存儲引擎
PieCloudDB 的用户數據以PAX(行列混存)的數據格式被存儲在對象存儲中。在一個page中,數據按列存儲,從而得以配以高效的壓縮,節省存儲空間。同時,PieCloudDB 以 block 文件為一個存儲單位。這同時也是一個 MVCC 的單位,即一個 block 對於一個事務的狀態是可見與不可見二選一的,不存在中間狀態。
此外,PieCloudDB database 的存儲中存在大量輔助信息,可被用於計算優化,在設計之初,我們充分考慮了高效和精準的統計信息收集、存儲和計算成本、以及包括SIMD,Cache Line,Data Skipping,預聚集等計算優化的實現等多個方面,期望能打造一個優質的用户數據存儲引擎。
很多用户可能會對”將數據放在遠程,是否會影響對PieCloudDB的性能”產生疑問。PieCloudDB 在設計之初,充分考慮到了遠程訪問數據性能和成本的平衡。為了解決這一問題,PieCloudDB 做了大量的工作:
- 數據和/或輔助信息緩存,同時一致性Hash減少數據移動。
- 讀取優化:例如並行、異步等,避免網絡延遲對性能造成影響
- 計算優化:PieCloudDB實現了並將持續進行大量計算優化,包括聚集下推、Block Skipping、預計算等
- 複雜的OLAP查詢:如果不是IO瓶頸,並不會受制於數據被存儲在遠程或本地。
計算引擎
PieCloudDB 實現了MPP彈性計算引擎,做到了用户的按需付費、租户隔離、高可用、高併發等功能。
此外,PieCloudDB 打造了基於 eMPP 架構的雲原生分佈式優化器,為海量數據集上的複雜OLAP查詢提供最優的查詢計劃。在優化器的打造時,PieCloudDB 針對分佈式、複雜OLAP、和雲原生場景做了大量的思考和設計,實現了包括多表連接的最優順序、多階段聚集、分區表的靜態和動態裁剪、相關子查詢的提升轉換、CTE和遞歸CTE的優化等查詢優化。
此外,PieCloudDB還實現了大量的針對複雜OLAP查詢的高階優化,以聚集下推為例,PieCloudDB通過把聚集操作下推到連接操作之前去執行,從而極大的減少連接操作需要處理的數據量,使得查詢性能顯著提升。在某些場景下,可以得到百倍千倍的性能提升。
以下面兩個表join後聚集運算為例。正常情況下,處理順序是將兩個表做完join後,通過where 條件過濾,在做完 group 分組後再做聚集。但如果這麼處理,兩個表的join做聚集會涉及很大的數據量。通過聚集下推後,聚集被下推至最下面的a表上,此時和b表做join的是已經完成聚集操作的數據,數據量會被大大減少,從而大大提高查詢性能。
SELECT a.i, SUM(a.j) FROM agg_pushdown_t a, agg_pushdown_t b WHERE a.i = b.i GROUP BY 1;
QUERY PLAN
---------------------------------------------------------------------------
Gather Motion 3:1 (slice1; segments: 3)
-> Finalize HashAggregate
Group Key: a.i
-> Redistribute Motion 3:3 (slice2; segments: 3)
Hash Key: a.i
-> Hash Join
Hash Cond: (b.i = a.i)
-> Seq Scan on agg_pushdown_t b
-> Hash
-> Broadcast Motion 3:3 (slice3; segments: 3)
-> Partial HashAggregate
Group Key: a.i
-> Seq Scan on agg_pushdown_t a
PieCloudDB團隊正在不斷迭代產品,更多高階計算功能將很快與用户見面:
- Block Skipping
PieCloudDB 將在下一版本中實現 Block Skipping 的優化機制,在數據庫運行查詢語句時,通過預計算每個塊(block)中列聚集信息,在執行期間跳過非必要的數據塊,減少數據讀取量提高查詢性能。
- 預計算
PieCloudDB 將很快支持預計算功能。在查詢的過程中,PieCloudDB 可以根據企業查詢的特點預先計算一些重要的查詢結果,從而避免在查詢過程中的計算,提高查詢效率。
更多計算引擎的工作也正在研發中,包括SIMD,runtime filter,late materization等,相信會給用户帶來更多驚喜。
智能化雲原生平台
作為一款雲原生數據庫,PieCloudDB在設計智能化雲原生平台之初,就希望這款數據服務平台可以提供雲原生的使用體驗,降低用户、運維和管理的使用門檻。
面向用户,PieCloudDB 雲原生平台通過簡介清晰的UI,清晰的功能引導和明確的信息組織分層,為用户提供了豐富的數據洞察能力,做到了開箱即用,讓用户離數據分析更近,離繁瑣的操作更遠。
面向運維,PieCloudDB 雲原生平台全面擁抱容器化技術,可以適配多種環境。已支持私有信創環境和多雲環境,既實現私有環境離線部署,也可充分利用公有云技術設施。可以降低了部署門檻,做到數據庫維護平台託管,讓PieCloudDB 在不同的基礎設施都能發揮實力。
面向管理,PieCloudDB 雲原生平台支持快速啟動集羣,隨時可以關停,隨時可以回收,結合集羣操作記錄,用户可以用最低的成本完成數據分析。通過可視化界面讓管理更輕鬆,讓數據分析運行更透明。
PieCloudDB 團隊正在不斷迭代產品,自10月24日推出社區版和企業版後,很快將推出新的版本,希望能讓用户專注於應用,打造可靠、高效、簡單、完備的SQL數據平台。
- 數據科學在文本分析中的應用 :中英文 NLP(上)
- 『堅如磐石的 PieCloudDB』:透明加密模塊的設計與實現
- 後疫情時代,數據科學賦能旅遊行業服務質量提升
- OpenPie 和 ChatGPT 聊聊雲上數據計算的那些事兒
- 正式上市丨拓數派發布eMPP存算分離軟硬件一體機
- 『Postgres.Live 技術沙龍回顧』揭祕 PieCloudDB Database eMPP 架構設計
- PieCloudDB Database 雲上商業智能的最佳實踐
- 數據科學在量化金融中的應用:指數預測(下)
- 數據科學在量化金融中的應用:指數預測(上)
- 【DTCC 2022】雲原生數據庫PieCloudDB全新eMPP架構是如何煉成的
- 數據科學,為企業創造更大的數據價值
- 擁抱開放|OpenPie引領PostgreSQL中國代碼貢獻力