技術(shù)揭秘:從雙11看實(shí)時(shí)數(shù)倉(cāng) Hologres 高可用設(shè)計(jì)與實(shí)踐
2021年阿里巴巴雙11完美落下為帷幕,對(duì)消費(fèi)者來(lái)說(shuō)是一場(chǎng)購(gòu)物盛宴,對(duì)背后的業(yè)務(wù)支撐技術(shù)人來(lái)說(shuō),更是一場(chǎng)年度大考。在這場(chǎng)大考中,一站式實(shí)時(shí)數(shù)倉(cāng)Hologres以每秒11.2億條的高速寫(xiě)入,和每秒1.1億次的查詢(xún)峰值(包含點(diǎn)查和OLAP查詢(xún)),交出了滿(mǎn)意的答卷,穩(wěn)定高效地支撐了阿里巴巴雙11核心應(yīng)用場(chǎng)景。
這是一站式實(shí)時(shí)數(shù)倉(cāng)Hologres誕生的第5年,也是支撐阿里巴巴雙11核心場(chǎng)景的第4年。這也證明實(shí)時(shí)數(shù)倉(cāng)技術(shù)已經(jīng)開(kāi)始從幕后走到臺(tái)前,支撐起更多的在線(xiàn)生產(chǎn)系統(tǒng),并在性能、穩(wěn)定性、高可用性等方面經(jīng)受住了嚴(yán)苛的考驗(yàn)。
本文將會(huì)從阿里巴巴雙11場(chǎng)景出發(fā),分析實(shí)時(shí)數(shù)倉(cāng)面臨的高可用挑戰(zhàn)以及針對(duì)性設(shè)計(jì)。
一 .可用性、成本、復(fù)雜度的綜合挑戰(zhàn)
傳統(tǒng)上,實(shí)時(shí)數(shù)倉(cāng)(數(shù)據(jù)倉(cāng)庫(kù))是一個(gè)非生產(chǎn)系統(tǒng),主要面向內(nèi)部客戶(hù),支撐實(shí)時(shí)大屏、實(shí)時(shí)報(bào)表等場(chǎng)景。用戶(hù)對(duì)它的穩(wěn)定性、可用性的要求相較于訂單、購(gòu)物車(chē)這樣的生產(chǎn)系統(tǒng)要弱很多,只要能繼續(xù)使用,即使實(shí)時(shí)數(shù)倉(cāng)短暫不可用或者有明顯波動(dòng),影響也不是很大。
而隨著實(shí)時(shí)數(shù)倉(cāng)開(kāi)始對(duì)外提供服務(wù),業(yè)務(wù)對(duì)系統(tǒng)的可用性、穩(wěn)定性都提出了更高更嚴(yán)苛的要求。特別是如果提供的是to C的服務(wù),那要求就更高了。
舉幾個(gè)Hologres被用在阿里生產(chǎn)系統(tǒng)中的例子:
- 阿里的CCO(Customer Chief Officer)通過(guò)阿里小蜜來(lái)向C端消費(fèi)者提供查詢(xún)服務(wù)。
- 阿里媽媽為廣告主(B端)提供廣告圈選服務(wù)。
- 達(dá)摩院無(wú)人車(chē)包裹配送服務(wù)。
- ...
這些系統(tǒng)的最大特點(diǎn)是他們都是生產(chǎn)系統(tǒng),如果系統(tǒng)不穩(wěn)定或者不可用,那么影響會(huì)非常大。
具體到雙11這樣的極端場(chǎng)景,在流量洪峰下要做好生產(chǎn)高服務(wù)質(zhì)量、達(dá)到高可用對(duì)任何系統(tǒng)都是一件極具挑戰(zhàn)的事。傳統(tǒng)分布式系統(tǒng)是通過(guò)副本和隔離機(jī)制來(lái)實(shí)現(xiàn)可用性和一致性,而要實(shí)現(xiàn)生產(chǎn)可用的高可用也需要面臨一定的取舍和挑戰(zhàn):
- 面向流量洪峰時(shí)的可擴(kuò)展能力
- 系統(tǒng)因意外或者故障宕機(jī)時(shí)的快速恢復(fù)能力
- 主備切換時(shí)的數(shù)據(jù)一致性問(wèn)題
- 保證高性能的同時(shí)資源隔離能力
- 多副本隔離帶來(lái)的資源成本問(wèn)題
- .......
通過(guò)本文,我們將會(huì)介紹,一站式實(shí)時(shí)數(shù)倉(cāng)Hologers的高可用架構(gòu)設(shè)計(jì)和實(shí)踐,從而達(dá)到低成本、可擴(kuò)展、高可用的生產(chǎn)服務(wù)能力。
二 . Hologres高可用架構(gòu)設(shè)計(jì)
1.計(jì)算存儲(chǔ)分離架構(gòu)提高系統(tǒng)擴(kuò)展靈活性
實(shí)時(shí)數(shù)倉(cāng)技術(shù)不管是面向分析型場(chǎng)景還是服務(wù)型場(chǎng)景,所處理的數(shù)據(jù)量級(jí)、場(chǎng)景復(fù)雜度都遠(yuǎn)比傳統(tǒng)數(shù)據(jù)庫(kù)要高,尤其是互聯(lián)網(wǎng)、電商等行業(yè),活動(dòng)促銷(xiāo)多,大促和日常所處理的流量完全不一樣,這就非常考驗(yàn)系統(tǒng)的資源水平擴(kuò)展能力。
在傳統(tǒng)的分布式系統(tǒng)中,常用的存儲(chǔ)計(jì)算架構(gòu)有如下三種:
Shared Disk/Storage (共享存儲(chǔ)):有一個(gè)分布式的存儲(chǔ)集群,每個(gè)計(jì)算節(jié)點(diǎn)像訪(fǎng)問(wèn)單機(jī)數(shù)據(jù)一樣訪(fǎng)問(wèn)這個(gè)共享存儲(chǔ)上的數(shù)據(jù);這種架構(gòu)的存儲(chǔ)層可以比較方便的擴(kuò)展,但是計(jì)算節(jié)點(diǎn)需要引入分布式協(xié)調(diào)機(jī)制保證數(shù)據(jù)同步和一致性,因此計(jì)算節(jié)點(diǎn)的可擴(kuò)展性有一個(gè)上限。
Shared Nothing:每個(gè)計(jì)算節(jié)點(diǎn)自己掛載存儲(chǔ),一個(gè)節(jié)點(diǎn)只能處理一個(gè)分片的數(shù)據(jù),節(jié)點(diǎn)之間可以通信,最終有一個(gè)匯總節(jié)點(diǎn)把數(shù)據(jù)進(jìn)行匯總。這種架構(gòu)能比較方便的擴(kuò)展,但是它的缺點(diǎn)是節(jié)點(diǎn)failover需要等待數(shù)據(jù)加載完成之后才能提供服務(wù);并且存儲(chǔ)和計(jì)算需要同時(shí)擴(kuò)容,不夠靈活。擴(kuò)容后,有漫長(zhǎng)的數(shù)據(jù)rebalance過(guò)程。
Storage Disaggregation(存儲(chǔ)計(jì)算分離架構(gòu)):存儲(chǔ)和Shared Storage類(lèi)似,有一個(gè)分布式的共享存儲(chǔ)集群,計(jì)算層處理數(shù)據(jù)的模式和Shared Nothing類(lèi)似,數(shù)據(jù)是分片的,每個(gè)shard只處理自己所在分片的數(shù)據(jù),每個(gè)計(jì)算節(jié)點(diǎn)還可以有本地緩存。
這種存儲(chǔ)計(jì)算分離的架構(gòu)好處在于:
- 一致性處理簡(jiǎn)單:計(jì)算層只需要保證同一時(shí)刻只有一個(gè)計(jì)算節(jié)點(diǎn)寫(xiě)入同一分片的數(shù)據(jù)。
- 擴(kuò)展性更靈活:計(jì)算和存儲(chǔ)可以分開(kāi)擴(kuò)展,計(jì)算不夠擴(kuò)計(jì)算節(jié)點(diǎn),存儲(chǔ)不夠擴(kuò)存儲(chǔ)節(jié)點(diǎn)。這樣在大促等場(chǎng)景上會(huì)非常靈活。計(jì)算資源不夠了,馬上擴(kuò)容計(jì)算就好了,不需要像Shared Nothing那樣做耗時(shí)耗力的數(shù)據(jù)rebalance;也不會(huì)出現(xiàn)Shared Nothing那樣,出現(xiàn)單機(jī)的存儲(chǔ)容量瓶頸。
- 計(jì)算節(jié)點(diǎn)故障恢復(fù)快:計(jì)算節(jié)點(diǎn)發(fā)生failover之后,數(shù)據(jù)可以按需從分布式的共享存儲(chǔ)異步拉取。因此,failover的速度非???。
在架構(gòu)上,Hologres采用的是第3種存儲(chǔ)計(jì)算分離架構(gòu),Hologres的存儲(chǔ)使用的是阿里自研的Pangu分布式文件系統(tǒng)(類(lèi)似HDFS)。用戶(hù)可以根據(jù)業(yè)務(wù)需求進(jìn)行彈性擴(kuò)縮容,輕松應(yīng)對(duì)在線(xiàn)系統(tǒng)不同的流量峰值。
2.多形態(tài)Replication解決數(shù)據(jù)讀寫(xiě)分離
Replication(復(fù)制)是實(shí)現(xiàn)高可用的必備技術(shù),通過(guò)不同形態(tài)的Replication設(shè)計(jì),快速將數(shù)據(jù)在節(jié)點(diǎn)間、集群間進(jìn)行復(fù)制,實(shí)現(xiàn)隔離和SLA保障。
Hologers同時(shí)支持了邏輯Replication和物理Replication,下面將會(huì)針對(duì)Hologres的Replication功能做具體介紹。
基于Binlog的邏輯Replication
類(lèi)似于傳統(tǒng)數(shù)據(jù)庫(kù)MySQL中的Binlog概念,在Hologres中,Binlog用來(lái)記錄數(shù)據(jù)庫(kù)中表數(shù)據(jù)的修改記錄,比如Insert/Delete/Update的操作,主要應(yīng)用場(chǎng)景包括:
數(shù)據(jù)實(shí)時(shí)復(fù)制、同步場(chǎng)景,典型的場(chǎng)景就是把一張Hologres的行存表復(fù)制成一張列存表,行存支持點(diǎn)查點(diǎn)寫(xiě),列存支持多維分析型需求,同步的邏輯通常由Flink支撐。這個(gè)是Hologres在V1.1版本之前的一種典型用法。在Hologres 1.1中支持了行列共存表后,可以一張表滿(mǎn)足行存和列存兩種需求。
實(shí)現(xiàn)事件的全鏈路驅(qū)動(dòng),通過(guò)Flink消費(fèi)Hologres Binlog,實(shí)現(xiàn)事件驅(qū)動(dòng)的加工開(kāi)發(fā),完成ODS向DWD,DWD向DWS等的全實(shí)時(shí)加工作業(yè)。
在Hologres中,邏輯Replication依賴(lài)Binlog實(shí)現(xiàn),發(fā)生變更的表作為Publication發(fā)布變更事件,加工邏輯處理后寫(xiě)入Subscription側(cè)。用戶(hù)可以訂閱一個(gè)表的Binlog轉(zhuǎn)成Record,寫(xiě)入到另外一張表里,實(shí)現(xiàn)邏輯上的復(fù)制功能。這種做法可以天然做到不同Workload的隔離,但是它有兩個(gè)問(wèn)題:它是一個(gè)最終一致性的模型,很難做到強(qiáng)一致;另一個(gè)是它消耗了兩份資源,使用兩份存儲(chǔ),并且寫(xiě)入鏈路的資源也得有兩份。
因此Hologres也實(shí)現(xiàn)了物理Replication。
物理Replication
在Hologres中,物理Replication是基于WAL log的復(fù)制,我們可以把存儲(chǔ)引擎看成是狀態(tài)機(jī),WAL log是這個(gè)狀態(tài)機(jī)的輸入。當(dāng)我們要對(duì)某個(gè)Shard做Replication的時(shí)候,我們會(huì)起一個(gè)Follower Shard讀取當(dāng)前最新的WAL log進(jìn)行回放(replay),同時(shí)Leader Shard又有新的WAL產(chǎn)生,F(xiàn)ollower Shard會(huì)從Leader Shard訂閱最新的WAL,不斷的回放,從而達(dá)到和Leader Shard一致的狀態(tài)。如果需要保證Follower Shard上的可見(jiàn)性,我們可以在讀請(qǐng)求中加一個(gè)強(qiáng)一致的選項(xiàng),問(wèn)一下Follower Shard和Leader Shard之間WAL log的回放差距,等補(bǔ)齊差距后再返回查詢(xún)結(jié)果。
Follower Shard回放WAL log的過(guò)程中,對(duì)WAL log中指向的數(shù)據(jù)文件可以進(jìn)行復(fù)制。也可以只進(jìn)行引用,其中復(fù)制的方式稱(chēng)為非共享存儲(chǔ)模式,引用的方式稱(chēng)為共享存儲(chǔ)模式。
基于此,Hologres實(shí)現(xiàn)了3種形態(tài)的物理Replication:
1).單實(shí)例多副本:一個(gè)實(shí)例內(nèi)采用Shard級(jí)多副本機(jī)制,可用來(lái)實(shí)現(xiàn)跨進(jìn)程高可用,讀寫(xiě)分離,同時(shí)因?yàn)楦北究蓜?dòng)態(tài)增加,能輕松支持高并發(fā)的讀。
2).多實(shí)例讀寫(xiě)分離:不同的實(shí)例之間共享一份存儲(chǔ),實(shí)現(xiàn)計(jì)算跨機(jī)房高可用,通常用于讀寫(xiě)分離場(chǎng)景,并支持高并發(fā)的讀場(chǎng)景
3).多實(shí)例容災(zāi):多個(gè)實(shí)例之間不共享存儲(chǔ),實(shí)現(xiàn)計(jì)算和存儲(chǔ)服務(wù)的跨機(jī)房高可用,支持讀寫(xiě)分離,讀的高并發(fā),版本的熱升級(jí)和存儲(chǔ)系統(tǒng)的遷移等功能
- 單實(shí)例多副本
Hologres數(shù)據(jù)分片單元是Shard,Shard可以有多個(gè)副本,但是存儲(chǔ)只有一份。平時(shí),查詢(xún)流量可以被各個(gè)副本均攤,從而實(shí)現(xiàn)高QPS。當(dāng)某一個(gè)副本failover以后,流量可以快速被導(dǎo)到其他副本。并且Shard的故障恢復(fù)非常輕量,只需回放部分WAL,沒(méi)有數(shù)據(jù)的復(fù)制?;趩螌?shí)例內(nèi)多副本機(jī)制,可以很方便的實(shí)現(xiàn)計(jì)算的可擴(kuò)展性,并快速解決物理機(jī)單機(jī)failover問(wèn)題。
應(yīng)用場(chǎng)景:
單實(shí)例內(nèi)的查詢(xún)高可用:當(dāng)一個(gè)Shard所在Worker發(fā)生故障時(shí),可以通過(guò)前端階段的重試操作,將請(qǐng)求重定向到副本Shard所在Worker,從而應(yīng)用異常無(wú)感知。
通過(guò)負(fù)載均攤,實(shí)現(xiàn)更高吞吐:同一份數(shù)據(jù)由多個(gè)Shard共同對(duì)外提供服務(wù),不同的查詢(xún)路由到不同的Shard所在節(jié)點(diǎn),從而實(shí)現(xiàn)負(fù)載在多個(gè)Shard間的均衡,QPS可以顯著提升,對(duì)于每次查詢(xún)只訪(fǎng)問(wèn)確定Shard的場(chǎng)景(例如點(diǎn)查場(chǎng)景)提升明顯。
機(jī)器故障快速Failover:從Hologres V1.1版本開(kāi)始,采用全新恢復(fù)機(jī)制,Shard恢復(fù)速度在一分鐘以?xún)?nèi),可用性進(jìn)一步增強(qiáng)。
- 多實(shí)例讀寫(xiě)分離
和單實(shí)例內(nèi)多副本的Replication相比,跨實(shí)例的Replication實(shí)現(xiàn)了Meta的物理復(fù)制。
Hologres 在V1.1版本,支持了共享存儲(chǔ)的多實(shí)例部署方案。在該方案中,主實(shí)例具備完整能力,數(shù)據(jù)可讀可寫(xiě),權(quán)限、系統(tǒng)參數(shù)可配置,而子實(shí)例處于只讀狀態(tài),所有的變更都通過(guò)主實(shí)例完成,實(shí)例之間共享一份數(shù)據(jù)存儲(chǔ),實(shí)例間數(shù)據(jù)異步實(shí)時(shí)同步。
應(yīng)用場(chǎng)景:
1).讀寫(xiě)分離:這個(gè)方案實(shí)現(xiàn)了完整的讀寫(xiě)分離功能,保障不同業(yè)務(wù)場(chǎng)景的SLA,在高吞吐的數(shù)據(jù)寫(xiě)入和復(fù)雜的架構(gòu)作業(yè)、OLAP、AdHoc查詢(xún)、線(xiàn)上服務(wù)等場(chǎng)景中,負(fù)載之間物理上完全隔離,不會(huì)因?qū)懭氘a(chǎn)生查詢(xún)的抖動(dòng)。
2).多類(lèi)型負(fù)載細(xì)粒度資源分配:一個(gè)主實(shí)例可以配置多個(gè)只讀從實(shí)例,實(shí)例之間可以根據(jù)業(yè)務(wù)情況配置不同規(guī)格,例如使用256Core作為寫(xiě)入和加工實(shí)例,512Core作為OLAP只讀實(shí)例,128Core作為在線(xiàn)Serving實(shí)例,32Core作為開(kāi)發(fā)測(cè)試實(shí)例。
- 多實(shí)例跨城容災(zāi)
多實(shí)例非共享存儲(chǔ)的Replication,可以理解為傳統(tǒng)意義上的災(zāi)備功能,支持容災(zāi),異地多活,并實(shí)現(xiàn)讀寫(xiě)分離和讀的高并發(fā),同樣也可以基于多個(gè)實(shí)例實(shí)現(xiàn)讀的高可用。除此之外,還可以進(jìn)行版本熱升級(jí),存儲(chǔ)系統(tǒng)遷移。
應(yīng)用場(chǎng)景:
- 災(zāi)備:在不同的Region,部署有不同的存儲(chǔ)集群(Pangu),數(shù)據(jù)在同步后會(huì)分別保存在不同的存儲(chǔ)集群上,當(dāng)發(fā)生某個(gè)Region不可用時(shí),異地備份的實(shí)例可以繼續(xù)對(duì)外提供服務(wù)。
- 集群遷移:機(jī)房的容量空間總是有限,經(jīng)常會(huì)發(fā)生因?yàn)椴豢煽卦?,需要將?shí)例從某個(gè)機(jī)房遷移到其他機(jī)房,甚至從某個(gè)Region遷移到其他Region,用戶(hù)希望遷移過(guò)程盡可能是對(duì)業(yè)務(wù)無(wú)感的。因此可以通過(guò)Replication機(jī)制,實(shí)現(xiàn)實(shí)例狀態(tài)在集群間的遷移。
- 熱升級(jí):熱升級(jí)過(guò)程中,需要業(yè)務(wù)服務(wù)能力不中斷,屬于高速公路上換發(fā)動(dòng)機(jī)的需求,因此需要系統(tǒng)具備某種類(lèi)似“滾動(dòng)”升級(jí)的能力。通過(guò)Replication機(jī)制,可以先克隆出一個(gè)實(shí)例,在新的實(shí)例上完成軟件版本的升級(jí),再將相關(guān)的網(wǎng)絡(luò)路由等配置接入到新的實(shí)例,從而完成無(wú)需停機(jī)的熱升級(jí)。
3 調(diào)度系統(tǒng)提高節(jié)點(diǎn)failover快速恢復(fù)能力
分布式環(huán)境failover是不可避免的,當(dāng)failover發(fā)生時(shí),需要高效的檢測(cè),快速的恢復(fù),這就是調(diào)度的范疇。
一個(gè)Hologres實(shí)例有多個(gè)HoloWorker,當(dāng)某一個(gè)HoloWorker發(fā)生意外、宕機(jī)、failover時(shí),通過(guò)Hologres的調(diào)度系統(tǒng),可以快速檢測(cè)到節(jié)點(diǎn)異常,并將異常節(jié)點(diǎn)的Service如Frontend、Coordinator、Shard快速調(diào)度到另外一個(gè)健康的HoloWorker,同時(shí)SLB將會(huì)將流量導(dǎo)流到新的健康Frontend上。
調(diào)度分為計(jì)算單元的調(diào)度和流量的調(diào)度:
1)計(jì)算單元的調(diào)度
計(jì)算單元的調(diào)度分為Pod的調(diào)度、Pod內(nèi)子進(jìn)程調(diào)度以及Actor的調(diào)度
- Pod的調(diào)度利用了K8S的能力,Hologres中被K8S調(diào)度的單元是HoloWorker;
- Pod內(nèi)子進(jìn)程調(diào)度以及Actor的調(diào)度是Hologres分布式調(diào)度模塊HoloFlow提供的能力。
Hologres中兩種類(lèi)型的計(jì)算單元需要被調(diào)度,一類(lèi)是以子進(jìn)程模式提供Service,例如Frontend;另一類(lèi)是以Actor模式提供的Service,例如某一個(gè)分片的數(shù)據(jù)服務(wù)Shard。HoloFlow提供了這兩類(lèi)服務(wù)的健康檢測(cè)以及調(diào)度的能力。
2)流量的調(diào)度
流量的調(diào)度又分為外部流量和內(nèi)部流量的調(diào)度。
- 外部流量即入口流量,這部分調(diào)度是SLB提供的能力,Hologres會(huì)定時(shí)監(jiān)測(cè)Frontend的健康狀態(tài),一旦某個(gè)Frontend不健康了,流量就會(huì)從SLB上摘除。
- 內(nèi)部流量Hologres提供了內(nèi)部的健康檢測(cè)和服務(wù)發(fā)現(xiàn)機(jī)制,例如StoreMaster提供了Shard的健康檢測(cè)和服務(wù)發(fā)現(xiàn)機(jī)制,一旦某個(gè)Shard不健康,Coordinator就會(huì)把流量導(dǎo)到這個(gè)Shard健康的Replica上。
通過(guò)Hologres的調(diào)度系統(tǒng),實(shí)現(xiàn)了節(jié)點(diǎn)故障、Failover的快速檢測(cè)以及自動(dòng)調(diào)度恢復(fù)能力,滿(mǎn)足業(yè)務(wù)的穩(wěn)定性需求,提高系統(tǒng)可用性。
4 多層次隔離輕松應(yīng)對(duì)不同業(yè)務(wù)SLA
隨著實(shí)時(shí)數(shù)倉(cāng)在生產(chǎn)系統(tǒng)越來(lái)越廣泛的應(yīng)用,不同的業(yè)務(wù)也有著不同的SLA訴求,比如雙11時(shí),老板和運(yùn)營(yíng)對(duì)交易數(shù)據(jù)的查詢(xún)需求比較高,物流端又希望物流訂單能實(shí)時(shí)高效刷新,開(kāi)發(fā)又希望數(shù)據(jù)能快速寫(xiě)入,不要影響后面的數(shù)據(jù)查詢(xún)和分析....
具體到Hologres,一個(gè)實(shí)例支持不同的Workload,包括點(diǎn)查點(diǎn)寫(xiě),批量導(dǎo)入,交互式分析等。那么不同Workload的SLA需要被保障,例如批量導(dǎo)入不能影響交互式分析的延時(shí),交互式分析的請(qǐng)求不能影響實(shí)時(shí)寫(xiě)入的實(shí)效性等;Hologres也支持多租戶(hù)同時(shí)使用,不同租戶(hù)之間也不能相互影響;
以上描述的場(chǎng)景都是隔離的范疇,相對(duì)來(lái)說(shuō)隔離級(jí)別越高,成本越大,資源利用率越低。在進(jìn)程內(nèi)部實(shí)現(xiàn)低成本可用的隔離是一個(gè)很有技術(shù)挑戰(zhàn)的事情。
Hologres實(shí)現(xiàn)了多個(gè)層次的隔離手段。如下圖是上面介紹的Replication(復(fù)制)和隔離的關(guān)系,復(fù)制本質(zhì)上是在不同的機(jī)器/容器中服務(wù)同一份數(shù)據(jù)(或其復(fù)本),所以本質(zhì)上是一種物理隔離。在物理隔離外,Hologres還支持資源組隔離、調(diào)度組和(SchedulingGroup)隔離,用戶(hù)可以在成本和SLA上做tradeoff,滿(mǎn)足不同用戶(hù)對(duì)隔離的需求。
1)物理機(jī)和容器隔離
在物理機(jī)和容器隔離上,Hologers是通過(guò)k8s來(lái)部署,利用k8s的Node Selector/Affinity以及Taints/Tolerations等功能,可以比較方便的實(shí)現(xiàn)實(shí)例和實(shí)例間容器的隔離。對(duì)于一些對(duì)SLA要求非常高的客戶(hù),我們還可以對(duì)機(jī)器單獨(dú)打標(biāo),只允許某一個(gè)實(shí)例的容器調(diào)度到打標(biāo)的機(jī)器上,從而實(shí)現(xiàn)機(jī)器級(jí)別的隔離,防止其他實(shí)例的干擾。
2)資源組隔離
在Hologres中,多租戶(hù)的隔離需求是通過(guò)資源組來(lái)實(shí)現(xiàn)的。Hologres的資源組隔離本質(zhì)上是線(xiàn)程級(jí)別的隔離。實(shí)例內(nèi)的Worker可以按照CPU、內(nèi)存、IO劃分為不同的資源組。不同的用戶(hù)加入到不同的資源組,限制每個(gè)用戶(hù)使用的資源上限,以保證用戶(hù)之間的作業(yè)互不影響。
例如資源組(1)有50%的資源,資源組(2)有30%的資源,資源組(3)有20%的資源。我們把用戶(hù)A綁定的資源組(一)上,用戶(hù)B綁定在資源組(2)上,用戶(hù)C和D綁定到資源組(3)上。這樣用戶(hù)A,B.C發(fā)起的請(qǐng)求就會(huì)分別調(diào)度到不同的資源組。
通過(guò)資源組的隔離,實(shí)現(xiàn)實(shí)例內(nèi)的資源隔離。這種隔離的優(yōu)點(diǎn)是能夠在一個(gè)實(shí)例內(nèi)實(shí)現(xiàn)不同用戶(hù)的隔離,保證用戶(hù)間的作業(yè)不相互影響。這種隔離是一種軟隔離,在隔離效果上是不如基于replication的物理隔離的。所以資源組隔離更適合不同用戶(hù)的OLAP查詢(xún)隔離等場(chǎng)景,而基于replication的物理隔離更適合線(xiàn)上服務(wù)。
3)SchedulingGroup隔離
通常來(lái)說(shuō),2)中的線(xiàn)程級(jí)別隔離模型會(huì)有如下問(wèn)題:
- 在操作系統(tǒng)層面:線(xiàn)程切換是一個(gè)不小的開(kāi)銷(xiāo)。為了把因?yàn)榈却齀O而空閑的CPU利用起來(lái),需要把很多CPU浪費(fèi)在線(xiàn)程切換上。測(cè)試發(fā)現(xiàn),嚴(yán)重的時(shí)候線(xiàn)程切換能浪費(fèi)掉一半以上的CPU;
- 線(xiàn)程的數(shù)目很難掌握:不同的query、不同的數(shù)據(jù)、不同的cache命中率,被IO阻塞的可能性差異會(huì)非常大,以至于需要的線(xiàn)程數(shù)差別非常大。這種情況下,使用固定線(xiàn)程數(shù)目的線(xiàn)程池是很難受的。線(xiàn)程多了會(huì)引起多余的切換,加劇切換的開(kāi)銷(xiāo);線(xiàn)程少了則可能沒(méi)法把空閑的CPU都利用起來(lái)。而相比于線(xiàn)程切換,線(xiàn)程的創(chuàng)建和銷(xiāo)毀會(huì)帶來(lái)更大的開(kāi)銷(xiāo),所以想要通過(guò)動(dòng)態(tài)創(chuàng)建線(xiàn)程來(lái)保持恰當(dāng)?shù)木€(xiàn)程數(shù),這也是不太可能的;
理想的方案是能有一種輕量級(jí)的調(diào)度單元,功能類(lèi)似于線(xiàn)程,但是創(chuàng)建/銷(xiāo)毀和調(diào)度/切換的開(kāi)銷(xiāo)要小得多。這樣的話(huà):
- 我們可以根據(jù)業(yè)務(wù)邏輯的需要,創(chuàng)建足夠多的“線(xiàn)程”去并發(fā)使用CPU,而不必?fù)?dān)心切換的開(kāi)銷(xiāo)大、或者CPU用不滿(mǎn);
- 當(dāng)需要業(yè)務(wù)邏輯需要使用CPU時(shí),直接根據(jù)并發(fā)度的需要去創(chuàng)建N個(gè)這樣的“線(xiàn)程”,用完即銷(xiāo)毀。這樣就能使業(yè)務(wù)邏輯靈活控制任務(wù)的并行度,不必受制于底層框架;
根據(jù)上面的設(shè)計(jì)理念,Hologres在自研調(diào)度系統(tǒng)HOS中,通過(guò)一個(gè)輕量級(jí)調(diào)度單元EC來(lái)實(shí)現(xiàn)。
SchedulingGroup隔離利用了HOS EC調(diào)度的能力,同一個(gè)Query有多個(gè)EC執(zhí)行,這些EC可以被歸類(lèi)到一個(gè)SchedulingGroup,不同的SchedulingGroup可以用公平的策略瓜分時(shí)間片。
SchedulingGroup隔離保證了當(dāng)系統(tǒng)中同時(shí)跑一個(gè)大Query(分析型)和一個(gè)小Query(點(diǎn)查)的時(shí)候,小Query不至于因?yàn)閾尣坏紺PU被大Query block住。SchedulingGroup隔離本質(zhì)上是協(xié)程級(jí)別的隔離,是Hologres的核心競(jìng)爭(zhēng)力之一。
三 Hologres高可用在雙11的落地實(shí)踐
Hologers的高可用技術(shù)今年也穩(wěn)定支持了阿里巴巴雙11的核心業(yè)務(wù)場(chǎng)景,下面來(lái)做一一介紹。
1 業(yè)務(wù)雙聯(lián)路+讀寫(xiě)實(shí)例分離(DT團(tuán)隊(duì)實(shí)踐)
DT大淘系數(shù)據(jù)是阿里巴巴集團(tuán)典型的數(shù)據(jù)中臺(tái),負(fù)責(zé)天貓、淘寶、聚劃算等業(yè)務(wù)大促及日常行業(yè)看數(shù)需求,通過(guò)天貓/淘寶營(yíng)銷(xiāo)活動(dòng)分析產(chǎn)品,支持決策層和小二在大促期間進(jìn)行數(shù)據(jù)分析及決策。
隨著業(yè)務(wù)增長(zhǎng)和產(chǎn)品的不斷迭代,數(shù)據(jù)團(tuán)隊(duì)也面臨更復(fù)雜的分析需求,技術(shù)團(tuán)隊(duì)在保障數(shù)據(jù)實(shí)時(shí)性、準(zhǔn)確性的同時(shí),還要面臨更高壓力的寫(xiě)入,在保障整體數(shù)據(jù)鏈路的穩(wěn)定性和整體產(chǎn)品的高可用上面臨更嚴(yán)格的考驗(yàn)。
在高可用場(chǎng)景上,今年DT引入了Hologres的讀寫(xiě)分離能力,并結(jié)合全鏈路的主備雙鏈路,在降低單庫(kù)出問(wèn)題概率的同時(shí)構(gòu)建異地主備容災(zāi),建立產(chǎn)品核心指標(biāo)的“復(fù)活甲”,通過(guò)秒級(jí)切換的高可用容災(zāi)方案,高吞吐寫(xiě)入和靈活查詢(xún)互不干擾,分析查詢(xún)QPS增長(zhǎng)80%的同時(shí),查詢(xún)抖動(dòng)明顯減少,讓業(yè)務(wù)擁有底氣和信心去應(yīng)對(duì)隨時(shí)可能出現(xiàn)的不可控風(fēng)險(xiǎn),為整個(gè)產(chǎn)品和業(yè)務(wù)決策分析提供穩(wěn)定支持。
2 雙鏈路容災(zāi)+讀寫(xiě)分離(CCO團(tuán)隊(duì)實(shí)踐)
CCO是阿里巴巴集團(tuán)的客戶(hù)體驗(yàn)事業(yè)部,支持的場(chǎng)景包括服務(wù)資源調(diào)度、實(shí)時(shí)數(shù)據(jù)監(jiān)控等。“客戶(hù)第一”價(jià)值觀(guān)落地的組織保障,是整個(gè)經(jīng)濟(jì)體客戶(hù)體驗(yàn)的神經(jīng)網(wǎng)絡(luò),也是觸達(dá)消費(fèi)者和商家的最前線(xiàn)。
隨著業(yè)務(wù)的發(fā)展,以及行業(yè)的整體業(yè)務(wù)趨勢(shì),以及相應(yīng)商家和消費(fèi)者們更加實(shí)時(shí)和穩(wěn)定的服務(wù)請(qǐng)求。去年是業(yè)務(wù)上做了雙鏈路寫(xiě)入和存儲(chǔ)冗余來(lái)保證高可用。今年雙11使用了Hologres原生的 只讀實(shí)例 和 容災(zāi) 高可用方案下掉了業(yè)務(wù)的雙鏈路,省去備用數(shù)據(jù)鏈路上實(shí)時(shí)任務(wù)開(kāi)發(fā)維護(hù)、數(shù)據(jù)比對(duì)的人力投入,減少鏈路切換時(shí)的數(shù)據(jù)不一致等,整體開(kāi)發(fā)人力成本減少200人日,環(huán)比去年降低50%以上;減少了100+用于實(shí)時(shí)重保的備份鏈路作業(yè),減少實(shí)時(shí)計(jì)算資源2000CU。
四 總結(jié)
在過(guò)去一年,Hologres引入了多副本、資源隔離、讀寫(xiě)分離等多種能力,并在今年阿里巴巴核心應(yīng)用場(chǎng)景中得到了很好的應(yīng)用,實(shí)現(xiàn)了生產(chǎn)高可用。
隨著實(shí)時(shí)數(shù)倉(cāng)技術(shù)被生產(chǎn)系統(tǒng)的廣泛使用,業(yè)務(wù)對(duì)高可用的要求也越來(lái)也嚴(yán)苛。我們希望通過(guò)分享Hologres的高可用設(shè)計(jì)原理和應(yīng)用實(shí)踐,與行業(yè)互通有無(wú),共同為社會(huì)的高度發(fā)展添磚加瓦。
Hologres是阿里云自研的一站式實(shí)時(shí)數(shù)倉(cāng),這個(gè)云原生系統(tǒng)融合了實(shí)時(shí)服務(wù)和分析大數(shù)據(jù)的場(chǎng)景,全面兼容PostgreSQL協(xié)議并與大數(shù)據(jù)生態(tài)無(wú)縫打通,能用同一套數(shù)據(jù)架構(gòu)同時(shí)支持實(shí)時(shí)寫(xiě)入實(shí)時(shí)查詢(xún)以及實(shí)時(shí)離線(xiàn)聯(lián)邦分析。它的出現(xiàn)簡(jiǎn)化了業(yè)務(wù)的架構(gòu),為業(yè)務(wù)提供實(shí)時(shí)決策的能力,讓大數(shù)據(jù)發(fā)揮出更大的商業(yè)價(jià)值。從阿里集團(tuán)誕生到云上商業(yè)化,隨著業(yè)務(wù)的發(fā)展和技術(shù)的演進(jìn),Hologres也在持續(xù)不斷優(yōu)化核心技術(shù)競(jìng)爭(zhēng)力,我們后續(xù)計(jì)劃推出Hologres底層技術(shù)原理揭秘系列,從高性能存儲(chǔ)引擎到高效率查詢(xún)引擎,高吞吐寫(xiě)入到高QPS查詢(xún)等,全方位解讀Hologres。
參考鏈接:
1、2020年VLDB的論文《Alibaba Hologres: A cloud-Native Service for Hybrid Serving/Analytical Processing》:http://www.vldb.org/pvldb/vol13/p3272-jiang.pdf
2、Hologres揭秘:首次公開(kāi)!阿里巴巴云原生實(shí)時(shí)數(shù)倉(cāng)核心技術(shù)揭秘:https://developer.aliyun.com/article/779118
3、Hologres揭秘:首次揭秘云原生Hologres存儲(chǔ)引擎:https://developer.aliyun.com/article/779284?
4、Hologres揭秘:Hologres高效率分布式查詢(xún)引擎:https://developer.aliyun.com/article/784506?
5、Hologres揭秘:高性能原生加速M(fèi)axCompute核心原理:https://developer.aliyun.com/article/784755?
6、Hologers揭秘:優(yōu)化COPY,批量導(dǎo)入性能提升5倍+:https://developer.aliyun.com/article/785001?
7、Hologres揭秘:如何支持超高QPS在線(xiàn)服務(wù)(點(diǎn)查)場(chǎng)景:https://developer.aliyun.com/article/785647?