本文為您介紹Hologres的產品架構以及每個組件的作用。
架構優勢
在傳統的分布式系統中,常用的儲存計算架構有如下三種。
Shared Disk/Storage (共用儲存)
有一個分布式的儲存叢集,每個計算節點像訪問單機資料一樣訪問這個共用儲存上的資料。這種架構的儲存層可以比較方便的擴充,但是計算節點需要引入分布式協調機制保證資料同步和一致性,因此計算節點的可擴充性有一個上限。
Shared Nothing
每個計算節點自己掛載儲存,一個節點只能處理一個分區的資料,節點之間可以通訊,最終有一個匯總節點對資料進行匯總。這種架構能比較方便的擴充,但是它的缺點是節點Failover需要等待資料載入完成之後才能提供服務;並且儲存和計算需要同時擴容,不夠靈活,擴容後,有漫長的資料Rebalance過程。
Storage Disaggregation(儲存計算分離架構)
儲存和Shared Storage類似,有一個分布式的共用儲存叢集,計算層處理資料的模式和Shared Nothing類似,資料是分區的,每個Shard只處理自己所在分區的資料,每個計算節點還可以有本機快取。
儲存計算分離的架構存在以下優勢。
一致性問題處理簡單:計算層只需要保證同一時刻有一個計算節點寫入同一分區的資料。
擴充更靈活:計算和儲存可以分開擴充,計算不夠擴計算節點,儲存不夠擴儲存節點。這樣在大促等情境上會非常靈活。計算資源不夠了,馬上擴容計算就好了,不需要像Shared Nothing那樣做耗時耗力的資料Rebalance;也不會像Shared Storage那樣,出現單機的儲存容量瓶頸。
計算節點故障恢複快:計算節點發生Failover之後,資料可以按需從分布式的共用儲存非同步拉取。因此Failover的速度非常快。
Hologres採用的是第三種儲存計算分離架構,Hologres的儲存使用的是阿里自研的PanguDistributed File System(類似HDFS)。使用者可以根據業務需求進行彈性擴縮容,輕鬆應對線上系統不同的流量峰值。
架構組件介紹
Hologres架構圖如下所示。
整個架構從上往下分為如下組件。
計算層
接入節點(Frontend,FE)
Hologres接入節點,主要用於SQL的認證、解析、最佳化,一個執行個體有多個FE接入節點。在生態上相容Postgres 11,因此使用者可以使用Postgres標準文法進行開發,也可以用Postgres相容的開發工具和BI工具直接連接Hologres。
計算HoloWorker
HoloWorker分為執行引擎、儲存引擎、調度等組件,主要負責使用者任務的計算、調度。
其中執行引擎(Query Engine,QE)主要有三個。
HQE(Hologres Query Engine)
Hologres自研執行引擎,採用可擴充的MPP架構全並行計算,向量化運算元發揮CPU極致算力,從而實現極致的查詢效能。(QE主要由HQE組成)。
PQE(Postgres Query Engine)
用於相容Postgres提供擴充能力,支援PG生態的各種向外延展群組件,如PostGIS,UDF(PL/JAVA,PL/SQL,PL/Python)等。部分HQE還沒有支援的函數和運算元,會通過PQE執行,每個版本都在持續最佳化中,最終目標是去掉PQE。
SQE(Seahawks Query Engine)
無縫對接MaxCompute(ODPS)的執行引擎,實現對MaxCompute的本地訪問,無需遷移和匯入資料,就可以高效能和全相容的訪問各種MaxCompute檔案格式,以及Hash/Range clustered table等複雜表,實現對PB級離線資料的互動式分析。
儲存引擎Storage Engine(SE)
主要用於管理和處理資料, 包括建立、查詢、更新和刪除(簡稱 CRUD)資料等。
Cache(緩衝)
主要是結果緩衝,提高查詢效能。
HOS Scheduler
輕量級調度。
Meta Service
主要用於管理中繼資料Meta資訊(包括表結構資訊以及資料在Storage Engine節點上的分布情況),並將Meta資訊提供給FE節點。
Holo Master
Hologres原生部署在K8s上,當某個Worker出現故障時,由K8s進行快速拉起建立一個新的Worker,保障Worker層級的可用性。在Worker內部,每個組件的可用性則由Holo Master負責,當組件出現狀態不正常時,Holo Master則會快速重新拉起組件,從而恢複服務。
儲存層
資料直接儲存在Pangu File System。
與MaxCompute在儲存層打通,能直接存取MaxCompute儲存在Apsara Distributed File System的資料,實現高效相互訪問。
支援直接存取OSS、DLF資料,類型包含CSV、ORC、Parquet、Hudi、Delta、Meta Data等,加速資料湖探索,也可以將資料迴流至OSS,降低儲存成本。