<b>背景</b>
每年的雙十一除了“折扣”,全世界(特别是阿裡人)都關注的另一個焦點是面向媒體直播的“實時大屏”(如下圖所示)。包括總成交量在内的各項名額,通過數字次元展現了雙十一狂歡節這一是買家,賣家及物流小二一起創造的奇迹!

雙十一媒體直播大屏
這一大屏背後需要實時處理海量的龐大電商系統各個子產品産生的交易日志,例如雙十一目前産生的日志量達到了3.7pb,而每秒處理的峰值更是達到了近1億事件!
如此大規模、高吞吐和低延時計算,帶來一系列世界級的技術挑戰,包括:
1.
<b>實時程式設計</b>:流式的資料處理給業務邏輯的表達和推理帶來了很多的複雜性。特别面對不斷變化的業務需求,如何幫助使用者快速地編寫和驗證明時計算邏輯是至關重要的。
2.
<b>低延時</b>:實時計算強調計算延時和結果的時效性。例如實時大屏對計算延時特别敏感,每年的雙十一都超越前一年更早地達到相同的成交量,系統需要在秒級甚至毫秒級反應出每一筆交易。即使在流量高峰時(雙十一晚0:00點)也需要保證延時!
3.
<b>叢集使用率</b>:為提高資源使用率,我們将不用業務的實時處理邏輯共享一個叢集。這樣的共享也帶來性能隔離的問題,即如何讓同一台實體機上的不同邏輯任務不互相幹擾。這也是大部分開源架構忽略的重要問題。
4.
<b>嚴格容錯及資料一緻性</b>:随着應對高吞吐而不斷擴大的叢集規模,各種軟硬體故障都難以避免。如何保證明時計算在任何故障下都能産生準确、一緻的計算結果,不遺漏、重複事件輸出,也不引起内部狀态的偏差,是另一個重大挑戰。
5.
<b>多樣化場景支援</b>:随着實時決策對業務的價值越來越多,系統還需要支援越來越複雜和多樣化的場景,如線上機器學習、結合圖計算實作的動态關系網絡分析等等。
下文介紹streamcompute的重要技術創新,簡要描述它們如何幫助應對以上技術挑戰。
<b>sql</b><b>與增量計算</b><b>——複用熟悉的離線思維,自動實作增量(流式)計算!</b>
為了簡化使用者程式設計,特别是利用原有的離線計算作業快速實作實時計算,streamcompute允許通過高層描述性語言,如使用者熟悉的sql來編寫流計算作業。例如下面的例子,通過簡單幾行sql代碼就可以實作過濾、維表關聯等業務邏輯。
在執行時,由于資料是以流式進入系統的,使用者的sql就像資料庫視圖一樣,被自動增量更新,并以一定的頻率輸出結果,供下遊計算和展示。
這一獨特的程式設計設計,不僅幫助使用者借助熟悉的離線處理思維表達實時計算邏輯,也因為同樣的程式可以在離線系統運作,使得結果的對比變得易如反掌。
<b>高性能優化引擎——實作低延時計算</b><b>!</b>
使用者的sql腳本經過編譯優化,生成資料流圖,然後運作于streamcompute的分布式引擎之上。相比開源資料流引擎,streamcompute引擎在“阿裡巴巴規模”下,面對真實複雜的業務場景做了很多優化。包括自适應的消息打包、自定義序列化、資料行+列壓縮、先進的記憶體管理、和内部緩存隊列和線程模型,以及基于下遊向上遊“反向”傳遞壓力的流控政策等。
圖:streamcompute優化執行流和運作時子產品
經過以上一系列的優化,streamcompute相比去年提升了6倍左右的吞吐性能。下圖顯示了streamcompute相比開源系統的性能優勢。在面對今年雙十一3倍于去年的峰值情況下,表現非常穩健。
圖:開源架構性能對比,通過“視窗wordcount(6組參數)”基準測試擷取
<b>靈活的資源排程</b>
streamcompute面對阿裡巴巴集團衆多業務場景,将不同業務放置于大規模(幾千台伺服器組成的)共享叢集中,以提高資源使用率。另一方面也随之帶來了“多租戶”環境下的作業資源隔離問題,它直接影響資源的有效利用和作業的計算性能。
經過多年的積累,streamcompute支援cpu、記憶體、網絡和磁盤i/o等多元度資源的隔離。例如,對于cpu的隔離支援靈活的min-max政策,既保證了每個作業最基本的資源需求,也使的空閑的資源被最大限度利用。
圖:作業次元的cpu資源min-max共享模型
在此基礎上,streamcompute的資源排程還支援一定比例的“超賣”、作業優先級排程、動态負載均衡和微作業共享單一實體核等多種機制。對于資源消耗特别大的作業還支援動态按需配置設定(即資源的彈性配置設定)。在滿足複雜的運維要求和實時計算連續性的同時,實作了高效的資源利用和性能隔離。
<b>容錯與狀态管理</b>
流計算需要連續處理可能無界的輸入和連續産生輸出。在長時間運作中,大規模計算叢集的各種軟體或硬體故障難以避免。由此對于計算和中間結果(如記憶體狀态)的容錯就至關重要。為了做到精确的容錯和故障恢複,保證結果的準确性。streamcompute支援多種靈活的容錯政策,以在不同計算特性下,權衡容錯資源消耗和恢複性能。如基于輸入的重新計算、狀态檢查點(checkpoint),甚至是多副本的狀态和計算容錯等。
特别是自動的分布式增量檢查點功能,系統自動利用記憶體、本地磁盤和遠端存儲構成的多級存儲,在不影響流計算延時的情況下異步實作了計算狀态的持久化。當有故障發生時,儲存的狀态可以被快速加載。這一切對使用者都是無感覺的。
圖:自動利用多級存儲的流計算狀态管理
<b>開放可程式設計</b><b>api</b><b>(相容</b><b>apache beam</b><b>)</b>
除了sql這樣高層的描述語言和使用者自定義邏輯(udf),streamcompute還支援apache beam api,以提供更為靈活的實時邏輯程式設計。beam是一個統一開放的大資料應用程式設計接口,可以同時描述離線和線上邏輯,最早由google提出。beam提供了功能豐富的程式設計接口,能有效的處理有界、無界、亂序的資料流輸入。 下面顯示了通過beam實作的流式wordcount的例子:
借助beam,使用者可以利用高性能的streamcompute引擎,定制面向特定領域的系統互動接口。同時,streamcompute今後也将相容更多生态(如spark streaming和flink streaming api)。
<b> </b>
<b>可視化內建開發平台和自動化運維</b>
streamcompute還提供了“一站式”的內建開發環境——貝葉斯(bayes,https://data.aliyun.com/product/sc)和自動化運維平台——特斯拉(tesla目前僅服務阿裡集團内部,未來逐漸開放對外服務)。通過它們,使用者可以友善地管理流計算應用的生命周期,包括程式設計、調試、監控運維,極大地降低了流計算系統的使用門檻。
圖:貝葉斯內建開發環境
<b>雙十一的寶貴工程經驗!</b>
為保障系統在雙十一平穩支撐業務,在以上功能基礎上,我們還總結了完整的全鍊路保障方法:
·
<b>主備雙鍊路容災</b>:利用streamcompute對多副本執行的支援,面向雙十一重點媒體大屏等實時業務,實作了跨機房的多鍊路副本。哪怕是整個機房的故障,都能在秒級自動切換到另一副本上執行,保障了雙十一系統高可用。
<b>實時全鍊路監控</b>:我們從資料采集、讀取、消費、入庫各個環節都增加延時名額的埋點,可以清晰地看到整條鍊路各個階段的延時,快速分析哪個元件性能瓶頸。另外,針對作業本身運作情況,比如輸入吞吐、流量、cpu和記憶體消耗,都做了實時分析和展示的系統,能在秒級發現作業的異常。
<b>運維診斷工具</b>:為應對各種應急響應,我們做了一套完整的運維診斷工具用于發現叢集熱點機器、熱點作業。在tesla頁面上能快速找到叢集的熱點機器,通過“機器分析”工具檢視這台機器上實時跑的任務,并且能定位到相應的業務和使用者。通過“作業分析”工具能自動診斷異常,結合作業的優先級,實作了一鍵負載均衡、啟停、續跑等運維操作。
通過這些保障設施,雙十一當天,即使在發生交換機硬體故障的情況下,面向全球直播的媒體大屏業務并沒有受到任何影響!
<b>總結</b>
擁有這些和其它諸多能力,streamcompute已經具備了相當完善的實時計算能力,也提供了“一站式”的解決方案。今年雙十一當天,streamcompute處理了3.7pb資料,處理峰值達到了1億事件每秒,平均處理延遲在毫秒級!除了雙十一媒體大屏,streamcompute還支撐着阿裡巴巴集團内外衆多實時業務,包括資料營運、廣告營銷、搜尋個性化、智能客服、物流排程、支付寶、聚劃算等。