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

簡介:Hologres技術揭祕系列持續更新中,本期咱們將帶來Hologres高性能原生加速查詢MaxCompute的技術原理解析。

Hologres(中文名交互式分析)是阿里雲自研的一站式實時數倉,這個雲原生系統融合了實時服務和分析大數據的場景,全面兼容PostgreSQL協議並與大數據生態無縫打通,能用同一套數據架構同時支持實時寫入實時查詢以及實時離線聯邦分析。它的出現簡化了業務的架構,與此同時爲業務提供實時決策的能力,讓大數據發揮出更大的商業價值。從阿里集團誕生到雲上商業化,隨着業務的發展和技術的演進,Hologres也在持續不斷優化核心技術競爭力,爲了讓你們更加了解Hologres,咱們計劃持續推出Hologres底層技術原理揭祕系列,從高性能存儲引擎到高效率查詢引擎,高吞吐寫入到高QPS查詢等,全方位解讀Hologres,請你們持續關注!html

往期精彩內容:緩存

本期咱們將帶來Hologres高性能原生加速查詢MaxCompute的技術原理解析。網絡

隨着數據收集手段不斷豐富,行業數據大量積累,數據規模已增加到了傳統軟件行業沒法承載的海量數據(TB、PB、EB)級別,MaxCompute(原名ODPS)也所以應運而生,致力於批量結構化數據的存儲和計算,提供海量數據倉庫的解決方案及分析建模服務,是一種快速、徹底託管的EB級數據倉庫解決方案。架構

Hologres在離線大數據場景上與MaxCompute自然無縫融合,無需數據導入導出就能實現加速查詢MaxCompute,全兼容訪問各類MaxCompute文件格式,實現對PB級離線數據的毫秒級交互式分析。而這一切的背後,都離不開Hologres背後的執行器SQE(S Query Engine),經過SQE實現對MaxCompute的Native訪問,而後再結合Hologres高性能分佈式執行引擎HQE的處理,達到極致性能。併發

Hologres加速查詢MaxCompute主要有如下幾個優點:app

  • 高性能:能夠直接對MaxCompute數據加速查詢,具備亞秒級響應的查詢性能,在OLAP場景能夠直接即席查詢,知足絕大多數報表等分析場景。
  • 低成本:MaxCompute通過數年的發展,用戶在MaxCompute上存儲了大量數據,不須要冗餘一份存儲可直接進行訪問;另外一方面用戶能夠只需將部分高性能場景的數據遷移到SSD上,報表等分析場景的數據能夠存儲在MaxCompute進一步下降成本。
  • 更高效:實現對MaxCompute的Native訪問,無需遷移和導入數據,就能夠高性能和全兼容的訪問各類MaxCompute文件格式,以及Hash/Range Clustered Table等複雜表,下降用戶的使用成本。

SQE 架構介紹

mc加速1.png

如上圖所示是SQE的總體架構,能夠看出整個架構也是很是簡單。MaxCompute的數據統一存儲在Pangu,當Hologres執行一條Query去加速查詢MaxCompute的數據時,在Hologres端:異步

  • Hologres Frontend經過RPC向SQE Master請求獲取Meta等相關信息。
  • Hologres Blackhole 經過 RPC 向 SQEExecutor 請求獲取具體的數據相關信息。
  • SQE由兩種角色的進程組成:
  • SQE Master負責處理Meta相關的請求,主要負責獲取表、分區元數據、鑑權以及文件分片等功能。
  • SQE Executor做爲SQE的核心,負責具體讀取數據請求,涉及Block Cache、預讀取、UDF 處理、表達式下推處理、索引處理、Metric、Meter等等功能。

MaxCompute外表引擎核心技術創新

基於SQE的架構,能作到對MaxCompute的數據高性能加速查詢,主要是基於如下技術創新優點:分佈式

1)抽象分佈式外表高併發

結合MaxCompute的分佈式特性,Hologres抽象了一個分佈式的外表,來支持訪問MaxCompute分佈式數據。目前可支持訪問跨集羣的MaxCompute分佈式盤古文件,並按MaxCompute計算集羣就近讀取。性能

2)和 MaxCompute Meta無縫互通,支持帶版本的元數據緩存

SQE和MaxCompute 的 Meta 無縫互通,能夠作到 Meta 和 Data 實時獲取,支持經過Import Foreign Schema命令,自動同步MaxCompute的元數據到Hologres的外表,實現外表的自動建立,結構自動更新。

3)支持UDF/表達式下推

SQE 經過支持 UDF/表達式下推,來實現用戶自定義的UDF計算;將表達式下推能夠減小無用的數據傳輸帶來的開銷,進一步提高性能。

4)異步ORC Reader,異步prefetch

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

5)支持Block Cache

爲了不每次讀數據都用IO到文件中取,SQE一樣使用BlockCache把經常使用和最近用的數據放在內存中,減小沒必要要的IO,加快讀的性能。在同一個節點內,經過一致性Hash實現將相同訪問的數據共享一個Block Cache。 好比在Scan 場景可帶來2倍以上的性能提高,大大提高查詢性能。

6)常駐進程,減小調度開銷

傳統的進程模型等架構須要動態實時的建立進程等調度操做,帶來了較大的調度開銷。SQE 採用常駐進程模式,避免沒必要要的調度開銷,此外還能夠大大提高Block Cache的命中率和有效使用率。

7)Network Shuffle,減小落盤開銷

Network Shuffle須要提供一種快速且穩定的容錯機制。因爲Network Shuffle必須保證發送端和接收端進程同時alive才能完成數據shuffle。一樣的,若是採用傳統落盤的方式來進行Network Shuffle的Retry,雖然可以保證穩定性,可是可能會在Retry過程當中因爲磁盤IO引入比較大的性能overhead。爲了解決這個問題,咱們優化了分階段調度來解決快速穩定的容錯問題。

MaxCompute外表引擎升級到HQE

上面提到了咱們經過SQE進行加速查詢MaxCompute外表,經過SQE查詢時性能能夠作到很好,可是和Hologres交互時中間會有一層RPC 交互,在數據量較大時網絡會存在必定瓶頸。

所以咱們基於Hologres已有的能力,在Hologres V0.10及以上版本咱們對執行引擎進行了優化,支持Hologres HQE查詢引擎直讀MaxCompute 表,在性能上獲得進一步的提高,較SQE方式讀取有 30%以上的性能提高。

這主要得益於如下幾個方面:

1) 節省了 SQE 和 Hologres中間 RPC 的交互,至關於節省一次數據的序列化和反序列化,在性能上獲得進一步的提高。

2) 能夠複用Hologres的Block Cache,這樣第二次查詢時無需訪問存儲,避免存儲IO,直接從內存訪問數據,更好的加速查詢。

3) 能夠複用已有的Filter 下推能力,減小須要處理的數據量。

4) 在底層的IO層實現了預讀和Cache,更進一步加速Scan時的性能。

如下是某客戶某實際在線業務查詢的性能數據:

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%
執行817個SQL,整體性能提高70%,其中長 Query 提高80%以上。 說明:該優化目前已在Hologres V0.10上線,歡迎點擊 查看文檔使用。 # MaxCompute加速場景選擇 在Hologres中加速查詢MaxCompute有兩種方式: 1)建立外表(數據仍是存儲在MaxCompute中),性能相比在MaxCompute中查詢會有2-5倍的提高 2)導入內表,性能相比外表約有10-100倍的提高 建立外表的方式其原理就是PostgreSQL中的Foreign Data Wrappers,經過外部訪問接口,來訪問存儲在外部的數據。 建議 您使用更方便的IMPORT FOREIGN SCHEMA 方式來建立外表,能夠更好的簡化元數據的同步,無需關注字段類型映射等。 直接建外表並的方式其實是利用查詢引擎的優化能力來提升效率的,可是沒有利用到Hologres的索引能力。因此當把外表導到內表的時候,能夠根據查詢的方式指定內表的索引結構,經過這些索引能力帶來更高的查詢性能。這就是外表導入內表,內表的性能更好的緣由,能夠充分發揮數倉的索引優化能力。 目前這兩種方式主要對好比下:
<span class="lake-fontsize-12">場景/維度</span> <span class="lake-fontsize-12">性能</span> <span class="lake-fontsize-12">存儲成本</span> <span class="lake-fontsize-12">數據量</span> <span class="lake-fontsize-12">索引</span> <span class="lake-fontsize-12">便捷性</span>
<span class="lake-fontsize-12">Hologres 內表</span> <span>很是好</span> <span>高</span><span>(SSD)</span> <span>可支持PB級</span> <span>可支持位圖、聚簇等多種索引</span> <span>須要導入數據</span>
<span class="lake-fontsize-12">Hologres 外表</span> <span>較好</span> <span>低</span><span>(HDD)</span> <span>單次Query查詢200GB</span><span>限制</span> <span>只支持ODPS索引</span> <span>無需遷移和導入數據</span>
從上面對比能夠看出: * 若是您是數據量很大、對性能有很高的要求時(好比100ms內等),對查詢延遲敏感,對查詢有SLA要求時,建議您將數據導入Hologres內表,進行查詢訪問。 * 若是是臨時性的探索性分析,或者對延遲不敏感的內部業務,可使用MaxCompute外表方式,減小數據移動。 * 除上述場景外,您能夠根據具體業務狀況選擇合適的使用場景。 # MaxCompute與Hologres的組合關係 上面介紹了不少Hologres外表查詢引擎如何加速查詢MaxCompute的場景,但並非說全部類型的查詢都適合在Hologres的外表引擎上執行。 Hologres是針對交互式分析場景設計的同步的查詢引擎,面向的是大數據進,小數據出的場景,典型用在Serving和Analytics的場景。而MaxCompute是針對海量數據加工處理處理場景設計的異步的數據加工引擎,面向的是大數據進,大數據出的場景,典型用在ETL的場景。在ETL的場景,做業異步提交,IO接口針對Scan優化,計算過程須要節點的冗餘設計支撐高可用,須要計算狀態落盤從而能夠在失敗時自動重試,而這些都是Hologres不具有的能力。所以MaxCompute+Hologres組合在一塊兒,造成了數據加工+服務的一站式體驗,減小了數據的隔離和冗餘,能夠爲大數據數倉提供合理的解決方案架構,支撐實時離線一體化的開發體驗。 # mc加速2.png總結 Hologres經過SQE與MaxCompute深度整合,充分利用Hologres和MaxCompute的優點,以極致性能爲目標,直接就能加速查詢MaxCompute數據,讓用戶更方便高效的進行交互式分析,同時也下降了極大的分析成本,實現離線數倉服務一體化。 做者簡介:王奇(花名慧青),阿里巴巴技術專家,現從事交互式分析引擎Hologres研發工做。 後續咱們將會陸續推出有關Hologres的技術底層原理揭祕系列,具體規劃以下,敬請持續關注! * Hologres揭祕: 首次公開!阿里巴巴雲原生實時數倉核心技術揭祕 * Hologres揭祕: 首次揭祕雲原生Hologres存儲引擎 * Hologres揭祕: 深度解析高效率分佈式查詢引擎 * Hologres揭祕:高性能原生加速MaxCompute核心原理(本文) * Hologres揭祕:__如何實現MaxCompute與Hologres數據同步速度快百倍 * Hologres揭祕:__如何支持高吞吐Upsert * Hologres揭祕:__如何支持在線服務場景的超高QPS * Hologres揭祕:__如何支持高併發查詢 * Hologres揭祕:__如何支持高可用架構 * Hologres揭祕:__如何支持資源隔離,支持多種負載 * Hologres揭祕:__向量檢索引擎Proxima原理與使用實踐 * Hologres揭祕:__讀懂執行計劃,查詢性能翻十倍 * Hologres揭祕:__分佈式系統如何設計Shard與Table Group * Hologres揭祕:__如何支持更多Postgres生態擴展包 * Hologres揭祕:高吞吐寫入Hologres的N種姿式 * ...... 感謝您的閱讀,也歡迎使用體驗Hologres,能夠參考 使用手冊,同時也歡迎掃碼加入釘羣進行技術交流: image > 本文內容由阿里雲實名註冊用戶自發貢獻,版權歸原做者全部,阿里雲開發者社區不擁有其著做權,亦不承擔相應法律責任。具體規則請查看《阿里雲開發者社區用戶服務協議》和《阿里雲開發者社區知識產權保護指引》。若是您發現本社區中有涉嫌抄襲的內容,填寫侵權投訴表單進行舉報,一經查實,本社區將馬上刪除涉嫌侵權內容。
相關文章
相關標籤/搜索