每年雙11除了“折扣”,阿里人關(guān)注的另一個焦點,就是面向全世界媒體 直播的“實時大屏”(如下圖所示)。包括總成交量在內(nèi)的各項指標,通過數(shù)字 維度展現(xiàn)了雙11狂歡節(jié)這一是買家,賣家及物流小二共同創(chuàng)造的奇跡!

圖 3:雙11媒體直播大屏
為實現(xiàn)這一大屏,背后需要實時處理海量的、龐大電商系統(tǒng)各個模塊產(chǎn)生的 交易日志。例如雙 11 當天產(chǎn)生的日志量達到了 PB 級別,而每秒處理的峰值更 是高達近1億事件! 如此大規(guī)模、高吞吐和低延時計算,帶來一系列世界級的技術(shù)挑戰(zhàn),包括:
- 實時編程:流式的數(shù)據(jù)處理給業(yè)務(wù)邏輯的表達和推理帶來了很多的復(fù)
雜性。特別面對不斷變化的業(yè)務(wù)需求,如何幫助用戶快速地編寫和驗證實時計算 邏輯是至關(guān)重要的。 - 低延時:實時計算強調(diào)計算延時和結(jié)果的時效性。例如實時大屏對計算 延時特別敏感,每年的雙11都超越前一年更早地達到相同的成交量,系統(tǒng)需要 在秒級甚至毫秒級反應(yīng)出每一筆交易。即使在流量高峰時(雙 11 晚 0:00 點) 也需要保證延時!
- 集群利用率:為提高資源利用率,我們將不用業(yè)務(wù)的實時處理邏輯共 享一個集群。這樣的共享也帶來性能隔離的問題,即如何讓同一臺物理機上的不 同邏輯任務(wù)不互相干擾。這也是大部分開源框架忽略的重要問題。
- 嚴格容錯及數(shù)據(jù)一致性:隨著應(yīng)對高吞吐而不斷擴大的集群規(guī)模,各 種軟硬件故障都難以避免。如何保證實時計算在任何故障下都能產(chǎn)生準確、一致的計算結(jié)果,不遺漏、重復(fù)事件輸出,也不引起內(nèi)部狀態(tài)的偏差,是另一個重大 挑戰(zhàn)。
- 多樣化場景支持:隨著實時決策對業(yè)務(wù)的價值越來越多,系統(tǒng)還需要 支持越來越復(fù)雜和多樣化的場景,如在線機器學習、結(jié)合圖計算實現(xiàn)的動態(tài)關(guān)系 網(wǎng)絡(luò)分析等等。 下文介紹Galaxy的重要技術(shù)創(chuàng)新,簡要描述它們?nèi)绾螏椭鷳?yīng)對以上技術(shù)挑 戰(zhàn)。
2.1 SQL 與增量計算——復(fù)用熟悉的離線思維,自動實
現(xiàn)增量(流式)計算 為了簡化用戶編程,特別是利用原有的離線計算作業(yè)快速實現(xiàn)實時計算, Galaxy允許通過高層描述性語言,如用戶熟悉的SQL來編寫流計算作業(yè)。例如 下面的例子,通過簡單幾行SQL代碼就可以實現(xiàn)過濾、雙流關(guān)聯(lián)等業(yè)務(wù)邏輯。

在執(zhí)行時,由于數(shù)據(jù)是以流式進入系統(tǒng)的,用戶的 SQL 就像數(shù)據(jù)庫視圖一 樣,被自動增量更新,并以一定的頻率輸出結(jié)果,供下游計算和展示。 這一獨特的編程設(shè)計,不僅幫助用戶借助熟悉的離線處理思維表達實時計算 邏輯,也因為同樣的程序可以在離線系統(tǒng)運行,使得結(jié)果的對比變得易如反掌。
2.2 高性能優(yōu)化引擎——實現(xiàn)低延時計算!
用戶的SQL腳本經(jīng)過編譯優(yōu)化,生成數(shù)據(jù)流圖,然后運行于Galaxy的分布 式引擎之上。相比開源數(shù)據(jù)流引擎,Galaxy 引擎在“阿里巴巴規(guī)?!毕拢鎸?真實復(fù)雜的業(yè)務(wù)場景做了很多優(yōu)化。包括自適應(yīng)的消息打包、自定義序列化、數(shù) 據(jù)行+列壓縮、先進的內(nèi)存管理、和內(nèi)部緩存隊列和線程模型,以及基于下游向 上游“反向”傳遞壓力的流控策略等。

經(jīng)過以上一系列的優(yōu)化,Galaxy 相比去年提升了 6 倍左右的吞吐性能。下 圖顯示了 Galaxy 相比開源系統(tǒng)的性能優(yōu)勢。在面對今年雙 11 3 倍于去年的峰 值情況下,表現(xiàn)非常穩(wěn)健。

圖 5:開源框架性能對比,通過“窗口 WordCount(6 組參數(shù))”基準測 試獲取.
2.3 靈活的資源調(diào)度
Galaxy 面對阿里巴巴集團眾多業(yè)務(wù)場景,將不同業(yè)務(wù)放置于大規(guī)模(幾千 臺服務(wù)器組成的)共享集群中,以提高資源利用率。另一方面也隨之帶來了“多 租戶”環(huán)境下的作業(yè)資源隔離問題,它直接影響資源的有效利用和作業(yè)的計算性 能。 經(jīng)過多年的積累,Galaxy支持CPU、內(nèi)存、網(wǎng)絡(luò)和磁盤I/O等多維度資源 的隔離。例如,對于 CPU 的隔離支持靈活的 min-max 策略,既保證了每個作 業(yè)基本的資源需求,也使的空閑的資源被大限度利用。

圖6:作業(yè)維度的CPU資源min-max共享模型
不一樣的技術(shù)創(chuàng)新
166
在此基礎(chǔ)上,Galaxy 的資源調(diào)度還支持一定比例的“超賣”、作業(yè)優(yōu)先級 調(diào)度、動態(tài)負載均衡和微作業(yè)共享單一物理核等多種機制。對于資源消耗特別大 的作業(yè)還支持動態(tài)按需分配(即資源的彈性分配)。在滿足復(fù)雜的運維要求和實 時計算連續(xù)性的同時,實現(xiàn)了高效的資源利用和性能隔離。
2.4容錯與狀態(tài)管理 流計算需要連續(xù)處理可能無界的輸入和連續(xù)產(chǎn)生輸出。在長時間運行中,大 規(guī)模計算集群的各種軟件或硬件故障難以避免。由此對于計算和中間結(jié)果(如內(nèi) 存狀態(tài))的容錯就至關(guān)重要。為了做到精確的容錯和故障恢復(fù),保證結(jié)果的準確 性。Galaxy 支持多種靈活的容錯策略,以在不同計算特性下,權(quán)衡容錯資源消 耗和恢復(fù)性能。如基于輸入的重新計算、狀態(tài)檢查點(checkpoint),甚至是 多副本的狀態(tài)和計算容錯等。 特別是自動的分布式增量檢查點功能,系統(tǒng)自動利用內(nèi)存、本地磁盤和遠程 存儲構(gòu)成的多級存儲,在不影響流計算延時的情況下異步實現(xiàn)了計算狀態(tài)的持久 化。當有故障發(fā)生時,保存的狀態(tài)可以被快速加載。這一切對用戶都是無感知的。

圖7:自動利用多級存儲的流計算狀態(tài)管理
2.5 開放可編程 API(兼容 Apache Beam)
除了SQL這樣高層的描述語言和用戶自定義邏輯(UDF),Galaxy還支持 Apache Beam API,以提供更為靈活的實時邏輯編程。Beam是一個統(tǒng)一開放 的大數(shù)據(jù)應(yīng)用編程接口,可以同時描述離線和在線邏輯,早由 Google 提出。 Beam提供了功能豐富的編程接口,能有效的處理有界、無界、亂序的數(shù)據(jù)流輸 入。 下面顯示了通過Beam實現(xiàn)的流式WordCount的例子: 1.指定Runner(底層計算引擎)創(chuàng)建一個Pipeline。 2.使用Source在 Pipeline上生成一個PCollection,輸入數(shù)據(jù)。 3.對 PCollection應(yīng)用Transforms操作,比如wordCount中的count操作。 4.對后的PCollection應(yīng)用Sink,輸出結(jié)果到外部存儲中。 5.Run Pipeline到底層的計算引擎中。 使用Beam實現(xiàn)WordCount代碼樣例
public static class CountWords extends PTransform<PCollection<String>, PCollection<KV<String, Long>>> {
@Override public PCollection<KV<String, Long>> apply(PCollection<String> lines) {
// Convert lines of text into individual words.
PCollection<String> words = lines.apply(
ParDo.of(new ExtractWordsFn()));
// Count the number of times each word occurs.
PCollection<KV<String, Long>> wordCounts = words.apply(Count.<String>perElement());
return wordCounts;
}
}
借助Beam,用戶可以利用高性能的Galaxy引擎,定制面向特定領(lǐng)域的系 統(tǒng)交互接口。同時,Galaxy 今后也將兼容更多生態(tài)(如 Spark Streaming 和 Flink Streaming API)。
2.6 可視化集成開發(fā)平臺和自動化運維
Galaxy 還提供了“一站式”的集成開發(fā)環(huán)境——貝葉斯(Bayes, https://data.aliyun.com/product/sc)和自動化運維平臺——特斯拉(Tesla)。 通過它們,用戶可以方便地管理流計算應(yīng)用的生命周期,包括編程、調(diào)試、監(jiān)控 運維,極大地降低了流計算系統(tǒng)的使用門檻。

圖8:貝葉斯集成開發(fā)環(huán)境
2.7 雙 11 的寶貴工程經(jīng)驗
為保障系統(tǒng)在雙11平穩(wěn)支撐業(yè)務(wù),在以上功能基礎(chǔ)上,我們還總結(jié)了完整 的全鏈路保障方法: ? 主備雙鏈路容災(zāi):利用 Galaxy 對多副本執(zhí)行的支持,面向雙 11 重點 媒體大屏等實時業(yè)務(wù),實現(xiàn)了跨機房的多鏈路副本。哪怕是整個機房的故障,都 能在秒級自動切換到另一副本上執(zhí)行,保障了雙11系統(tǒng)高可用。 ? 實時全鏈路監(jiān)控:我們從數(shù)據(jù)采集、讀取、消費、入庫各個環(huán)節(jié)都增加 延時指標的埋點,可以清晰地看到整條鏈路各個階段的延時,快速分析哪個組件 性能瓶頸。另外,針對作業(yè)本身運行情況,比如輸入吞吐、流量、CPU 和內(nèi)存 消耗,都做了實時分析和展示的系統(tǒng),能在秒級發(fā)現(xiàn)作業(yè)的異常。
? 運維診斷工具:為應(yīng)對各種應(yīng)急響應(yīng),我們做了一套完整的運維診斷工 具用于發(fā)現(xiàn)集群熱點機器、熱點作業(yè)。在Tesla頁面上能快速找到集群的熱點機 器,通過“機器分析”工具查看這臺機器上實時跑的任務(wù),并且能定位到相應(yīng)的 業(yè)務(wù)和用戶。通過“作業(yè)分析”工具能自動診斷異常,結(jié)合作業(yè)的優(yōu)先級,實現(xiàn) 了一鍵負載均衡、啟停、續(xù)跑等運維操作。 通過這些保障設(shè)施,雙11當天,即使在發(fā)生交換機硬件故障的情況下,面 向全球直播的媒體大屏業(yè)務(wù)并沒有受到任何影響!
2.8 小結(jié)
擁有這些和其它諸多能力,Galaxy 已經(jīng)具備了相當完善的實時計算能力, 也提供了“一站式”的解決方案。今年雙11當天,Galaxy處理了PB級別數(shù)據(jù), 處理峰值達到了 1 億事件每秒,平均處理延遲在毫秒級!除了雙 11 媒體大屏, Galaxy 還支撐著阿里巴巴集團內(nèi)外眾多實時業(yè)務(wù),包括數(shù)據(jù)運營、廣告營銷、 搜索個性化、智能客服、物流調(diào)度、支付寶、聚劃算等