
一 可用性、成本、複雜度的綜合挑戰
-
阿里的CCO(Customer Chief Officer)透過阿里小蜜來向C端消費者提供查詢服務。 -
阿里媽媽為廣告主(B端)提供廣告圈選服務。 -
達摩院無人車包裹配送服務。
-
面向流量洪峰時的可擴充套件能力 -
系統因意外或者故障宕機時的快速恢復能力
-
主備切換時的資料一致性問題 -
保證高效能的同時資源隔離能力
-
多副本隔離帶來的資源成本問題 -
…….
二 Hologres高可用架構設計
1 計算儲存分離架構提高系統擴充套件靈活性
-
Shared Disk/Storage (共享儲存):有一個分散式的儲存叢集,每個計算節點像訪問單機資料一樣訪問這個共享儲存上的資料;這種架構的儲存層可以比較方便的擴充套件,但是計算節點需要引入分散式協調機制保證資料同步和一致性,因此計算節點的可擴充套件性有一個上限。 -
Shared Nothing:每個計算節點自己掛載儲存,一個節點只能處理一個分片的資料,節點之間可以通訊,最終有一個彙總節點把資料進行彙總。這種架構能比較方便的擴充套件,但是它的缺點是節點failover需要等待資料載入完成之後才能提供服務;並且儲存和計算需要同時擴容,不夠靈活。擴容後,有漫長的資料rebalance過程。 -
Storage Disaggregation(儲存計算分離架構):儲存和Shared Storage類似,有一個分散式的共享儲存叢集,計算層處理資料的模式和Shared Nothing類似,資料是分片的,每個shard只處理自己所在分片的資料,每個計算節點還可以有本地快取。

-
一致性處理簡單:計算層只需要保證同一時刻只有一個計算節點寫入同一分片的資料。
-
擴充套件性更靈活:計算和儲存可以分開擴充套件,計算不夠擴計算節點,儲存不夠擴儲存節點。這樣在大促等場景上會非常靈活。計算資源不夠了,馬上擴容計算就好了,不需要像Shared Nothing那樣做耗時耗力的資料rebalance;也不會出現Shared Nothing那樣,出現單機的儲存容量瓶頸。
-
計算節點故障恢復快:計算節點發生failover之後,資料可以按需從分散式的共享儲存非同步拉取。因此,failover的速度非常快。
2 多形態Replication解決資料讀寫分離
基於Binlog的邏輯Replication
-
資料即時複製、同步場景,典型的場景就是把一張Hologres的行存表複製成一張列存表,行存支援點查點寫,列存支援多維分析型需求,同步的邏輯通常由Flink支撐。這個是Hologres在V1.1版本之前的一種典型用法。在Hologres 1.1中支援了行列共存表後,可以一張表滿足行存和列存兩種需求。 -
實現事件的全鏈路驅動,透過Flink消費Hologres Binlog,實現事件驅動的加工開發,完成ODS向DWD,DWD向DWS等的全即時加工作業。

物理Replication
-
單例項多副本
-
單例項內的查詢高可用:當一個Shard所在Worker發生故障時,可以透過前端階段的重試操作,將請求重定向到副本Shard所在Worker,從而應用異常無感知。 -
透過負載均攤,實現更高吞吐:同一份資料由多個Shard共同對外提供服務,不同的查詢路由到不同的Shard所在節點,從而實現負載在多個Shard間的均衡,QPS可以顯著提升,對於每次查詢只訪問確定Shard的場景(例如點查場景)提升明顯。 -
機器故障快速Failover:從Hologres V1.1版本開始,採用全新恢復機制,Shard恢復速度在一分鐘以內,可用性進一步增強。

-
多例項讀寫分離

-
多例項跨城容災
-
災備:在不同的Region,部署有不同的儲存叢集(Pangu),資料在同步後會分別儲存在不同的儲存叢集上,當發生某個Region不可用時,異地備份的例項可以繼續對外提供服務。 -
叢集遷移:機房的容量空間總是有限,經常會發生因為不可控原因,需要將例項從某個機房遷移到其他機房,甚至從某個Region遷移到其他Region,使用者希望遷移過程儘可能是對業務無感的。因此可以透過Replication機制,實現例項狀態在叢集間的遷移。 -
熱升級:熱升級過程中,需要業務服務能力不中斷,屬於高速公路上換髮動機的需求,因此需要系統具備某種類似“滾動”升級的能力。透過Replication機制,可以先克隆出一個例項,在新的例項上完成軟體版本的升級,再將相關的網路路由等配置接入到新的例項,從而完成無需停機的熱升級。

3 排程系統提高節點failover快速恢復能力
-
Pod的排程利用了K8S的能力,Hologres中被K8S排程的單元是HoloWorker;
-
Pod內子程序排程以及Actor的排程是Hologres分散式排程模組HoloFlow提供的能力。
-
外部流量即入口流量,這部分排程是SLB提供的能力,Hologres會定時監測Frontend的健康狀態,一旦某個Frontend不健康了,流量就會從SLB上摘除。
-
內部流量Hologres提供了內部的健康檢測和服務發現機制,例如StoreMaster提供了Shard的健康檢測和服務發現機制,一旦某個Shard不健康,Coordinator就會把流量導到這個Shard健康的Replica上。

4 多層次隔離輕鬆應對不同業務SLA


-
在作業系統層面:執行緒切換是一個不小的開銷。為了把因為等待IO而空閒的CPU利用起來,需要把很多CPU浪費線上程切換上。測試發現,嚴重的時候執行緒切換能浪費掉一半以上的CPU;
-
執行緒的數目很難掌握:不同的query、不同的資料、不同的cache命中率,被IO阻塞的可能性差異會非常大,以至於需要的執行緒數差別非常大。這種情況下,使用固定執行緒數目的執行緒池是很難受的。執行緒多了會引起多餘的切換,加劇切換的開銷;執行緒少了則可能沒法把空閒的CPU都利用起來。而相比於執行緒切換,執行緒的建立和銷燬會帶來更大的開銷,所以想要透過動態建立執行緒來保持恰當的執行緒數,這也是不太可能的;
-
我們可以根據業務邏輯的需要,建立足夠多的“執行緒”去併發使用CPU,而不必擔心切換的開銷大、或者CPU用不滿;
-
當需要業務邏輯需要使用CPU時,直接根據併發度的需要去建立N個這樣的“執行緒”,用完即銷燬。這樣就能使業務邏輯靈活控制任務的並行度,不必受制於底層框架;

三 Hologres高可用在雙11的落地實踐
1 業務雙聯路+讀寫例項分離(DT團隊實踐)

2 雙鏈路容災+讀寫分離(CCO團隊實踐)

四 總結
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揭秘:首次公開!阿里巴巴雲原生即時數倉核心技術揭秘:https://developer.aliyun.com/article/779118
3、Hologres揭秘:首次揭秘雲原生Hologres儲存引擎:https://developer.aliyun.com/article/779284?
4、Hologres揭秘:Hologres高效率分散式查詢引擎:https://developer.aliyun.com/article/784506?
5、Hologres揭秘:高效能原生加速MaxCompute核心原理:https://developer.aliyun.com/article/784755?
6、Hologers揭秘:最佳化COPY,批次匯入效能提升5倍+:
https://developer.aliyun.com/article/785001?
7、Hologres揭秘:如何支援超高QPS線上服務(點查)場景:https://developer.aliyun.com/article/785647?
關鍵詞
資料
節點
場景
業務
雙11