新一代Hologres实时数仓大揭秘
作者:金曉軍(仙隱),阿里云資深技術(shù)專家,大數(shù)據(jù)領(lǐng)域從業(yè)10年,現(xiàn)從事交互式分析引擎Hologres設(shè)計與研發(fā)工作。
一、傳統(tǒng)數(shù)倉痛點
1)傳統(tǒng)數(shù)據(jù)倉庫痛點
目前來說,大數(shù)據(jù)相關(guān)的業(yè)務(wù)場景一般有實時大屏、實時BI報表、用戶畫像和監(jiān)控預(yù)警等,如下圖所示。
- 實時大屏業(yè)務(wù),一般是公司領(lǐng)導(dǎo)層做決策的輔助工具,以及對外成果展示,比如雙十一實時成交額大屏等場景。
- 實時BI報表,是運營和產(chǎn)品經(jīng)理最常用到的業(yè)務(wù)場景,適用于大部分的報表分析場景。
- 用戶畫像,常用在廣告推薦場景中,通過更詳細(xì)的算法給用戶貼上標(biāo)簽,使得營銷活動更加有針對性,更加有效的投放給目標(biāo)人群。
- 預(yù)警監(jiān)控大屏,比如對網(wǎng)站、APP進(jìn)行流量監(jiān)控,在達(dá)到一定閾值的時候可以進(jìn)行報警。
對于上面這些大數(shù)據(jù)業(yè)務(wù)場景,業(yè)界在很早之前就開始通過數(shù)據(jù)倉庫的建設(shè)來滿足這些場景的需求,比較傳統(tǒng)的做法是如下圖所示的離線數(shù)據(jù)倉庫,其大致流程就是:首先將各類數(shù)據(jù)收集起來,然后經(jīng)過ETL處理,再通過層層建模對數(shù)據(jù)進(jìn)行聚合、篩選等處理,最后在需要的時候基于應(yīng)用層的工具對數(shù)據(jù)進(jìn)行展現(xiàn),或者生成報表。
上面這種方式雖然可以對接多種數(shù)據(jù)源,但是存在一些很明顯的痛點:
- ETL邏輯復(fù)雜,存儲、時間成本過高;
- 數(shù)據(jù)處理鏈路非常長;
- 無法支持實時/近實時的數(shù)據(jù),只能處理T+1的數(shù)據(jù)。
2)Lambda架構(gòu)痛點
隨著實時計算技術(shù)的興起,出現(xiàn)了Lambda架構(gòu)。Lambda架構(gòu)的原理如下圖所示,其思路其實是相當(dāng)于在傳統(tǒng)離線數(shù)倉的基礎(chǔ)上再加上一個處理實時數(shù)據(jù)的層,然后將離線數(shù)倉和實時鏈路產(chǎn)生的數(shù)據(jù)在Serving層進(jìn)行Merge,以此來對離線產(chǎn)生的數(shù)據(jù)和實時產(chǎn)生的數(shù)據(jù)進(jìn)行查詢。從2011年至今,Lambda架構(gòu)被多數(shù)互聯(lián)網(wǎng)公司所采納,也確實解決了一些問題,但是隨著數(shù)據(jù)量的增大、應(yīng)用復(fù)雜度的提升,其問題也逐漸凸顯,主要有:
- 由多種引擎和系統(tǒng)組合而成,開發(fā)和維護(hù)成本高,學(xué)習(xí)成本高;
- 數(shù)據(jù)在不同的View中存儲多份,空間浪費,數(shù)據(jù)一致性的問題難以解決;
- 從使用上來說,Batch,Streaming以及Merge Query等處理過程中均使用不同的language,使用起來并不容易;
- 學(xué)習(xí)成本非常高,增大了應(yīng)用成本。
上面講到的問題,在阿里內(nèi)部其實也都遇到過。如下圖所示是阿里巴巴在2011-2016年沉淀下來的一套實時數(shù)倉架構(gòu),其本質(zhì)上也是Lambda架構(gòu),然而隨著業(yè)務(wù)量及數(shù)據(jù)的增長,關(guān)系復(fù)雜度越來越大,成本急劇增加,因此,我們迫切的需要一種更優(yōu)雅的方案去解決類似的問題。
二、HSAP:服務(wù)分析一體化
基于上述背景,我們提出了HSAP(Hybrid Serving and AnalyticalProcessing)理念,它既能支持很高QPS場景的查詢寫入,又能將復(fù)雜的分析場景在一套體系里面完成。那么,HSAP理念落地的核心是什么?
- 首先,要有一套非常強大的存儲,能夠同時存儲實時數(shù)據(jù)和離線數(shù)據(jù),統(tǒng)一數(shù)據(jù)存儲;
- 同時還要有一種高效的查詢服務(wù),在同一個接口下(比如SQL),能夠支持高QPS的查詢,支持復(fù)雜的分析以及聯(lián)邦查詢和分析;
- 系統(tǒng)能夠直接對接前端應(yīng)用,例如報表和在線服務(wù)等,不需要再額外的導(dǎo)入導(dǎo)出就能即席分析,統(tǒng)一數(shù)據(jù)服務(wù),減少數(shù)據(jù)移動。
三、關(guān)于Hologres
基于HSAP的設(shè)計理念,我們要開發(fā)并落地出相應(yīng)的產(chǎn)品,于是便誕生了Hologres。Hologres是基于HSAP服務(wù)分析一體化理念的最佳落地實踐,兼容PostgreSQL生態(tài)、支持MaxCompute數(shù)據(jù)直接查詢,支持實時寫入實時查詢,實時離線聯(lián)邦分析,低成本、高時效幫助企業(yè)快速構(gòu)筑流批一體的實時數(shù)倉。Hologres這個詞是Holographic和Postgres的組合,Postgres比較好理解,代表著Hologres兼容PostgreSQL生態(tài)。而Holographic需要展開分享,先看下圖:
Holographic中文翻譯是"全息",就是大家經(jīng)常聽到的3D全息投影技術(shù)的"全息"。而Holographic Principle(全息原理)在物理學(xué)中是用來描述一個空間的性質(zhì)可編碼在其邊界上。上圖是一副假想中黑洞的圖片,距離黑洞一定距離處于可以逃逸出黑洞引力的臨界點構(gòu)成了Event Horizon,就是圖中發(fā)亮光的那一圈。全息原理認(rèn)為所有落入黑洞的物體信息內(nèi)容可能會被完全包含在Event Horizon的表面。Hologres要做的事情就是對數(shù)據(jù)黑洞中的全部信息做存儲和各種類型的計算。
四、Hologres核心技術(shù)揭秘
Hologres架構(gòu)非常簡單,是存儲計算分離的架構(gòu),數(shù)據(jù)全部存在一個分布式文件系統(tǒng)中,系統(tǒng)架構(gòu)圖如下圖所示:
- 服務(wù)節(jié)點Backend真正去接收數(shù)據(jù)、存儲和查詢,并且能夠支持?jǐn)?shù)據(jù)的計算;
- 執(zhí)行引擎Frontend接收路由分發(fā)的SQL,然后生成邏輯執(zhí)行計劃,再通過優(yōu)化器生成分布式的物理執(zhí)行計劃,發(fā)布到Backend做分布式的執(zhí)行;
- 接入端由LBS做相應(yīng)的負(fù)載均衡任務(wù)。
- 下圖中黃色部分均部署在容器中,整個分布式系統(tǒng)可以做到高度容錯。
- 兼容PostgreSQL生態(tài),在上層可以直接對接開源或者商業(yè)化的開發(fā)/BI工具,開箱即可用。
存儲計算分離
Hologres采用存儲計算分離架構(gòu),用戶可以根據(jù)業(yè)務(wù)需求進(jìn)行彈性擴縮容。分布式存儲中,常用的架構(gòu)有如下三種:
- Shared Disk/Storage:就是在存儲集群上掛載了很多磁盤,每個計算節(jié)點都可以直接訪問這些共享盤;
- Shared Nothing:架構(gòu)就是每個計算節(jié)點自己掛載存儲,節(jié)點之間可以通信,但是各個節(jié)點之間的盤不共享,存在資源浪費的情況;
- Storage Disaggregation:就是相當(dāng)于把存儲集群看做一個大的磁盤,每個計算節(jié)點都可以訪問,且每個計算節(jié)點都有一定的緩存空間,可以對緩存數(shù)據(jù)進(jìn)行訪問,也無需關(guān)心存儲集群的管理,這種存儲計算分離的架構(gòu)便于靈活擴容,能夠有效節(jié)省資源。
流批一體的存儲
Hologres定位是流批一體統(tǒng)一存儲。對于典型的Lambda架構(gòu),是將實時數(shù)據(jù)通過實時數(shù)據(jù)的鏈路寫入到實時數(shù)據(jù)存儲中,離線數(shù)據(jù)通過離線數(shù)據(jù)的鏈路寫入到離線存儲中,然后將不同的Query放入不同的存儲中,再做Merge,由此帶來多份存儲開銷和應(yīng)用層復(fù)雜的Merge操作。而通過Hologres,數(shù)據(jù)收集之后可以走不同的處理鏈路,但是處理完成之后的結(jié)果都可以直接寫入Hologres,這樣就解決了數(shù)據(jù)的一致性問題,也不需要去區(qū)分離線表和實時表,降低了復(fù)雜度,也大大降低了使用者的學(xué)習(xí)成本。
存儲引擎
Hologres底層支持行存儲和列存儲兩種文件格式,行存適用于基于PK的點查場景,列存適用于OLAP復(fù)雜查詢場景。對于兩種存儲格式Hologres在底層處理也有略微不同,如圖所示。數(shù)據(jù)寫入的時候先寫log,log存儲在分布式文件系統(tǒng),保證整個服務(wù)的數(shù)據(jù)不會丟失,因為即便服務(wù)器掛掉也可以從分布式系統(tǒng)中恢復(fù)。Log寫完之后再寫MemTable,就是內(nèi)存表,這樣系統(tǒng)才認(rèn)為是數(shù)據(jù)寫入成功。MemTable有一定的大小,寫滿了之后會將其中的數(shù)據(jù)逐漸Flush到文件中,文件是存儲在分布式系統(tǒng)中的。而對于行存儲和列存儲的區(qū)別就在Flush到文件的這個過程中,這個過程會將行存表Flush成行存儲的文件,列存表會Flush成列存文件。在Flush的過程中會產(chǎn)生很多小文件,后臺會將這些小文件合并成一個大文件。
執(zhí)行引擎
Hologres執(zhí)行引擎是通用的分布式查詢引擎,側(cè)重于優(yōu)化高并發(fā)低延遲的實時查詢。通用是指可以表達(dá)和高效地執(zhí)行所有類SQL查詢。其它的分布式查詢引擎,有的專注優(yōu)化實時表的常用單表查詢,但是對復(fù)雜查詢表現(xiàn)不佳;有的支持復(fù)雜查詢,但是實時場景性能要差一截。Hologres的理念是不做妥協(xié),對這些場景都要瞄準(zhǔn)極致性能。Hologres執(zhí)行引擎能夠做到對各種查詢類型的高性能處理,主要是基于以下特點:
- 端到端的全異步處理框架,可以避免高并發(fā)系統(tǒng)的瓶頸,充分利用資源,并且最大可能地避免存儲計算分離系統(tǒng)帶來的讀數(shù)據(jù)延遲的影響。
- 查詢用異步算子組成的執(zhí)行圖DAG表示,可以方便對接查詢優(yōu)化器,利用業(yè)界各種查詢優(yōu)化技術(shù)。
- 算子內(nèi)部處理數(shù)據(jù)時最大可能地使用向量化執(zhí)行。
- 和存儲引擎的深度集成,靈活的執(zhí)行模型,能夠充分利用各種索引,并且最大化地延遲向量物化和延遲計算,避免不必要的讀數(shù)據(jù)和計算。
- 對常見實時數(shù)據(jù)應(yīng)用查詢模式的自適應(yīng)增量處理。
- 對一些查詢模式的獨特優(yōu)化。
優(yōu)化器
Hologres的目標(biāo)就是用戶開箱即可用,即通過SQL就能完成日常所有的業(yè)務(wù)分析需求,無需再做額外的建模處理等操作。基于新的硬件技術(shù),Hologres設(shè)計并實現(xiàn)了自己獨特的計算和存儲引擎,而優(yōu)化器扮演的角色就是將用戶執(zhí)行的SQL高效的運行在計算引擎上。Hologres優(yōu)化器采用基于代價的優(yōu)化器,能夠生成復(fù)雜的聯(lián)邦查詢執(zhí)行計劃,盡可能發(fā)揮多套計算引擎的能力。同時,在長期與業(yè)務(wù)打磨的過程當(dāng)中,也積累沉淀了大量的業(yè)務(wù)優(yōu)化手段,讓Hologres的計算引擎在不同的業(yè)務(wù)場景下都能夠發(fā)揮極致的性能。
HOS&HoloFlow
Hologres最核心的組件名叫blackhole,是一款完全自研的存儲計算引擎,采用異步編程方式開發(fā)。blackhole的底層提煉出了靈活高效的異步框架:holo-os(簡稱HOS)。在實現(xiàn)高性能的同時,還實現(xiàn)了load balance,解決了query長尾問題;實現(xiàn)了資源的高利用率、以及多種共享與隔離的機制。于此同時,holo-os還推廣到了分布式環(huán)境,發(fā)展出了holo-flow分布式任務(wù)調(diào)度框架,這樣就能保證在分布式環(huán)境下也能享受到單機調(diào)度的靈活性。
Frontend
Frontend是Hologres的接入層,兼容PostgreSQL協(xié)議,負(fù)責(zé)用戶請求的接入、處理以及元數(shù)據(jù)的管理。但由于PostgreSQL是單機系統(tǒng),處理高并發(fā)的用戶請求能力有限。而Hologres面對的是復(fù)雜的業(yè)務(wù)場景以及需要支持萬甚至億級別的用戶請求,所以在實現(xiàn)上Frontend采用分布式,通過多版本控制+元數(shù)據(jù)同步等方式實現(xiàn)了多Frontend之間信息實時同步,再配合LBS層的負(fù)載均衡實現(xiàn)了完全線性擴展和超高QPS的能力。
擴展執(zhí)行引擎
在Frontend的基礎(chǔ)上,Hologres也提供多擴展執(zhí)行引擎。
- PQE(P Query Engine):運行SQL以及各種Function的執(zhí)行器,Hologres兼容Postgres提供擴展能力,支持PG生態(tài)的各種擴展組件,如Postgis,UDF(pl/java,pl/sql,pl/python)等,完美滿足不同場景不同用戶的需求,從而提供更多的計算能力。
- SQE(S Query Engine):無縫對接MaxCompute(ODPS)的執(zhí)行器,實現(xiàn)對MaxCompute的native訪問,無需遷移和導(dǎo)入數(shù)據(jù),就可以高性能和全兼容的訪問各種MaxCompute文件格式,以及Hash/Range clustered table等復(fù)雜表,實現(xiàn)對PB級離線數(shù)據(jù)的交互式分析。
生態(tài)與數(shù)據(jù)集成
Hologres作為流批一體的實時數(shù)倉,支持多種異構(gòu)數(shù)據(jù)源的實時、離線寫入,包括MySQL、Datahub等,能夠達(dá)到每秒千萬條的實時寫入能力,寫入即可查和每秒千萬次的點查能力。而這些強大的能力都是基于Hologres的JDBC接口。Hologres在接口上完全兼容PostgreSQL(包括語法、語義、協(xié)議等),可以直接使用PostgreSQL的JDBC Driver去連接Hologres,并進(jìn)行數(shù)據(jù)的讀寫。目前市面上的數(shù)據(jù)工具,例如BI工具、ETL工具等等,都支持PostgreSQL JDBC Driver,所以這意味著Hologres天生就有了廣泛的工具兼容性和強大的生態(tài),實現(xiàn)從數(shù)據(jù)處理到數(shù)據(jù)的可視化分析完整大數(shù)據(jù)生態(tài)閉環(huán)。
在線服務(wù)優(yōu)化
Hologres作為HSAP服務(wù)與分析一體化的最佳落地實踐,除了具備處理分析型query的能力外,還具備十分強大的在線服務(wù)能力,例如,KV點查與向量檢索。在KV點查場景中,Holgres通過SQL接口可以輕松穩(wěn)定地支持百萬級的QPS吞吐與極低的延時。在向量檢索場景,用戶同樣可以通過SQL的方式來實現(xiàn)向量數(shù)據(jù)的導(dǎo)入、向量索引的構(gòu)建、查詢等操作,無需額外轉(zhuǎn)換就能查詢,性能經(jīng)過實際業(yè)務(wù)的測試也相比其他產(chǎn)品更優(yōu)。此外,一些非分析型的query通過合理的建表、配合上Hologres強大的索引能力,也同樣可以完美適用serving場景。
五、數(shù)倉架構(gòu)升級
基于Hologres,多個業(yè)務(wù)場景也完成了架構(gòu)升級,極大的簡化了業(yè)務(wù)架構(gòu)的復(fù)雜度,如下圖所示:
總結(jié)
Hologres作為新一代云原生實時數(shù)倉,在今年阿里巴巴雙11最核心的數(shù)據(jù)業(yè)務(wù)場景,連同實時計算Flink首次落地流批一體,并在穩(wěn)定性、性能等方面經(jīng)受住考驗,實現(xiàn)商業(yè)全鏈路實時化,毫秒級的海量數(shù)據(jù)處理能力,2020雙十一,Hologres頂住了5.96億每秒的實時數(shù)據(jù)洪峰,單表存儲高達(dá)2.5PB。基于萬億級數(shù)據(jù)對外提供多維分析和服務(wù),99.99%的查詢可以在80ms以內(nèi)返回結(jié)果,真正做到數(shù)據(jù)的實時及離線一體化,支持在線應(yīng)用服務(wù),為商家和消費者帶來了更加智能的消費體驗。隨著業(yè)務(wù)的發(fā)展和技術(shù)的演進(jìn),Hologres也將持續(xù)優(yōu)化核心技術(shù)競爭力,真正實現(xiàn)服務(wù)和分析一體化的美好愿望,為更多用戶持續(xù)賦能。
Hologres誕生到參與2020年史上最強雙十一的三年多時間里,完成不少從0到1的突破:
- 從一個業(yè)務(wù)到數(shù)百業(yè)務(wù)實例,覆蓋了阿里巴巴集團內(nèi)90%以上業(yè)務(wù)場景,包括雙十一實時直播間、智能推薦、阿里媽媽數(shù)據(jù)平臺、國際站數(shù)據(jù)平臺、菜鳥數(shù)據(jù)平臺、友盟+全域數(shù)據(jù)分析、CCO智能客服、新零售數(shù)據(jù)平臺、考拉、餓了么等業(yè)務(wù)。
- 集群規(guī)模從0到近萬臺,且存儲集群和計算集群使用率都比較高,并完成了系統(tǒng)產(chǎn)品化-上云-商業(yè)化的三級跳,完美賦能阿里云公共云+專有云+金融云業(yè)務(wù)。
- 提出HSAP(HybridServing & Analytics Processing)服務(wù)分析一體化的系統(tǒng)設(shè)計理念,同一份數(shù)據(jù)同時滿足實時離線在線場景的計算需求,極大的簡化了數(shù)倉架構(gòu)的復(fù)雜度,降低了成本,重新定義數(shù)倉趨勢。
- 同時,有關(guān)Hologres的技術(shù)解讀Paper入選數(shù)據(jù)庫頂會VLDB《Alibaba Hologres: ACloud-Native Service for Hybrid Serving/Analytical Processing》(http://www.vldb.org/pvldb/vol13/p3272-jiang.pdf)
值此之際,我們也將首次對外公開Hologres的核心底層技術(shù),揭秘Hologres為何能支撐阿里巴巴核心場景的落地。
另,我們將會持續(xù)推出以上核心技術(shù)的專題解讀,敬請關(guān)注!
原文鏈接:https://developer.aliyun.com/article/783447?
版權(quán)聲明:本文內(nèi)容由阿里云實名注冊用戶自發(fā)貢獻(xiàn),版權(quán)歸原作者所有,阿里云開發(fā)者社區(qū)不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。具體規(guī)則請查看《阿里云開發(fā)者社區(qū)用戶服務(wù)協(xié)議》和《阿里云開發(fā)者社區(qū)知識產(chǎn)權(quán)保護(hù)指引》。如果您發(fā)現(xiàn)本社區(qū)中有涉嫌抄襲的內(nèi)容,填寫侵權(quán)投訴表單進(jìn)行舉報,一經(jīng)查實,本社區(qū)將立刻刪除涉嫌侵權(quán)內(nèi)容。總結(jié)
以上是生活随笔為你收集整理的新一代Hologres实时数仓大揭秘的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 基于财通证券的数字化建设,总结的金融行业
- 下一篇: Duang,钉钉会议室预定系统已上线!