大數據

首次公開!阿里巴巴雲原生實時數倉核心技術揭祕

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進行流量監控,在達到一定閾值的時候可以進行報警。

image.png
 
對於上面這些大數據業務場景,業界在很早之前就開始通過數據倉庫的建設來滿足這些場景的需求,比較傳統的做法是如下圖所示的離線數據倉庫,其大致流程就是:首先將各類數據收集起來,然後經過ETL處理,再通過層層建模對數據進行聚合、篩選等處理,最後在需要的時候基於應用層的工具對數據進行展現,或者生成報表。
image.png
上面這種方式雖然可以對接多種數據源,但是存在一些很明顯的痛點:

  • ETL邏輯複雜,存儲、時間成本過高;
  • 數據處理鏈路非常長;
  • 無法支持實時/近實時的數據,只能處理T+1的數據。

2)Lambda架構痛點

隨著實時計算技術的興起,出現了Lambda架構。
Lambda架構的原理如下圖所示,其思路其實是相當於在傳統離線數倉的基礎上再加上一個處理實時數據的層,然後將離線數倉和實時鏈路產生的數據在Serving層進行Merge,以此來對離線產生的數據和實時產生的數據進行查詢。
從2011年至今,Lambda架構被多數互聯網公司所採納,也確實解決了一些問題,但是隨著數據量的增大、應用複雜度的提升,其問題也逐漸凸顯,主要有:

  • 由多種引擎和系統組合而成,開發和維護成本高,學習成本高;
  • 數據在不同的View中存儲多份,空間浪費,數據一致性的問題難以解決;
  • 從使用上來說,Batch,Streaming以及Merge Query等處理過程中均使用不同的language,使用起來並不容易;
  • 學習成本非常高,增大了應用成本。

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

二、HSAP:服務分析一體化

基於上述背景,我們提出了HSAP(Hybrid Serving and AnalyticalProcessing)理念,它既能支持很高QPS場景的查詢寫入,又能將複雜的分析場景在一套體系裡面完成。
那麼,HSAP理念落地的核心是什麼?

  • 首先,要有一套非常強大的存儲,能夠同時存儲實時數據和離線數據,統一數據存儲;
  • 同時還要有一種高效的查詢服務,在同一個接口下(比如SQL),能夠支持高QPS的查詢,支持複雜的分析以及聯邦查詢和分析;
  • 系統能夠直接對接前端應用,例如報表和在線服務等,不需要再額外的導入導出就能即席分析,統一數據服務,減少數據移動。

image.png

三、關於Hologres

基於HSAP的設計理念,我們要開發並落地出相應的產品,於是便誕生了Hologres。
Hologres是基於HSAP服務分析一體化理念的最佳落地實踐,兼容PostgreSQL生態、支持MaxCompute數據直接查詢,支持實時寫入實時查詢,實時離線聯邦分析,低成本、高時效幫助企業快速構築流批一體的實時數倉。
Hologres這個詞是Holographic和Postgres的組合,Postgres比較好理解,代表著Hologres兼容PostgreSQL生態。而Holographic需要展開分享,先看下圖:
image.png
Holographic中文翻譯是"全息",就是大家經常聽到的3D全息投影技術的"全息"。
而Holographic Principle(全息原理)在物理學中是用來描述一個空間的性質可編碼在其邊界上。上圖是一副假想中黑洞的圖片,距離黑洞一定距離處於可以逃逸出黑洞引力的臨界點構成了Event Horizon,就是圖中發亮光的那一圈。全息原理認為所有落入黑洞的物體信息內容可能會被完全包含在Event Horizon的表面。
Hologres要做的事情就是對數據黑洞中的全部信息做存儲和各種類型的計算。

四、Hologres核心技術揭祕

Hologres架構非常簡單,是存儲計算分離的架構,數據全部存在一個分佈式文件系統中,系統架構圖如下圖所示:

  • 服務節點Backend真正去接收數據、存儲和查詢,並且能夠支持數據的計算;
  • 執行引擎Frontend接收路由分發的SQL,然後生成邏輯執行計劃,再通過優化器生成分佈式的物理執行計劃,發佈到Backend做分佈式的執行;
  • 接入端由LBS做相應的負載均衡任務。
  • 下圖中黃色部分均部署在容器中,整個分佈式系統可以做到高度容錯。
  • 兼容PostgreSQL生態,在上層可以直接對接開源或者商業化的開發/BI工具,開箱即可用。

image.png

存儲計算分離

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

  • Shared Disk/Storage:就是在存儲集群上掛載了很多磁盤,每個計算節點都可以直接訪問這些共享盤;
  • Shared Nothing:架構就是每個計算節點自己掛載存儲,節點之間可以通信,但是各個節點之間的盤不共享,存在資源浪費的情況;
  • Storage Disaggregation:就是相當於把存儲集群看做一個大的磁盤,每個計算節點都可以訪問,且每個計算節點都有一定的緩存空間,可以對緩存數據進行訪問,也無需關心存儲集群的管理,這種存儲計算分離的架構便於靈活擴容,能夠有效節省資源。

image.png

流批一體的存儲

Hologres定位是流批一體統一存儲。對於典型的Lambda架構,是將實時數據通過實時數據的鏈路寫入到實時數據存儲中,離線數據通過離線數據的鏈路寫入到離線存儲中,然後將不同的Query放入不同的存儲中,再做Merge,由此帶來多份存儲開銷和應用層複雜的Merge操作。
而通過Hologres,數據收集之後可以走不同的處理鏈路,但是處理完成之後的結果都可以直接寫入Hologres,這樣就解決了數據的一致性問題,也不需要去區分離線表和實時表,降低了複雜度,也大大降低了使用者的學習成本。
image.png

存儲引擎

Hologres底層支持行存儲和列存儲兩種文件格式,行存適用於基於PK的點查場景,列存適用於OLAP複雜查詢場景。對於兩種存儲格式Hologres在底層處理也有略微不同,如圖所示。
數據寫入的時候先寫log,log存儲在分佈式文件系統,保證整個服務的數據不會丟失,因為即便服務器掛掉也可以從分佈式系統中恢復。Log寫完之後再寫MemTable,就是內存表,這樣系統才認為是數據寫入成功。MemTable有一定的大小,寫滿了之後會將其中的數據逐漸Flush到文件中,文件是存儲在分佈式系統中的。而對於行存儲和列存儲的區別就在Flush到文件的這個過程中,這個過程會將行存表Flush成行存儲的文件,列存表會Flush成列存文件。在Flush的過程中會產生很多小文件,後臺會將這些小文件合併成一個大文件。
image.png

執行引擎

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,多個業務場景也完成了架構升級,極大的簡化了業務架構的複雜度,如下圖所示:
image.png

總結

Hologres作為新一代雲原生實時數倉,在今年阿里巴巴雙11最核心的數據業務場景,連同實時計算Flink首次落地流批一體,並在穩定性、性能等方面經受住考驗,實現商業全鏈路實時化,毫秒級的海量數據處理能力,為商家和消費者帶來了更加智能的消費體驗。
隨著業務的發展和技術的演進,Hologres也將持續優化核心技術競爭力,真正實現服務和分析一體化的美好願望,為更多用戶持續賦能。

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

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

Leave a Reply

Your email address will not be published. Required fields are marked *