『Postgres.Live 技術沙龍回顧』揭祕 PieCloudDB Database eMPP 架構設計

語言: CN / TW / HK

2月1日,拓數派參與了由開源軟件聯盟PostgreSQL分會組織的 Postgres.Live 線上系列沙龍活動。拓數派產品及推廣總監吳疆發表主題演講《PieCloudDB:基於 PostgreSQL 的 eMPP 雲原生數據庫》。相關視頻回放歡迎訪問拓數派B站鏈接,PPT歡迎前往官網鏈接獲取。本文由演講內容整理而成。

隨着計算機技術的發展,”雲計算”、”雲平台”、”雲技術”已經成為行業裏的熱詞。無論是業務系統或是基礎架構都在往”上雲”的道路前進。大家如此熱衷於雲的最主要原因,正是由於雲計算實現了IT系統從購買到租賃的轉變。也就是説用户不再需要購買 IT 系統,而是可以選擇採用租賃的方式,按使用量或區域來進行付費,更加靈活和節約成本。 

為了滿足這一需求,雲平台技術實現的一個主要功能是存儲和計算的解耦。雲平台可以提供分佈式存儲或對象存儲,來實現了存儲的解耦。藉助於雲上虛擬化技術或由該技術實現的IaaS,可以實現計算的解耦。通過計算與存儲的解耦合,得以實現資源的池化。用户從而可以通過租用的方式來使用池中的資源,按使用量進行付費。雲平台讓用户可以專注於使用,將運維、升級等工作交給 IaaS/SaaS 等雲廠商。 

上雲和雲原生的區別是什麼? 

雖然”上雲” 作為口號已經被喊了很多年。但直到近年,才出現”雲原生”的概念。那麼,”上雲” 和 “雲原生“ 的區別是什麼? 

在最早的單機軟件系統年代,系統被部署在一台服務器上,隨着業務的發展,這台服務器將無法滿足業務的需求。此時,企業會買一台更好的服務器,配上更多的 CPU,更大的內存,更快的存儲和更快的網絡。 

然而,隨着互聯網技術的發展,這種擴容方式無法滿足業務需求。於是, ”Scale-Out” 的概念被提出,即使用多台服務器組成一個集羣,來滿足日益增長的業務需求。這種方式下,存儲資源和計算資源是緊密耦合的。當擴充計算資源時,也需要擴充存儲資源。這樣的系統的彈性較弱,只能 Scale Out,卻無法 Scale In。當業務量下降時,無法及時釋放資源。 

雲平台誕生後,實現了計算和存儲的解耦合,可根據需求動態的擴充或縮容計算和存儲資源,做到真正的彈性。因此,彈性計算是雲原生的一個基本特徵。 

另一個特徵是多租户,隨着雲原生平台讓用户完成了購買到租賃的轉換,雲平台也需要實現可以滿足多個租户同時租用平台,且按使用量付費的架構。此外,雲平台也需要提供智能化運維繫統,讓用户能夠更加方便的運維業務系統,減少運維負擔。 

因此,如果要做到真正的”雲原生”,需要讓應用充分利用雲平台的特徵。與雲原生相對的一個概念是”上雲”。業務系統雖然被部署到雲平台上,但本質上,其部署結構和被部署到數據中心的方式是一樣的,用户無法享受雲平台提供的這些優勢。因此,系統上雲並不等於雲原生。 

作為一款基礎軟件,數據庫的誕生是在雲平台之前。因此,目前業界的大部分數據庫都是非雲原生的。傳統的分佈式MPP架構存在一系列痛點,包括缺乏彈性(業務使用不靈活)、成本高昂(根據系統的最大負載配置集羣,集羣固定,資源利用率低)、木桶效應(數據庫的性能由最短板的服務器決定,擴容難)、數據孤島(多個集羣承擔着不同的業務,元數據和用户數據跨集羣訪問困難)和運維成本(DBA需同時管理多個集羣,運維成本高昂)。因此用户急需一款雲原生架構的數據庫,來解決這些痛點。 

PieCloudDB 的設計理念是什麼? 

PieCloudDB Database 是一款雲原生eMPP架構的分佈式數據庫。在設計這款數據庫時,我們遵循了幾個理念: 

  • 打造真正的雲原生數據庫:PieCloudDB 要打造成為包括多租户、彈性計算、雲原生運維平台基本特點的實時的數據庫; 
  • eMPP架構的實現:MPP,即大規模並行計算處理。藉助MPP架構,PieCloudDB 可以實現海量數據的並行處理能力。前面的 “e” 是指 ”elastic”,彈性。PieCloudDB 要實現一個彈性的 MPP 架構,即可以橫向和縱向靈活擴、縮容,及時滿足用户的業務需求;並能夠在不同的集羣之間做到用户數據和元數據的共享。
  • 安全可靠:對於數據庫,特別是一款雲上數據庫而言,數據安全是至關重要的,PieCloudDB需要能夠保證用户的數據不丟失、不泄露、不被沒有授權的人非法看到。 
  • 使用簡單:PieCloudDB 要減少用户使用數據庫的成本,提供智能的運維平台,降低使用門檻。
  • 功能齊全:PieCloudDB 需要具備完備的數據庫功能,能夠支撐大部分的業務應用場景;提供包括完備的事務支持、完善的SQL標準、友好的用户接口、生態組件的兼容等功能; 
  • 性能極致:數據庫作為一款基礎軟件,性能是最關鍵的要素之一。PieCloudDB 需要做到能夠為用户的業務場景提供一個安全可靠、性能優越的底座。

PieCloudDB 的架構有什麼特點? 

在上述設計理念的基礎上,PieCloudDB 的系統架構被分為三個層次。其中最底層的是雲平台。雲平台可以是私有云、公有云、也可以是混合雲、行業雲、專有云。PieCloudDB 在系統設計過程中,充分考慮了多雲的方案,做到了雲中立。最上層,是搭建在 PieCloudDB 之上的用户的業務平台,可以支持多個租户的使用場景,因此企業的生產部、銷售部、財務部等部門可以作為不同的租户接入到 PieCloudDB 中。 

中間層的 PieCloudDB 本身的架構也被分為了三個層次,最上面是元數據層;中間是計算層,其中每一個虛擬數倉作為最小的計算單元,為用户提供實時數據分析的服務。底層是共享存儲層, 提供了用户數據的存儲。 

PieCloudDB 核心架構特點主要包括四個部分:元數據服務、eMPP分佈式引擎、用户數據存儲和查詢優化器。 

元數據服務 

元數據即 catelog 數據。PieCloudDB 實現了多租户,即多個租户可以同時使用 PieCloudDB 平台,同時可以創建多個虛擬數倉來進行數據分析業務。此時,元數據就不能和用户數據耦合在一起。因此,PieCloudDB 實現了元數據和計算資源以及存儲資源的分離,被稱為元數據服務。 

PieCloudDB 在進行元數據服務的設計時考慮到了四個因素: 

  • 高可用和多集羣的支持。為了提高性能的可用性,需要提供Multi-master,即當出現一個節點失效時,系統仍然可以提供對外的服務。 
  • 實現多節點共同訪問的數據存儲 
  • 實現分佈式鎖 
  • 事務上,實現多機併發訪問和分佈式環境下的多版本(MVCC) 

在元數據服務的實現上,PieCloudDB 將系統中的元數據的元組以 key-value 的形式存儲到蘋果公司開發並開源的 FoundationDB,打造了 mStore(meta data store)。元數據實現了基於 MVCC 的事務隔離級別,並使用FoundataionDB Key的自然排序實現了索引。PieCloudDB 實現了全新的基於Key-value的存儲方式來存放系統表,將元數據存儲在系統表中,因此用户看到的元數據實際上是一個個系統表。 

eMPP 分佈式引擎 

PieCloudDB 的 eMPP 分佈式引擎除了具有高性能並行計算功能,還添加了計算資源的動態擴縮容特性。具體可以被分為三個層面: 

  • 計算 

PieCloudDB 分佈式引擎首先是一個 MPP 引擎, 可以將單一的數據分析在集羣中並行處理。與傳統的MPP 引擎不同的是,PieCloudDB 做到了真正的彈性,可以進行集羣大小、集羣類型、集羣數量的彈性伸縮。同時,PieCloudDB 支持多租户,多用户、多集羣,系統中同時可能存在多個計算集羣在運行,因此保證不同租户和集羣實現隔離性是至關重要的,不同租户和集羣不會互相影響,避免用户量的上升導致系統性能的下降,保證了高併發和高可用性。在集羣不需要使用的情況下,可以將集羣暫停,幫助用户節約成本。 

  • 存儲 

PieCloudDB在設計分佈式引擎時,還需要考慮到用户數據的存儲。用户數據存儲的設計上,PieCloudDB 考慮到了多租户的隔離,計算引擎在讀取用户數據時,要根據容量和帶寬對存儲的訪問進行獨立的伸縮。PieCloudDB 的存儲服務也需要保證按使用量付費,做到高可用,支持跨多數據中心複製數據。PieCloudDB 也需要保證數據的一致性,在全局存儲一份數據,通過共享存儲來實現數據共享,避免拷貝和維護多份數據副本。 

  • 事務 

事務上,PieCloudDB 分佈式引擎需要支持包括:

  • ACID:支持兩種隔離級別(Read Committed 和 Repeatable Read) 
  • 擴展性:事務管理器無單點性能瓶頸,隨着計算節點的增加,系統處理的性能會有近似於線性的提升 
  • 隔離性:不同租户之間的事務管理器是完全隔離的,避免租户之間的互相影響。當一個租户在進行某個非常耗性能的查詢時,也不會影響到其他租户的性能。 
  • 容錯性:當基礎設施出現例如CPU、內存、網絡等故障時,系統需要做到自動容錯,不會出現系統不可用的情況。 

用户數據存儲 

在設計存儲引擎時,PieCloudDB 充分考慮到了雲平台的特點。這裏提到的雲平台,不僅僅是公有云平台,還包括私有云、混合雲、專有云、容器雲等。PieCloudDB 存儲引擎的設計還充分考慮到對對象存儲的支持,HDFS、本地磁盤等多種存儲環境的兼容,以及對不斷髮展的現代的硬件和存儲技術(包括CPU/GPU的高速緩存的訪問、數據的局部性優化(SIMD)等)的支持等。 

基於這些考慮,PieCloudDB 的存儲引擎的設計包括以下幾點目標: 

  • 數據分佈的彈性 

PieCloudDB 的計算引擎是 eMPP 架構的,存儲引擎也需要能夠滿足計算引擎的動態的擴容與縮容。用户數據以分佈式的方式被存儲在各個不同的存儲單元中,針對不同的雲平台,存儲單元也略有不同。為了提高查詢的效率,從存儲資源讀取數據時需要避免雲存儲訪問的延時,PieCloudDB的計算資源需要對雲存儲的數據進行緩存,緩存一部分的本地數據來提高系統查詢的速度。 

在設計本地數據的緩存時,當進行擴縮容時,需要儘量避免數據移動。例如當計算節點從 4 個擴到 8 個,需要對數據進行再平衡,此時需要儘可能減少在節點間進行大量的數據傳輸。 

  • 數據安全性 

為了保證數據的安全性,PieCloudDB 通過透明數據加密技術,利用三級密鑰來對數據進行實時的加解密。PieCloudDB 的存儲引擎實現了行列混存的存儲形式。如此設計主要考慮到兩個方面: 

  • 用户的存儲成本 

用户在雲平台上存儲大量的數據,會造成存儲成本。PieCloudDB 自動選取適用類型的編碼,提高壓縮效率,減少對象存儲的訪問開銷。 

  • OLAP 性能 

為了避免查詢性能的影響,PieCloudDB不僅設計了行列混存的存儲引擎,還設計了多級緩存,包括重新定義了數據在內存和存儲中的存儲格式,避免數據從內存到外存,或從外存到內存讀取數據時進行數據的轉換。很多數據庫都實現了 Analyze 命令,用來收集系統中的統計信息。PieCloudDB 在存儲數據時,在文件級別,進行了數據的統計分析。PieCloudDB 智能Analyze可以更好的收集統計信息,幫助查詢優化器生成更好的查詢計劃。 

查詢優化 

作為一款基礎軟件,數據庫在實現分佈式化後,查詢優化的難度成指數級上升。PieCloudDB 的查詢優化器對於雲原生環境進行了大量的創新,可以為海量數據集上的複雜 OLAP 查詢在有限的時間內提供最優的查詢計劃。PieCloudDB的查詢優化器主要有三個特點: 

  • 一款分佈式優化器 

作為一個分佈式系統,PieCloudDB 查詢優化器充分考慮到了分佈式架構的特點,在計算和收集節點間執行時間的基礎上進行優化,生成的查詢計劃可以在計算節點間並行執行。分佈式查詢優化器可以將執行計劃分佈到多個更小的計劃單元中,提高查詢效率。 

  • 能夠處理複雜OLAP查詢 

作為一款分析型數據庫,PieCloudDB 針對複雜OLAP查詢進行了多種查詢優化。實現了包括OLAP查詢中最困難的多表連接的最優順序查詢、針對分析型查詢中常見的聚集函數的多階段聚集優化、利用分區規則進行分區表的靜態和動態裁剪優化、針對低效的子查詢的提升轉換優化、讓分佈式下的CTE語句可以高效執行的CTE和遞歸CTE的優化。 

  • 一款雲原生優化器 

PieCloudDB 針對雲環境的特徵,PieCloudDB 提供了更多高階的優化。包括通過將聚集函數儘量推到查詢計劃最下層減少執行器處理數據量的聚集下推、以及以及可以在查詢時自動跳過一些不需要訪問的block來提高查詢性能的文件查詢裁剪 (block skipping)等。 

PieCloudDB 2.1 新版本有哪些新特性? 

PieCloudDB 將發佈2.1全新版本,新版本主要進行了三個方面的增強: 

安全性增強 

數據庫上雲後,數據的安全性是用户最關心的話題之一。PieCloudDB 在2.1版本中將進行大量的數據安全性增強。 

通過三級密鑰加密技術,加密用户數據,避免被未經許可的人員讀取。用户可以通過KMS等密鑰管理系統生成主密鑰。PieCloudDB 會根據主密鑰生成租户密鑰,再根據租户密鑰生成表密鑰。表密鑰被用來加密表數據。當數據被寫入數據文件中時,PieCloudDB 會針對每個數據頁面生成頁密鑰,從而保證數據存儲做到了完全的加密。在進行數據查詢時,PieCloudDB 會使用不同的密鑰對數據進行解密。透明加密做到了用户無感知,不會影響到用户業務,加解密對性能影響小。加密技術和流程合規,符合數據安全和業務的審計要求。 

此外,在雲原生安全方面,PieCloudDB 在傳輸層和緩存數據都進行了加密。在元數據的持久化存儲以及用户數據的多副本加密存儲上,PieCloudDB 都進行了加強。在計算安全方面,當出現集羣失效時,不會影響用户數據,避免用户數據的丟失,無泄漏,同時也保證了事務的完整性。 

全鏈路優化 

PieCloudDB 通過全新的存儲引擎簡墨(JANM)實現了全鏈路優化。簡墨的名稱起源於”竹簡墨書”,形象的描述了PieCloudDB存儲引擎行列混存的架構。列存儲實現了更好的壓縮比,而行存儲保證了每一列的數據不會太大,從而可以將很多數據加載至內存中,從而提高Cache命中率,降低CPU使用率。新的版本中,JAMN 實現了智能 Analyze,可生成更為精確的查詢規劃統計信息,查詢時可以生成更優的查詢計劃,完成了分佈式處理的增強以及動態分配讀取文件增強 Dispatch 功能 

除了存儲引擎簡墨(JANM)的重新設計,PieCloudDB 的分佈式引擎和查詢優化器也做了大量的優化,實現和提升了前文提到的聚集下推、文件查詢裁剪(Block Skipping) 的優化性能。 

生態建設 

PieCloudDB 的 2.1 版本加大了生態建設,增加了對更多雲平台的支持,實現了 FDW(Foreign Data Wrapper),使用户可以訪問包括但不限於HDFS、MySQL等數據源,同時支持用户自行開發模塊來訪問新的存儲數據源。支持了Kafka 流式數據的導入。併兼容了眾多生態組件,包括開源Apache Madlib,PostGIS等。 

關於2.1版本的更多特性,很快將在PieCloudDB官網上進行揭祕,歡迎大家的關注。也歡迎大家前往 www.openpie.com/product 申請試用。