天天看點

首次公開!阿裡巴巴雲原生實時數倉核心技術揭秘一、傳統數倉痛點二、HSAP:服務分析一體化三、關于Hologres四、Hologres核心技術揭秘五、數倉架構更新總結

4982億,是2020年天貓雙十一成交額最終定格的數字。在這背後,是人類曆史上最大規模的人機協同,更是數字世界史無前例的巅峰挑戰。阿裡雲新一代雲原生數倉Hologres作為雙十一背後重要的技術支撐,消費者的每一次搜尋、浏覽、收藏、加購,都會變成實時資料流入Hologres進行存儲,并與天貓上沉澱的曆史離線資料進行交叉比對。

2020雙十一,Hologres頂住了5.96億每秒的實時資料洪峰,單表存儲高達2.5PB。基于萬億級資料對外提供多元分析和服務,99.99%的查詢可以在80ms以内傳回結果,真正做到資料的實時及離線一體化,支援線上應用服務。

Hologres誕生到參與2020年史上最強雙十一的三年多時間裡,完成不少從0到1的突破:

  • 從一個業務到數百業務執行個體,覆寫了阿裡巴巴集團内90%以上業務場景,包括雙十一實時直播間、智能推薦、阿裡媽媽資料平台、國際站資料平台、菜鳥資料平台、友盟+全域資料分析、CCO智能客服、新零售資料平台、考拉、餓了麼等業務。
  • 叢集規模從0到近萬台,且存儲叢集和計算叢集使用率都比較高,并完成了系統産品化-上雲-商業化的三級跳,完美賦能阿裡雲公共雲+專有雲+金融雲業務。
  • 提出HSAP(HybridServing & Analytics Processing)服務分析一體化的系統設計理念,同一份資料同時滿足實時離線線上場景的計算需求,極大的簡化了數倉架構的複雜度,降低了成本,重新定義數倉趨勢。
  • 同時,有關Hologres的技術解讀Paper入選資料庫頂會VLDB《Alibaba Hologres: ACloud-Native Service for Hybrid Serving/Analytical Processing》( http://www.vldb.org/pvldb/vol13/p3272-jiang.pdf

值此之際,我們也将首次對外公開Hologres的核心底層技術,揭秘Hologres為何能支撐阿裡巴巴核心場景的落地。 

**

一、傳統數倉痛點

1)傳統資料倉庫痛點

目前來說,大資料相關的業務場景一般有實時大屏、實時BI報表、使用者畫像和監控預警等,如下圖所示。

  • 實時大屏業務,一般是公司上司層做決策的輔助工具,以及對外成果展示,比如雙十一實時成交額大屏等場景。
  • 實時BI報表,是營運和産品經理最常用到的業務場景,适用于大部分的報表分析場景。
  • 使用者畫像,常用在廣告推薦場景中,通過更詳細的算法給使用者貼上标簽,使得營銷活動更加有針對性,更加有效的投放給目标人群。
  • 預警監控大屏,比如對網站、APP進行流量監控,在達到一定門檻值的時候可以進行報警。
首次公開!阿裡巴巴雲原生實時數倉核心技術揭秘一、傳統數倉痛點二、HSAP:服務分析一體化三、關于Hologres四、Hologres核心技術揭秘五、數倉架構更新總結

對于上面這些大資料業務場景,業界在很早之前就開始通過資料倉庫的建設來滿足這些場景的需求,比較傳統的做法是如下圖所示的離線資料倉庫,其大緻流程就是:首先将各類資料收集起來,然後經過ETL處理,再通過層層模組化對資料進行聚合、篩選等處理,最後在需要的時候基于應用層的工具對資料進行展現,或者生成報表。

首次公開!阿裡巴巴雲原生實時數倉核心技術揭秘一、傳統數倉痛點二、HSAP:服務分析一體化三、關于Hologres四、Hologres核心技術揭秘五、數倉架構更新總結

上面這種方式雖然可以對接多種資料源,但是存在一些很明顯的痛點:

  • ETL邏輯複雜,存儲、時間成本過高;
  • 資料處理鍊路非常長;
  • 無法支援實時/近實時的資料,隻能處理T+1的資料。

2)Lambda架構痛點

随着實時計算技術的興起,出現了Lambda架構。

Lambda架構的原理如下圖所示,其思路其實是相當于在傳統離線數倉的基礎上再加上一個處理實時資料的層,然後将離線數倉和實時鍊路産生的資料在Serving層進行Merge,以此來對離線産生的資料和實時産生的資料進行查詢。

從2011年至今,Lambda架構被多數網際網路公司所采納,也确實解決了一些問題,但是随着資料量的增大、應用複雜度的提升,其問題也逐漸凸顯,主要有:

  • 由多種引擎和系統組合而成,開發和維護成本高,學習成本高;
  • 資料在不同的View中存儲多份,空間浪費,資料一緻性的問題難以解決;
  • 從使用上來說,Batch,Streaming以及Merge Query等處理過程中均使用不同的language,使用起來并不容易;
  • 學習成本非常高,增大了應用成本。
首次公開!阿裡巴巴雲原生實時數倉核心技術揭秘一、傳統數倉痛點二、HSAP:服務分析一體化三、關于Hologres四、Hologres核心技術揭秘五、數倉架構更新總結

上面講到的問題,在阿裡内部其實也都遇到過。如下圖所示是阿裡巴巴在2011-2016年沉澱下來的一套實時數倉架構,其本質上也是Lambda架構,然而随着業務量及資料的增長,關系複雜度越來越大,成本急劇增加,是以,我們迫切的需要一種更優雅的方案去解決類似的問題。

首次公開!阿裡巴巴雲原生實時數倉核心技術揭秘一、傳統數倉痛點二、HSAP:服務分析一體化三、關于Hologres四、Hologres核心技術揭秘五、數倉架構更新總結

二、HSAP:服務分析一體化

基于上述背景,我們提出了HSAP(Hybrid Serving and AnalyticalProcessing)理念,它既能支援很高QPS場景的查詢寫入,又能将複雜的分析場景在一套體系裡面完成。

那麼,HSAP理念落地的核心是什麼?

  • 首先,要有一套非常強大的存儲,能夠同時存儲實時資料和離線資料,統一資料存儲;
  • 同時還要有一種高效的查詢服務,在同一個接口下(比如SQL),能夠支援高QPS的查詢,支援複雜的分析以及聯邦查詢和分析;
  • 系統能夠直接對接前端應用,例如報表和線上服務等,不需要再額外的導入導出就能即席分析,統一資料服務,減少資料移動。
首次公開!阿裡巴巴雲原生實時數倉核心技術揭秘一、傳統數倉痛點二、HSAP:服務分析一體化三、關于Hologres四、Hologres核心技術揭秘五、數倉架構更新總結

三、關于Hologres

基于HSAP的設計理念,我們要開發并落地出相應的産品,于是便誕生了Hologres。

Hologres是基于HSAP服務分析一體化理念的最佳落地實踐,相容PostgreSQL生态、支援MaxCompute資料直接查詢,支援實時寫入實時查詢,實時離線聯邦分析,低成本、高時效幫助企業快速構築流批一體的實時數倉。

Hologres這個詞是Holographic和Postgres的組合,Postgres比較好了解,代表着Hologres相容PostgreSQL生态。而Holographic需要展開分享,先看下圖:

首次公開!阿裡巴巴雲原生實時數倉核心技術揭秘一、傳統數倉痛點二、HSAP:服務分析一體化三、關于Hologres四、Hologres核心技術揭秘五、數倉架構更新總結

Holographic中文翻譯是"全息",就是大家經常聽到的3D全息投影技術的"全息"。

而Holographic Principle(全息原理)在實體學中是用來描述一個空間的性質可編碼在其邊界上。上圖是一副假想中黑洞的圖檔,距離黑洞一定距離處于可以逃逸出黑洞引力的臨界點構成了Event Horizon,就是圖中發亮光的那一圈。全息原理認為所有落入黑洞的物體資訊内容可能會被完全包含在Event Horizon的表面。

Hologres要做的事情就是對資料黑洞中的全部資訊做存儲和各種類型的計算。

四、Hologres核心技術揭秘

Hologres架構非常簡單,是存儲計算分離的架構,資料全部存在一個分布式檔案系統中,系統架構圖如下圖所示:

  • 服務節點Backend真正去接收資料、存儲和查詢,并且能夠支援資料的計算;
  • 執行引擎Frontend接收路由分發的SQL,然後生成邏輯執行計劃,再通過優化器生成分布式的實體執行計劃,釋出到Backend做分布式的執行;
  • 接入端由LBS做相應的負載均衡任務。
  • 下圖中黃色部分均部署在容器中,整個分布式系統可以做到高度容錯。
  • 相容PostgreSQL生态,在上層可以直接對接開源或者商業化的開發/BI工具,開箱即可用。
首次公開!阿裡巴巴雲原生實時數倉核心技術揭秘一、傳統數倉痛點二、HSAP:服務分析一體化三、關于Hologres四、Hologres核心技術揭秘五、數倉架構更新總結

存儲計算分離

Hologres采用存儲計算分離架構,使用者可以根據業務需求進行彈性擴縮容。分布式存儲中,常用的架構有如下三種:

  • Shared Disk/Storage:就是在存儲叢集上挂載了很多磁盤,每個計算節點都可以直接通路這些共享盤;
  • Shared Nothing:架構就是每個計算節點自己挂載存儲,節點之間可以通信,但是各個節點之間的盤不共享,存在資源浪費的情況;
  • Storage Disaggregation:就是相當于把存儲叢集看做一個大的磁盤,每個計算節點都可以通路,且每個計算節點都有一定的緩存空間,可以對緩存資料進行通路,也無需關心存儲叢集的管理,這種存儲計算分離的架構便于靈活擴容,能夠有效節省資源。
首次公開!阿裡巴巴雲原生實時數倉核心技術揭秘一、傳統數倉痛點二、HSAP:服務分析一體化三、關于Hologres四、Hologres核心技術揭秘五、數倉架構更新總結

流批一體的存儲

Hologres定位是流批一體統一存儲。對于典型的Lambda架構,是将實時資料通過實時資料的鍊路寫入到實時資料存儲中,離線資料通過離線資料的鍊路寫入到離線存儲中,然後将不同的Query放入不同的存儲中,再做Merge,由此帶來多份存儲開銷和應用層複雜的Merge操作。

而通過Hologres,資料收集之後可以走不同的處理鍊路,但是處理完成之後的結果都可以直接寫入Hologres,這樣就解決了資料的一緻性問題,也不需要去區分離線表和實時表,降低了複雜度,也大大降低了使用者的學習成本。

首次公開!阿裡巴巴雲原生實時數倉核心技術揭秘一、傳統數倉痛點二、HSAP:服務分析一體化三、關于Hologres四、Hologres核心技術揭秘五、數倉架構更新總結

存儲引擎

Hologres底層支援行存儲和列存儲兩種檔案格式,行存适用于基于PK的點查場景,列存适用于OLAP複雜查詢場景。對于兩種存儲格式Hologres在底層處理也有略微不同,如圖所示。

資料寫入的時候先寫log,log存儲在分布式檔案系統,保證整個服務的資料不會丢失,因為即便伺服器挂掉也可以從分布式系統中恢複。Log寫完之後再寫MemTable,就是記憶體表,這樣系統才認為是資料寫入成功。MemTable有一定的大小,寫滿了之後會将其中的資料逐漸Flush到檔案中,檔案是存儲在分布式系統中的。而對于行存儲和列存儲的差別就在Flush到檔案的這個過程中,這個過程會将行存表Flush成行存儲的檔案,列存表會Flush成列存檔案。在Flush的過程中會産生很多小檔案,背景會将這些小檔案合并成一個大檔案。

首次公開!阿裡巴巴雲原生實時數倉核心技術揭秘一、傳統數倉痛點二、HSAP:服務分析一體化三、關于Hologres四、Hologres核心技術揭秘五、數倉架構更新總結

執行引擎

Hologres執行引擎是通用的分布式查詢引擎,側重于優化高并發低延遲的實時查詢。通用是指可以表達和高效地執行所有類SQL查詢。其它的分布式查詢引擎,有的專注優化實時表的常用單表查詢,但是對複雜查詢表現不佳;有的支援複雜查詢,但是實時場景性能要差一截。Hologres的理念是不做妥協,對這些場景都要瞄準極緻性能。

Hologres執行引擎能夠做到對各種查詢類型的高性能處理,主要是基于以下特點:

  • 端到端的全異步處理架構,可以避免高并發系統的瓶頸,充分利用資源,并且最大可能地避免存儲計算分離系統帶來的讀資料延遲的影響。
  • 查詢用異步算子組成的執行圖DAG表示,可以友善對接查詢優化器,利用業界各種查詢優化技術。
  • 算子内部處理資料時最大可能地使用向量化執行。
  • 和存儲引擎的深度內建,靈活的執行模型,能夠充分利用各種索引,并且最大化地延遲向量物化和延遲計算,避免不必要的讀資料和計算。
  • 對常見實時資料應用查詢模式的自适應增量處理。
  • 對一些查詢模式的獨特優化。

優化器

Hologres的目标就是使用者開箱即可用,即通過SQL就能完成日常所有的業務分析需求,無需再做額外的模組化處理等操作。基于新的硬體技術,Hologres設計并實作了自己獨特的計算和存儲引擎,而優化器扮演的角色就是将使用者執行的SQL高效的運作在計算引擎上。Hologres優化器采用基于代價的優化器,能夠生成複雜的聯邦查詢執行計劃,盡可能發揮多套計算引擎的能力。同時,在長期與業務打磨的過程當中,也積累沉澱了大量的業務優化手段,讓Hologres的計算引擎在不同的業務場景下都能夠發揮極緻的性能。

HOS&HoloFlow

Hologres最核心的元件名叫blackhole,是一款完全自研的存儲計算引擎,采用異步程式設計方式開發。blackhole的底層提煉出了靈活高效的異步架構:holo-os(簡稱HOS)。在實作高性能的同時,還實作了load balance,解決了query長尾問題;實作了資源的高使用率、以及多種共享與隔離的機制。

于此同時,holo-os還推廣到了分布式環境,發展出了holo-flow分布式任務排程架構,這樣就能保證在分布式環境下也能享受到單機排程的靈活性。

Frontend

Frontend是Hologres的接入層,相容PostgreSQL協定,負責使用者請求的接入、處理以及中繼資料的管理。但由于PostgreSQL是單機系統,處理高并發的使用者請求能力有限。而Hologres面對的是複雜的業務場景以及需要支援萬甚至億級别的使用者請求,是以在實作上Frontend采用分布式,通過多版本控制+中繼資料同步等方式實作了多Frontend之間資訊實時同步,再配合LBS層的負載均衡實作了完全線性擴充和超高QPS的能力。

擴充執行引擎

在Frontend的基礎上,Hologres也提供多擴充執行引擎。

  • PQE(P Query Engine):運作SQL以及各種Function的執行器,Hologres相容Postgres提供擴充能力,支援PG生态的各種擴充元件,如Postgis,UDF(pl/java,pl/sql,pl/python)等,完美滿足不同場景不同使用者的需求,進而提供更多的計算能力。
  • SQE(S Query Engine):無縫對接MaxCompute(ODPS)的執行器,實作對MaxCompute的native通路,無需遷移和導入資料,就可以高性能和全相容的通路各種MaxCompute檔案格式,以及Hash/Range clustered table等複雜表,實作對PB級離線資料的互動式分析。

生态與資料內建

Hologres作為流批一體的實時數倉,支援多種異構資料源的實時、離線寫入,包括MySQL、Datahub等,能夠達到每秒千萬條的實時寫入能力,寫入即可查和每秒千萬次的點查能力。而這些強大的能力都是基于Hologres的JDBC接口。

Hologres在接口上完全相容PostgreSQL(包括文法、語義、協定等),可以直接使用PostgreSQL的JDBC Driver去連接配接Hologres,并進行資料的讀寫。目前市面上的資料工具,例如BI工具、ETL工具等等,都支援PostgreSQL JDBC Driver,是以這意味着Hologres天生就有了廣泛的工具相容性和強大的生态,實作從資料處理到資料的可視化分析完整大資料生态閉環。

線上服務優化

Hologres作為HSAP服務與分析一體化的最佳落地實踐,除了具備處理分析型query的能力外,還具備十分強大的線上服務能力,例如,KV點查與向量檢索。在KV點查場景中,Holgres通過SQL接口可以輕松穩定地支援百萬級的QPS吞吐與極低的延時。在向量檢索場景,使用者同樣可以通過SQL的方式來實作向量資料的導入、向量索引的建構、查詢等操作,無需額外轉換就能查詢,性能經過實際業務的測試也相比其他産品更優。此外,一些非分析型的query通過合理的建表、配合上Hologres強大的索引能力,也同樣可以完美适用serving場景。

五、數倉架構更新

基于Hologres,多個業務場景也完成了架構更新,極大的簡化了業務架構的複雜度,如下圖所示:

首次公開!阿裡巴巴雲原生實時數倉核心技術揭秘一、傳統數倉痛點二、HSAP:服務分析一體化三、關于Hologres四、Hologres核心技術揭秘五、數倉架構更新總結

總結

Hologres作為新一代雲原生實時數倉,在今年阿裡巴巴雙11最核心的資料業務場景,連同實時計算Flink首次落地流批一體,并在穩定性、性能等方面經受住考驗,實作商業全鍊路實時化,毫秒級的海量資料處理能力,為商家和消費者帶來了更加智能的消費體驗。

随着業務的發展和技術的演進,Hologres也将持續優化核心技術競争力,真正實作服務和分析一體化的美好願望,為更多使用者持續賦能。

另,我們将會持續推出以上核心技術的專題解讀,敬請關注!

作者簡介:金曉軍(花名仙隐),阿裡巴巴資深技術專家,大資料領域從業10年,現從事互動式分析引擎Hologres設計與研發工作。

技術揭秘持續更新中:

● 2020年VLDB的論文

《Alibaba Hologres: A cloud-Native Service for Hybrid Serving/Analytical Processing》

Hologres揭秘:首次揭秘雲原生Hologres存儲引擎 Hologres揭秘:Hologres高效率分布式查詢引擎 Hologres揭秘:高性能原生加速MaxCompute核心原理 Hologers揭秘:優化COPY,批量導入性能提升5倍+ Hologres揭秘:如何支援超高QPS線上服務(點查)場景