0016-美團(tuán)OCTO萬億級(jí)數(shù)據(jù)中心計(jì)算引擎技術(shù)解析

提升研發(fā)效率、降低運(yùn)維成本、提高服務(wù)穩(wěn)定性

美團(tuán)OCTO萬億級(jí)數(shù)據(jù)中心計(jì)算引擎技術(shù)解析

一、OCTO數(shù)據(jù)中心簡介

1.1 系統(tǒng)介紹

1.1.1 OCTO系統(tǒng)介紹

OCTO 是美團(tuán)標(biāo)準(zhǔn)化的服務(wù)治理基礎(chǔ)設(shè)施,目前幾乎覆蓋公司所有業(yè)務(wù)的治理與運(yùn)營。OCTO 提供了服務(wù)注冊(cè)發(fā)現(xiàn)、數(shù)據(jù)治理、負(fù)載均衡、容錯(cuò)、灰度發(fā)布等治理功能,致力于提升研發(fā)效率,降低運(yùn)維成本,并提升應(yīng)用的穩(wěn)定性。OCTO 最新演進(jìn)動(dòng)態(tài)細(xì)節(jié)可參考《美團(tuán)下一代服務(wù)治理系統(tǒng) OCTO2.0 的探索與實(shí)踐》一文。

1.1.2 OCTO數(shù)據(jù)中心業(yè)務(wù)介紹

OCTO 數(shù)據(jù)中心為業(yè)務(wù)提供了立體化的數(shù)字驅(qū)動(dòng)服務(wù)治理能力,提供了多維度的精確時(shí)延 TP(Top Percent,分位數(shù),最高支持6個(gè)9)、QPS、成功率等一系列核心指標(biāo),粒度方面支持秒級(jí)、分鐘級(jí)、小時(shí)級(jí)、天級(jí),檢索維度支持多種復(fù)雜查詢(如指定調(diào)用端 IP + 服務(wù)端各接口的指標(biāo),指定主機(jī) + 接口的指標(biāo)等)。這些功能有效地幫助開發(fā)人員在復(fù)雜的分布式調(diào)用關(guān)系拓?fù)鋬?nèi)出現(xiàn)異常時(shí),能快速定位到問題,也有助于研發(fā)人員全方位掌控系統(tǒng)的穩(wěn)定性狀況。

目前 Watt 承載日均超萬億條數(shù)據(jù)的10余個(gè)維度精確準(zhǔn)實(shí)時(shí)統(tǒng)計(jì)。而伴隨著數(shù)據(jù)量的迅猛增長,其整個(gè)系統(tǒng)架構(gòu)也經(jīng)歷了全面的技術(shù)演進(jìn)。

1.1.3 OCTO原架構(gòu)介紹

OCTO計(jì)算引擎在重構(gòu)之前,也面臨諸多的問題,其原始架構(gòu)設(shè)計(jì)如下:

采集層:每個(gè)業(yè)務(wù)應(yīng)用實(shí)例部署一個(gè)采集代理,代理通過將采集數(shù)據(jù)用批量 RPC 的方式發(fā)送給路由節(jié)點(diǎn)。

路由層:每個(gè)路由節(jié)點(diǎn)隨機(jī)收到各服務(wù)的數(shù)據(jù)后,將同一服務(wù)的所有數(shù)據(jù),用類似 IP 直連的方式通過 RPC 發(fā)送到計(jì)算層的同一個(gè)計(jì)算節(jié)點(diǎn)。同服務(wù)數(shù)據(jù)匯總到同計(jì)算節(jié)點(diǎn)才能進(jìn)行特定服務(wù)各個(gè)維度的聚合計(jì)算。

計(jì)算層:每個(gè)計(jì)算節(jié)點(diǎn)采用 Akka 模型,節(jié)點(diǎn)同時(shí)負(fù)責(zé)分鐘、小時(shí)、天粒度的數(shù)據(jù)計(jì)算集。每個(gè)計(jì)算集里面又有10個(gè)子計(jì)算 actor,每個(gè)子計(jì)算 actor 對(duì)應(yīng)的是一個(gè)維度。采用“先計(jì)算指標(biāo),再存儲(chǔ)數(shù)據(jù)”的準(zhǔn)實(shí)時(shí)模式。

存儲(chǔ)層:準(zhǔn)實(shí)時(shí)數(shù)據(jù)使用 HBase 存儲(chǔ),元數(shù)據(jù)及較大數(shù)據(jù)采用 KV 存儲(chǔ)(美團(tuán)內(nèi)部系統(tǒng)Cellar)及 MySQL 存儲(chǔ)。

1.2 問題、目標(biāo)與挑戰(zhàn)

1.2.1 原架構(gòu)面臨的問題

計(jì)算節(jié)點(diǎn)有狀態(tài),異常無法自動(dòng)化遷移。計(jì)算層部署的每個(gè)節(jié)點(diǎn)平均負(fù)責(zé)200+服務(wù)的統(tǒng)計(jì)。一個(gè)節(jié)點(diǎn) OOM 或宕機(jī)時(shí),其管理的200個(gè)服務(wù)的數(shù)據(jù)會(huì)丟失或波動(dòng),報(bào)警等依托數(shù)據(jù)的治理功能也會(huì)異常。此外計(jì)算節(jié)點(diǎn) OOM 時(shí)也不宜自動(dòng)遷移受影響的服務(wù),需人工介入處理(異常的原因可能是計(jì)算節(jié)點(diǎn)無法承載涌入的數(shù)據(jù)量,簡單的遷移易引發(fā)“雪崩”),每周投入的運(yùn)維時(shí)間近20小時(shí)。

系統(tǒng)不支持水平擴(kuò)展。計(jì)算節(jié)點(diǎn)的壓力由其管理的服務(wù)調(diào)用量、服務(wù)內(nèi)維度復(fù)雜度等因素決定。大體量的服務(wù)需單獨(dú)分配高配機(jī)器,業(yè)務(wù)數(shù)據(jù)膨脹計(jì)算節(jié)點(diǎn)能力不匹配時(shí),只能替換更高性能的機(jī)器。

系統(tǒng)整體穩(wěn)定性不高。數(shù)據(jù)傳輸采用 RPC,單計(jì)算節(jié)點(diǎn)響應(yīng)慢時(shí),易拖垮所有路由層的節(jié)點(diǎn)并引發(fā)系統(tǒng)“雪崩”。

熱點(diǎn)及數(shù)據(jù)傾斜明顯,策略管理復(fù)雜。按服務(wù)劃分熱點(diǎn)明顯,存在一個(gè)服務(wù)數(shù)據(jù)量比整個(gè)計(jì)算節(jié)點(diǎn)200個(gè)服務(wù)總數(shù)多的情況,部分機(jī)器的 CPU 利用率不到10%,部分利用率在90%+。改變路由策略易引發(fā)新的熱點(diǎn)機(jī)器,大體量服務(wù)數(shù)據(jù)增長時(shí)需要縱向擴(kuò)容解決。舊架構(gòu)時(shí)人工維護(hù)160余個(gè)大服務(wù)到計(jì)算節(jié)點(diǎn)的映射關(guān)系供路由層使用。

舊架構(gòu)日承載數(shù)據(jù)量約3000億,受上述缺陷影響,系統(tǒng)會(huì)頻繁出現(xiàn)告警丟失、誤告警、數(shù)據(jù)不準(zhǔn)、數(shù)據(jù)延遲幾小時(shí)、服務(wù)發(fā)布后10分鐘后才能看到流量等多種問題。此外,數(shù)據(jù)體量大的服務(wù)也不支持部分二級(jí)維度的數(shù)據(jù)統(tǒng)計(jì)。

1.2.2 新架構(gòu)設(shè)計(jì)的目標(biāo)

基于上述問題總結(jié)與分析,我們新架構(gòu)整體的目標(biāo)如下:

高吞吐、高度擴(kuò)展能力。具備20倍+的水平擴(kuò)展能力,支持日10萬億數(shù)據(jù)的處理能力。

數(shù)據(jù)高度精確。解決節(jié)點(diǎn)宕機(jī)后自愈、解決數(shù)據(jù)丟失問題。

高可靠、高可用。無計(jì)算單點(diǎn),所有計(jì)算節(jié)點(diǎn)無狀態(tài);1/3計(jì)算節(jié)點(diǎn)宕機(jī)無影響;具備削峰能力。

延時(shí)低。秒級(jí)指標(biāo)延遲TP99<10s;分鐘指標(biāo)延遲TP99<2min。

1.2.3 新架構(gòu)面臨的挑戰(zhàn)

在日計(jì)算量萬億級(jí)別的體量下,實(shí)現(xiàn)上述挑戰(zhàn)如下:

1.數(shù)據(jù)傾斜明顯的海量數(shù)據(jù),數(shù)據(jù)指標(biāo)的維度多、指標(biāo)多、時(shí)間窗口多,服務(wù)間體量差異達(dá)百萬倍。

2. TP分位數(shù)長尾數(shù)據(jù)是衡量系統(tǒng)穩(wěn)定性最核心的指標(biāo),所有數(shù)據(jù)要求非采樣擬合,實(shí)現(xiàn)多維度下精確的分布式TP數(shù)據(jù)。

3. 架構(gòu)具備高穩(wěn)定性,1/3節(jié)點(diǎn)宕機(jī)不需人工介入。

4. 每年數(shù)據(jù)膨脹至2.4倍+,計(jì)算能力及吞吐能力必須支持水平擴(kuò)展。

5. TP 數(shù)據(jù)是衡量服務(wù)最核心的指標(biāo)之一,但在萬億規(guī)模下,精確的準(zhǔn)實(shí)時(shí)多維度分布式 TP 數(shù)據(jù)是一個(gè)難題,原因詳細(xì)解釋下:

常規(guī)的拆分計(jì)算后聚合是無法計(jì)算精確TP數(shù)據(jù)的,如將一個(gè)服務(wù)按 IP(一般按 IP 劃分?jǐn)?shù)據(jù)比較均勻)劃分到3個(gè)子計(jì)算節(jié)點(diǎn)計(jì)算后匯總,會(huì)面臨如下問題:

假設(shè)計(jì)算得出 IP1 的 TP99 是100ms、QPS 為50;IP2 的 TP99 是10ms、QPS 為50;IP3 的 TP99 是1ms,QPS為50。那么該服務(wù)整體 TP99 是(100ms x 50 + 10ms x 50 + 1ms x 50)/ (50 + 50 + 50) = 37ms嗎?并非如此,該服務(wù)的真實(shí) TP99 可能是 100ms,在沒有全量樣本情況下無法保證準(zhǔn)確的TP值。

假設(shè)不需要服務(wù)全局精確的時(shí)延 TP 數(shù)據(jù),也不可以忽略該問題。按上述方式拆分并合并后,服務(wù)按接口維度計(jì)算的 TP 數(shù)據(jù)也失去了準(zhǔn)確性。進(jìn)一步說,只要不包含 IP 查詢條件的所有 TP 數(shù)據(jù)都失真了。分位數(shù)這類必須建立在全局樣本之上才能有正確計(jì)算的統(tǒng)計(jì)值。

二、計(jì)算引擎技術(shù)設(shè)計(jì)解析

2.1 方案選型

大數(shù)據(jù)計(jì)算應(yīng)用往往基于實(shí)時(shí)或離線計(jì)算技術(shù)體系建設(shè),但Flink、Spark、OLAP等技術(shù)棧在日超萬億級(jí)別量級(jí)下,支持復(fù)雜維度的準(zhǔn)實(shí)時(shí)精確 TP 計(jì)算,對(duì)資源的消耗非常較大,總結(jié)如下:

2.2 系統(tǒng)設(shè)計(jì)思路

解決穩(wěn)定性問題,思路是(1)將計(jì)算節(jié)點(diǎn)無狀態(tài)化(2)基于心跳機(jī)制自動(dòng)剔除異常節(jié)點(diǎn)并由新節(jié)點(diǎn)承載任務(wù)(3)消息隊(duì)列削峰。

解決海量數(shù)據(jù)計(jì)算問題,思路是(1)在線&離線計(jì)算隔離,兩者的公共子計(jì)算前置只計(jì)算一次(2)高并發(fā)高吞吐能力設(shè)計(jì)(3)理論無上限的水平擴(kuò)展能力設(shè)計(jì)。

解決熱點(diǎn)問題,思路是(1)優(yōu)化計(jì)算量分配算法,如均衡 Hash(2)理論無上限的水平擴(kuò)展能力設(shè)計(jì)。

解決水平擴(kuò)展問題,思路(1)是將單節(jié)點(diǎn)無法承載的計(jì)算模式改為局部分布式子計(jì)算并匯總,但這種方式可能會(huì)對(duì)數(shù)據(jù)準(zhǔn)確性造成較大影響,數(shù)據(jù)統(tǒng)計(jì)領(lǐng)域精確的分布式分位數(shù)才是最難問題,另外多維條件組織對(duì)分布式改造也相當(dāng)不利。(備注:其中在1.2.3第五條有詳細(xì)的解釋)

解決海量數(shù)據(jù)分布式多維精確 TP 計(jì)算,采用局部分布式計(jì)算,然后基于拓?fù)錁浣M織數(shù)據(jù)計(jì)算流,在前置的計(jì)算結(jié)果精度不丟失的前提下,多階段逐級(jí)降維得到所有的計(jì)算結(jié)果。

2.3 技術(shù)方案詳細(xì)解析

2.3.1 數(shù)據(jù)流解析

系統(tǒng)根據(jù)待統(tǒng)計(jì)的維度構(gòu)建了一棵遞推拓?fù)錁?,如下圖所示。其中黃色的部分代表消息隊(duì)列(每個(gè)矩形代表一個(gè) topic),綠色部分代表一個(gè)計(jì)算子集群(消費(fèi)前置 topic 多個(gè) partition,統(tǒng)計(jì)自己負(fù)責(zé)維度的數(shù)據(jù)指標(biāo)并存儲(chǔ),同時(shí)聚合壓縮向后繼續(xù)發(fā))。除“原始采集數(shù)據(jù) topic 外”,其他 topic 和 consumer 所在維度對(duì)應(yīng)數(shù)據(jù)的檢索條件(如標(biāo)紅二級(jí) topic :主機(jī)+接口,代表同時(shí)指定主機(jī)和接口的指標(biāo)查詢數(shù)據(jù)),紅色箭頭代表數(shù)據(jù)流向。

拓?fù)錁湫谓Y(jié)構(gòu)的各個(gè)子集群所對(duì)應(yīng)的維度標(biāo)識(shí)集合,必為其父計(jì)算集群對(duì)應(yīng)維度標(biāo)識(shí)集合的真子集(如下圖最上面鏈路,“主機(jī)+接口+遠(yuǎn)程服務(wù)”3個(gè)維度一定包含“主機(jī)+接口”兩個(gè)維度。“主機(jī)+接口”兩個(gè)維度包含“主機(jī)”維度)。集群間數(shù)據(jù)傳輸,采用批量聚合壓縮后在消息隊(duì)列媒介上通信完成,在計(jì)算過程中實(shí)現(xiàn)降維。

2.3.2 計(jì)算模式解析

下面詳細(xì)介紹數(shù)據(jù)拓?fù)錁渲蟹植际阶蛹旱挠?jì)算模式:

首先,維度值相同的所有數(shù)據(jù)會(huì)在本層級(jí)集群內(nèi)落到同一計(jì)算節(jié)點(diǎn)。每個(gè)計(jì)算子集群中的各計(jì)算節(jié)點(diǎn),從消息隊(duì)列消費(fèi)得到數(shù)據(jù)并按自身維度進(jìn)行聚合(前置集群已經(jīng)按當(dāng)前集群維度指定分發(fā),所以聚合率很高),得到若干計(jì)數(shù)卡表(計(jì)數(shù)卡表即指定維度的時(shí)延、錯(cuò)誤數(shù)等指標(biāo)與具體計(jì)數(shù)的映射 Map)。

其次,將聚合后的計(jì)數(shù)卡表與現(xiàn)有的相同維度合并計(jì)算,并在時(shí)間窗口存儲(chǔ)指標(biāo)。

若計(jì)算集群有后續(xù)的子計(jì)算集群,則基于后繼集群的目標(biāo)維度,根據(jù)目標(biāo)維度屬性做散列計(jì)算,并將相同散列碼的計(jì)數(shù)卡表聚合壓縮后發(fā)到后繼 partition。

離線的天級(jí)計(jì)算復(fù)用了三級(jí)維度、二級(jí)維度的多項(xiàng)結(jié)果,各環(huán)節(jié)前面計(jì)算的結(jié)果為后面多個(gè)計(jì)算集群復(fù)用,任何一個(gè)服務(wù)的數(shù)據(jù)都是在分布式計(jì)算。此外,整個(gè)計(jì)算過程中維護(hù)著技術(shù)卡表的映射關(guān)系,對(duì)于 TP 數(shù)據(jù)來說就是精確計(jì)算的,不會(huì)失真。

整個(gè)計(jì)算過程中,前置計(jì)算結(jié)果會(huì)被多個(gè)直接及間接后續(xù)子計(jì)算復(fù)用(如三級(jí)聚合計(jì)算對(duì)二級(jí)和一級(jí)都是有效的),在很大程度上減少了計(jì)算量。

2.3.3 關(guān)鍵技術(shù)總結(jié)

1. 高吞吐 & 擴(kuò)展性關(guān)鍵設(shè)計(jì)

去計(jì)算熱點(diǎn):組織多級(jí)散列數(shù)據(jù)流,逐級(jí)降維。

降計(jì)算量:前置子計(jì)算結(jié)果復(fù)用,分布式多路歸并。

降網(wǎng)絡(luò)IO,磁盤IO:優(yōu)化 PB 序列化算法,自管理 MQ 批量。

去存儲(chǔ)熱點(diǎn):消除 HBase Rowkey 熱點(diǎn)。

無鎖處理:自研線程分桶的流批處理模型,全局無鎖。

全環(huán)節(jié)水平擴(kuò)展:計(jì)算、傳輸、存儲(chǔ)均水平擴(kuò)展。

2. 系統(tǒng)高可靠、低運(yùn)維、數(shù)據(jù)準(zhǔn)確性高于5個(gè)9關(guān)鍵設(shè)計(jì)

無狀態(tài)化 + 快速自愈:節(jié)點(diǎn)無狀態(tài)化,宕機(jī)秒級(jí)感知自愈。

異常實(shí)時(shí)感知:異常節(jié)點(diǎn)通過心跳摘除,異常數(shù)據(jù)遷移回溯。

故障隔離容災(zāi):各維度獨(dú)立隔離故障范圍;多機(jī)房容災(zāi)。

逐級(jí)降維過程中數(shù)據(jù)不失真,精確的 TP 計(jì)算模式。

3. 提升實(shí)時(shí)性關(guān)鍵設(shè)計(jì)

流式拓?fù)淠P?,分布式子?jì)算結(jié)果復(fù)用,計(jì)算量逐級(jí)遞減。

無鎖處理:自研線程分桶的流批處理模型,全局無鎖。

異常實(shí)時(shí)監(jiān)測自愈:計(jì)算節(jié)點(diǎn)異常時(shí)迅速 Rebalance,及時(shí)自愈。

秒級(jí)計(jì)算流獨(dú)立,內(nèi)存存儲(chǔ)。

三、優(yōu)化效果

目前日均處理數(shù)據(jù)量超萬億,系統(tǒng)可支撐日10萬億+量級(jí)并具備良好的擴(kuò)展能力;秒峰值可處理5億+數(shù)據(jù);單服務(wù)日吞吐上限提升1000倍+,單服務(wù)可以支撐5000億數(shù)據(jù)計(jì)算。

最大時(shí)延從4小時(shí)+降低到2min-,秒級(jí)指標(biāo)時(shí)延 TP99 達(dá)到 6s;平均時(shí)延從4.7分+降低到1.5分-,秒級(jí)指標(biāo)平均時(shí)延6s。

上線后集群未發(fā)生雪崩,同時(shí)宕機(jī)1/3實(shí)例2秒內(nèi)自動(dòng)化自愈。

支持多維度的準(zhǔn)實(shí)時(shí)精確 TP 計(jì)算,最高支持到 TP 6個(gè)9;支持所有服務(wù)所有維度統(tǒng)計(jì)。

千余節(jié)點(diǎn)集群運(yùn)維投入從周20小時(shí)+降低至10分以下。

四、總結(jié)

本文提供了一種日均超萬億規(guī)模下多維度精確 TP 計(jì)算的準(zhǔn)實(shí)時(shí)數(shù)據(jù)計(jì)算引擎方案,適用于在超大規(guī)模數(shù)字化治理體系建設(shè)中,解決擴(kuò)展性、實(shí)時(shí)性、精確性、穩(wěn)定性、運(yùn)維成本等問題。美團(tuán)基礎(chǔ)研發(fā)平臺(tái)歡迎業(yè)界同行一起交流、探討。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容