Hologres揭秘:高性能原生加速MaxCompute核心原理

Hologres(中文名交互式分析)是阿里云自研的一站式實時數(shù)倉,這個云原生系統(tǒng)融合了實時服務和分析大數(shù)據(jù)的場景,全面兼容PostgreSQL協(xié)議并與大數(shù)據(jù)生態(tài)無縫打通,能用同一套數(shù)據(jù)架構(gòu)同時支持實時寫入實時查詢以及實時離線聯(lián)邦分析。它的出現(xiàn)簡化了業(yè)務的架構(gòu),與此同時為業(yè)務提供實時決策的能力,讓大數(shù)據(jù)發(fā)揮出更大的商業(yè)價值。從阿里集團誕生到云上商業(yè)化,隨著業(yè)務的發(fā)展和技術(shù)的演進,Hologres也在持續(xù)不斷優(yōu)化核心技術(shù)競爭力,為了讓大家更加了解Hologres,我們計劃持續(xù)推出Hologres底層技術(shù)原理揭秘系列,從高性能存儲引擎到高效率查詢引擎,高吞吐寫入到高QPS查詢等,全方位解讀Hologres,請大家持續(xù)關(guān)注!

本期我們將帶來Hologres高性能原生加速查詢MaxCompute的技術(shù)原理解析。

隨著數(shù)據(jù)收集手段不斷豐富,行業(yè)數(shù)據(jù)大量積累,數(shù)據(jù)規(guī)模已增長到了傳統(tǒng)軟件行業(yè)無法承載的海量數(shù)據(jù)(TB、PB、EB)級別,MaxCompute(原名ODPS)也因此應運而生,致力于批量結(jié)構(gòu)化數(shù)據(jù)的存儲和計算,提供海量數(shù)據(jù)倉庫的解決方案及分析建模服務,是一種快速、完全托管的EB級數(shù)據(jù)倉庫解決方案。

Hologres在離線大數(shù)據(jù)場景上與MaxCompute天然無縫融合,無需數(shù)據(jù)導入導出就能實現(xiàn)加速查詢MaxCompute,全兼容訪問各種MaxCompute文件格式,實現(xiàn)對PB級離線數(shù)據(jù)的毫秒級交互式分析。而這一切的背后,都離不開Hologres背后的執(zhí)行器SQE(S Query Engine),通過SQE實現(xiàn)對MaxCompute的Native訪問,然后再結(jié)合Hologres高性能分布式執(zhí)行引擎HQE的處理,達到極致性能。

Hologres加速查詢MaxCompute主要有以下幾個優(yōu)勢:

  • 高性能:可以直接對MaxCompute數(shù)據(jù)加速查詢,具有亞秒級響應的查詢性能,在OLAP場景可以直接即席查詢,滿足絕大多數(shù)報表等分析場景。
  • 低成本:MaxCompute經(jīng)過數(shù)年的發(fā)展,用戶在MaxCompute上存儲了大量數(shù)據(jù),不需要冗余一份存儲可直接進行訪問;另一方面用戶可以只需將部分高性能場景的數(shù)據(jù)遷移到SSD上,報表等分析場景的數(shù)據(jù)可以存儲在MaxCompute進一步降低成本。
  • 更高效:實現(xiàn)對MaxCompute的Native訪問,無需遷移和導入數(shù)據(jù),就可以高性能和全兼容的訪問各種MaxCompute文件格式,以及Hash/Range Clustered Table等復雜表,降低用戶的使用成本。

SQE 架構(gòu)介紹

mc加速1.png

如上圖所示是SQE的整體架構(gòu),可以看出整個架構(gòu)也是非常簡單。MaxCompute的數(shù)據(jù)統(tǒng)一存儲在Pangu,當Hologres執(zhí)行一條Query去加速查詢MaxCompute的數(shù)據(jù)時,在Hologres端:

  • Hologres Frontend通過RPC向SQE Master請求獲取Meta等相關(guān)信息。
  • Hologres Blackhole 通過 RPC 向 SQE Executor 請求獲取具體的數(shù)據(jù)相關(guān)信息。
  • SQE由兩種角色的進程組成:
    • SQE Master負責處理Meta相關(guān)的請求,主要負責獲取表、分區(qū)元數(shù)據(jù)、鑒權(quán)以及文件分片等功能。
    • SQE Executor作為SQE的核心,負責具體讀取數(shù)據(jù)請求,涉及Block Cache、預讀取、UDF 處理、表達式下推處理、索引處理、Metric、Meter等等功能。

MaxCompute外表引擎核心技術(shù)創(chuàng)新

基于SQE的架構(gòu),能做到對MaxCompute的數(shù)據(jù)高性能加速查詢,主要是基于以下技術(shù)創(chuàng)新優(yōu)勢:
1)抽象分布式外表
結(jié)合MaxCompute的分布式特性,Hologres抽象了一個分布式的外表,來支持訪問MaxCompute分布式數(shù)據(jù)。目前可支持訪問跨集群的MaxCompute分布式盤古文件,并按MaxCompute計算集群就近讀取。

2)和 MaxCompute Meta無縫互通,支持帶版本的元數(shù)據(jù)緩存
SQE和MaxCompute 的 Meta 無縫互通,可以做到 Meta 和 Data 實時獲取,支持通過Import Foreign Schema命令,自動同步MaxCompute的元數(shù)據(jù)到Hologres的外表,實現(xiàn)外表的自動創(chuàng)建,結(jié)構(gòu)自動更新。

3)支持UDF/表達式下推
SQE 通過支持 UDF/表達式下推,來實現(xiàn)用戶自定義的UDF計算;將表達式下推可以減少無用的數(shù)據(jù)傳輸帶來的開銷,進一步提升性能。

4)異步ORC Reader,異步prefetch
目前MaxCompute大部分數(shù)據(jù)為ORC格式,在Hologres V0.10及以上版本,Hologres更新了執(zhí)行引擎,使用異步 Reader 進行更高效的異步讀取,還支持異步prefetch,進一步降低讀取延遲;此外Hologres支持了 **IO 合并、LazyRead、Lazy Decoding **等一些列的優(yōu)化技術(shù)手段,來降低在 IO 在整個查詢上的延遲,以帶來極致性能。

5)支持Block Cache
為了避免每次讀數(shù)據(jù)都用IO到文件中取,SQE同樣使用BlockCache把常用和最近用的數(shù)據(jù)放在內(nèi)存中,減少不必要的IO,加快讀的性能。在同一個節(jié)點內(nèi),通過一致性Hash實現(xiàn)將相同訪問的數(shù)據(jù)共享一個Block Cache。 比如在Scan 場景可帶來2倍以上的性能提升,大大提升查詢性能。

6)常駐進程,減少調(diào)度開銷
傳統(tǒng)的進程模型等架構(gòu)需要動態(tài)實時的創(chuàng)建進程等調(diào)度操作,帶來了較大的調(diào)度開銷。SQE 采用常駐進程模式,避免不必要的調(diào)度開銷,此外還可以大大提升Block Cache的命中率和有效使用率。

7)Network Shuffle,減少落盤開銷
Network Shuffle需要提供一種快速且穩(wěn)定的容錯機制。由于Network Shuffle必須保證發(fā)送端和接收端進程同時alive才能完成數(shù)據(jù)shuffle。同樣的,如果采用傳統(tǒng)落盤的方式來進行Network Shuffle的Retry,雖然能夠保證穩(wěn)定性,但是可能會在Retry過程中由于磁盤IO引入比較大的性能overhead。為了解決這個問題,我們優(yōu)化了分階段調(diào)度來解決快速穩(wěn)定的容錯問題。

MaxCompute外表引擎升級到HQE

上面提到了我們通過SQE進行加速查詢MaxCompute外表,通過SQE查詢時性能可以做到很好,但是和Hologres交互時中間會有一層RPC 交互,在數(shù)據(jù)量較大時網(wǎng)絡會存在一定瓶頸。
因此我們基于Hologres已有的能力,在Hologres V0.10及以上版本我們對執(zhí)行引擎進行了優(yōu)化,支持Hologres HQE查詢引擎直讀MaxCompute 表,在性能上得到進一步的提升,較SQE方式讀取有 30%以上的性能提升。
這主要得益于以下幾個方面:

  1. 節(jié)省了 SQE 和 Hologres中間 RPC 的交互,相當于節(jié)省一次數(shù)據(jù)的序列化和反序列化,在性能上得到進一步的提升。
  2. 可以復用Hologres的Block Cache,這樣第二次查詢時無需訪問存儲,避免存儲IO,直接從內(nèi)存訪問數(shù)據(jù),更好的加速查詢。
  3. 可以復用已有的Filter 下推能力,減少需要處理的數(shù)據(jù)量。
  4. 在底層的IO層實現(xiàn)了預讀和Cache,更進一步加速Scan時的性能。

以下是某客戶某實際在線業(yè)務查詢的性能數(shù)據(jù):

E2E運行時間 SQL Num SQE查詢性能(平均響應) HQE查詢性能(平均響應) 性能提升
2-10s 547 4,956 ms 2,609 ms +47.34%
10-30s 207 16,757 ms 5,457 ms +67.43%
30s以上 63 78,686 ms 12,666 ms +83.90%
Total 817 13,631 ms 4,106 ms +69.87%

執(zhí)行817個SQL,總體性能提升70%,其中長 Query 提升80%以上。

MaxCompute加速場景選擇

在Hologres中加速查詢MaxCompute有兩種方式:
1)創(chuàng)建外表(數(shù)據(jù)還是存儲在MaxCompute中),性能相比在MaxCompute中查詢會有2-5倍的提升
2)導入內(nèi)表,性能相比外表約有10-100倍的提升
創(chuàng)建外表的方式其原理就是PostgreSQL中的Foreign Data Wrappers,通過外部訪問接口,來訪問存儲在外部的數(shù)據(jù)。建議您使用更方便的IMPORT FOREIGN SCHEMA 方式來創(chuàng)建外表,可以更好的簡化元數(shù)據(jù)的同步,無需關(guān)注字段類型映射等。

直接建外表并的方式實際上是利用查詢引擎的優(yōu)化能力來提高效率的,但是沒有利用到Hologres的索引能力。所以當把外表導到內(nèi)表的時候,可以根據(jù)查詢的方式指定內(nèi)表的索引結(jié)構(gòu),通過這些索引能力帶來更高的查詢性能。這就是外表導入內(nèi)表,內(nèi)表的性能更好的原因,可以充分發(fā)揮數(shù)倉的索引優(yōu)化能力。

目前這兩種方式主要對比如下:

場景/維度 性能 存儲成本 數(shù)據(jù)量 索引 便捷性
Hologres 內(nèi)表 非常好
(SSD) 可支持PB級 可支持位圖、聚簇等多種索引 需要導入數(shù)據(jù)
Hologres 外表 較好
(HDD) 單次query查詢200GB限制 只支持ODPS索引 無需遷移和導入數(shù)據(jù)

從上面對比可以看出:

  • 如果您是數(shù)據(jù)量很大、對性能有很高的要求時(比如100ms內(nèi)等),對查詢延遲敏感,對查詢有SLA要求時,建議您將數(shù)據(jù)導入Hologres內(nèi)表,進行查詢訪問。
  • 如果是臨時性的探索性分析,或者對延遲不敏感的內(nèi)部業(yè)務,可以使用MaxCompute外表方式,減少數(shù)據(jù)移動。
  • 除上述場景外,您可以根據(jù)具體業(yè)務情況選擇合適的使用場景。

MaxCompute與Hologres的組合關(guān)系

上面介紹了很多Hologres外表查詢引擎如何加速查詢MaxCompute的場景,但并不是說所有類型的查詢都適合在Hologres的外表引擎上執(zhí)行。
Hologres是針對交互式分析場景設計的同步的查詢引擎,面向的是大數(shù)據(jù)進,小數(shù)據(jù)出的場景,典型用在Serving和Analytics的場景。而MaxCompute是針對海量數(shù)據(jù)加工處理處理場景設計的異步的數(shù)據(jù)加工引擎,面向的是大數(shù)據(jù)進,大數(shù)據(jù)出的場景,典型用在ETL的場景。在ETL的場景,作業(yè)異步提交,IO接口針對Scan優(yōu)化,計算過程需要節(jié)點的冗余設計支撐高可用,需要計算狀態(tài)落盤從而可以在失敗時自動重試,而這些都是Hologres不具備的能力。因此MaxCompute+Hologres組合在一起,形成了數(shù)據(jù)加工+服務的一站式體驗,減少了數(shù)據(jù)的隔離和冗余,可以為大數(shù)據(jù)數(shù)倉提供合理的解決方案架構(gòu),支撐實時離線一體化的開發(fā)體驗。


mc加速2.png

總結(jié)

Hologres通過SQE與MaxCompute深度整合,充分利用Hologres和MaxCompute的優(yōu)勢,以極致性能為目標,直接就能加速查詢MaxCompute數(shù)據(jù),讓用戶更方便高效的進行交互式分析,同時也降低了極大的分析成本,實現(xiàn)離線數(shù)倉服務一體化。

作者簡介:王奇(花名慧青),阿里巴巴技術(shù)專家,現(xiàn)從事交互式分析引擎Hologres研發(fā)工作。

后續(xù)我們將會陸續(xù)推出有關(guān)Hologres的技術(shù)底層原理揭秘系列,敬請持續(xù)關(guān)注!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容