阿里新一代實時計算引擎 Blink,每秒支持數十億次計算

原文地址https://mp.weixin.qq.com/s/S3FfkHYTr3kICFngA_Htpg?spm=a2c4e.11153940.blogcont90243.11.68826711iwPLU8

作者介紹

王峯,淘寶花名”莫問",2006年畢業後即加入阿里巴巴集團,長期從事搜索和大數據基礎技術研發工作,目前在計算平臺事業部,負責實時計算北京研發團隊。

 

在阿里巴巴的11年工作期間,持續專注大數據計算與存儲技術領域,基於Hadoop開源生態打造的數據基礎設施一直服務於搜索、推薦等阿里核心電商業務場景,最近一年帶領團隊對Apache Flink進行了大量架構改進、功能完善和性能提升,打造出了阿里新一代實時計算引擎: Blink。目前數千臺規模的Blink生產集羣已經開始在線支持搜索、推薦、廣告、螞蟻金服等核心實時業務場景。

 

王峯在清華大學演講

 

實時計算時代來臨

 

隨着互聯網應用的普及、智能硬件的發展,數據的種類和規模都呈現了爆炸式的增長,各行各業都希望能夠從大數據中發掘出更深層次的信息和知識,併產生實際價值。數據挖掘手段也逐漸從基本的數據統計向更高層次的機器學習和深度學習演變,但這些都需要強大的計算能力作爲支撐,因此大數據價值的體現離不開大數據計算平臺的發展。

 

目前大數據業界在計算技術上已經取得了顯著的成果,例如:第一代開源的大數據處理技術Hadoop已經可以處理超大規模的數據集合,第二代開源的大數據處理技術Spark更好的利用了內存,並進一步加快了大數據處理的性能。

 

各大公司也都基於自身業務場景和數據規模定製了自己的大數據計算平臺,但這些大數據計算平臺大都是批處理系統,雖然具備海量數據處理能力,但在時效性上有明顯的滯後。顯然,數據的價值不僅體現在空間維度上,同時也在時間維度上進行伸展,很多場景下數據的價值也會隨着時間的流逝而逐漸消失。因此,大數據計算平臺需要能夠儘可能的提升計算的時效性,越快地從數據中挖掘出信息就意味着能夠獲取到更大的價值。

 

時效性對數據價值的影響尤其在電子商務領域更加明顯。通常人們在不同時刻會有着不同的消費需求和潛在目標。很多時候,這些需求和目標都是臨時的(即和歷史行爲關聯度較低),並且從產生到結束之間的時間是非常有限的。這種情況在阿里巴巴雙十一大促這樣的場景中表現的尤爲明顯。

 

大促場景下,用戶會由於豐富的促銷活動和環境而臨時產生更多的購物需求,並且每個購物需求的有效期是有限的。因此,搜索和推薦系統需要及時發現用戶的需求變化,在數據有效期內完成模型更新,推薦用戶當前感興趣的商品。此外,阿里巴巴的數據大屏也需要在大促期間實時展示成交額等大家關注的統計信息,而不是大促結束後第二天再讓大家看到數據。

 

其實目前不僅在阿里巴巴,各個行業都對大數據時效性的計算需求在日益增加,因此,阿里巴巴需要研發世界級一流的流式計算引擎,實時處理海量數據,提供在線統計、學習和預測能力,不僅支持阿里巴巴自己的核心電商場景,同時也能通過阿里雲向外部中小企業提供流式計算服務,輸出實時計算能力,這就是我今天要分享的最新一代阿里巴巴實時計算引擎Blink。

 

流式計算介紹

 

顯然批量計算模型是無法滿足當前大數據實時計算需求的,只有流式計算模型纔是實時計算的天然計算模型,因此我先介紹下流式計算的基本思想,尤其是區別於傳統批量計算的一些概念。批量計算是對於有限固定的數據集合進行處理,流式計算是對無限數據流的處理,即計算無法確定數據何時會結束。從另一個角度看,批量計算其實也可以認爲是流式計算的一種特例,因此批量計算可以看做是一個數據流中的片段,即有明確開始和結束標記的數據流,如下圖所示:

 

 

 

完善的流式計算不僅應該提供實時計算能力,還應該支持計算過程中的狀態管理,狀態主要是指計算過程中需要的數據或者變量,例如:統計計算中的aggregation(sum/min/max…),機器學習中的feature和model,狀態管理包括這些數據的存儲、備份、恢復,版本管理,提供讀寫訪問API,並保證一致性,如下圖所示:

 

 

 

 

此外,完善的流計算還需要考慮數據的時序問題,因爲現實場景中,數據的產生順序和接收順序未必一致,因此需要給數據附帶時間戳屬性,即:event time,計算邏輯可以按照數據的event time來處理,這樣可以解決數據的亂序問題,配合watermark機制,可以較好的解決time window計算,如下圖所示:

 

 

 

 

在開源大數據生態中,Storm是第一代流式計算框架的代表,但它不支持狀態管理,即Storm中的狀態數據需要用戶自己存儲在外部存儲系統中,數據的持久化和一致性都需要用戶自己保證,這會給應用帶來一定複雜度。

 

後續出現的Samza是支持狀態管理的第二代流計算技術,內部利用leveldb和kafka來存儲數據,但samza只能保證at least once不丟數據,但無法保證exactly once的強一致性,這在一些嚴格的場景下是有侷限性的。近幾年火爆的Spark也很快推出了配套的Spark Streaming技術,但其本質上是通過連續不間斷的Mini Batch來實現流式處理的,不是純粹的流式計算思想,時效性上也有一定侷限性。

 

只有最新一代的Flink是相對最爲純粹和完善的流計算技術,在理論模型上具備了一切流計算的特質,也是支持Apache Beam最好的Runner,給我們啓動Blink項目帶來了非常有價值的啓發,因此下面我將介紹下Flink這個Apache開源流計算項目。

 

Flink介紹

 

 

流和批統一的計算引擎

 

 

 

 完整的生態系統

 

 

狀態管理和一致性

 

Chandy-Lamport算法是Flink支持狀態管理和強一致性的核心理論基礎,算法基礎思想如下圖所示:

 

 

 

Chandy-Lamport算法的核心思想就是定期在流式計算任務中插入Barrier,然後觸發整個流做一次Checkpoint,即將任務的State做一次Snapshot持久化保存。在下次任務重啓的時候,可以基於上次成功的Checkpoint進行恢復,過程如下圖所示:

 

 

 

 Flink的問題

 

綜上所述,Flink是一套理念和架構設計非常先進的流處理引擎,並幾乎支持了流式計算所有的特質,但Flink發展尚在初期,在活躍度和成熟度上稍有欠缺,並且尚未在業內得到大規模生產實踐的檢驗,因此是無法直接應用在阿里巴巴這種級別的生產場景中的,因此我們在2015年下半年啓動了Blink項目,目標是擴展、優化、完善Flink,使其能夠應用在阿里巴巴大規模實時計算場景,並將此項目命名爲Blink,下面我將介紹Blink的設計以及在阿里巴巴的應用。

 

Blink介紹

 

Blink產生背景

 

在2015年,當時我們還是阿里巴巴搜索事業部的數據技術團隊,負責阿里巴巴所有商品搜索後臺的數據處理,包括淘寶,天貓,B2B等全球商品,面對海量商品的數據處理,我們需要在維護兩套數據處理流程,一套是每天晚上的全量流程,同時還要一套白天的實時增量流程,爲了降低開發和維護成本,我們開始探索一套流和批統一的計算引擎。

 

當時我們重點分析對比了Spark和Flink兩套技術,最後雖然覺得Spark相對成熟穩定,但Spark是從Batch出發,模擬Streaming,而Flink正好相反是從Streaming出發,認爲Batch是Streaming的Special Case,因此我們感覺Flink的設計思想更先進,更適合未來的計算髮展方向,更適合我們的需求,因此我們決定選擇Flink技術方向。

 

Blink - Alibaba Flink

 

雖然Flink具備流計算的各種優勢,但Flink在成熟度和活躍度上的不足,使得我們無法在阿里巴巴業務場景中直接使用,因此我們啓動了Blink項目,目標就是擴展、優化、完善Flink,使其能夠應用在阿里巴巴大規模實時計算場景,並將我們在阿里巴巴對Flink的改進都回饋給開源社區。

 

最近一年中Blink已經將多項架構、功能和性能改進貢獻給Flink社區,例如:

 

  • Flink架構升級,插件化原生支持不同調度系統,並實現了原生運行在Hadoop YARN上

  • Failover穩定性改進,優化了Task/TaskManager以及JobManager各種組件Fail的場景處理

  • 提出並實現了增量式Checkpoint的架構,使得Flink的Checkpoint/Recovery速度大幅提升,成本明顯下降

  • 提出並實現了Async Operator,通過異步方式,讓I/O密集型計算節點的性能大幅提升

  • 提出了大量Table API的全新設計,以及流和批在SQL層面的統一概念和方案

 

Blink在阿里巴巴的現狀

     

 

 

Blink實時計算引擎在阿里巴巴內部是運行在Hadoop集羣上的,Blink計算任務會根據自己的需求向YARN申請計算資源,運行過程中週期性將計算狀態持久化到HDFS上,以方便隨時恢復,因此可以看出新型的Blink計算平臺也可以很好的leverage成熟的Hadoop生態。

 

在API層,Blink提供了基礎的DataStream/DataSet API,用戶可以利用基礎API有較高自由度的開發。此外,Blink重點提供了Table API/SQL這種高級語言API,可以降低門檻讓更多開發人員以更低成本進行開發,這對於更多更快速的業務接入是非常有價值了,而且在SQL層Flink之前的進展是非常緩慢的,Blink對Flink給與了非常及時的補充和完善。

 

此外,基於Blink,我們建設出了一套在線機器學習平臺Porsche,其爲算法人員提供了一套非常豐富的算法插件機制,幫助算法人員快速搭建各種常用的機器學習流程。因此,Porsche完全leverage了Blink的實時計算能力,並釋放了Blink在實時在線機器學習領域的力量。

 

目前Blink已經在阿里巴巴生產環境運行將近一年時間,支持了阿里巴巴多條核心業務線,例如:搜索,推薦,推薦,螞蟻和安全等,大致的生產運行規模如下所示:

 

  • 運行的總機器數已經超過3000臺

  • 最大的生產集羣機器數已經超過1500臺

  • 每秒支持數十億次的實時計算

  • 最大的生產任務已經超過5000個併發,包含10TB級的State,億級TPS

 

Blink在去年阿里巴巴雙11購物節中完成了第一次正式的挑戰,搜索和推薦全實時鏈路全天穩定運行,不僅保證了淘寶、天貓商品實時更新無延遲,同時基於Blink的在線機器學習平臺Porsche由於能夠較好的將用戶和商品行爲實時學習,因此產生了非常好的時效性效果,大幅提升了雙11商品成交轉化率。

 

例如:雙11當天有很多爆款商品,銷售速度非常快,可能很快售罄,如果將用戶都引導到這些商品上,會導致用戶實際沒有成交機會,浪費大量流量,良好的時效性數據可以讓在線學習平臺較快的預測到這種場景,並將用戶流量進行更加合理的分配。因此可以看出,基於實時計算的在線機器學習平臺其實已經開始真正走向舞臺,併產生巨大價值。

 

 

Blink在阿里巴巴的經典案例

 

實時A/B Test

 

A/B Test的目標就是通過實時數據分析和統計反饋,不斷調整在線系統的算法模型,自動適應到最佳效果, A/B Test數據收集和處理流程大致如下圖所示,Blink任務從線上日誌實時同步用戶行爲數據,然後解析、過濾、統計,最終將各項統計指標寫入OLAP系統中,讓算法或者運營人員可以實時看到線上實際效果,從而合理調整配置各種模型,逐步達到最佳效果。

 

 

 

商品數索引構建流程

 

淘寶的搜索引擎是用戶在淘寶購物的最主要入口,淘寶的商品數據處理和索引構建流程大致如下圖所示,淘寶的商品庫都存儲的阿里巴巴的MySQL集羣中,搜索的數據處理流程需要從MySQL將數據同步到搜索引擎後臺的HBase存儲中(類似:Google都將網頁抓取到BigTable中),然後進行各種業務邏輯處理和索引構建,最終將索引推送到在線搜索引擎中提供搜索服務。

 

由於淘寶的商品搜索引擎需要在每天白天不斷進行實時商品更新,同時晚上還需要一套額外的全量商品更新流程,因此基於Blink的統一計算模型,流式計算和批量計算可以使用一套用戶邏輯代碼完成。

 

 

 

 Porsche – 在線機器學習平臺

 

在線機器學習平臺利用了Blink強大的實時計算能力,能夠實時的對海量用戶和商品行爲數據進行流式特徵提取以及訓練學習,並將實時更新的特徵和模型實時同步給在線的搜索和推薦引擎,實現個性化搜索和推薦,數據流程如下圖所示:

 

 

 

 

Blink技術架構

 

 

 

從Blink的架構圖中可以看出,Blink在內部模塊組成上和Flink是有着非常清晰的界限的,綠色部分是和Flink共享的基礎核心框架,Blink在這些框架、協議和接口上的改進都會回饋給社區,保證兼容性。

 

但藍色部分是擴展層,例如:資源管理,狀態存儲,運維監控、Debug工具,輸入輸出層等,Blink都會根據阿里巴巴技術生態和業務場景進行定製開發,使得Blink能夠在和Flink共享基礎內核和生態的前提下,依然能夠靈活支持阿里巴巴自身的場景需求。

 

這種架構設計,將之前開源技術的開放通用化和企業需要定製需求的矛盾進行了解耦,使得我們既可以和開源社區密切合作,享受開源的紅利,同時也可以根據阿里巴巴自身需求進行高度定製和優化,不會受制於外部不可控因素。

 

 

Blink的未來

 

目前Blink已經在阿里巴巴內部達成共識,成爲阿里巴巴統一的實時計算引擎,接下來我們將繼續加大在Blink技術發展上的投入,並與開源社區更加密切的合作,突進流式計算的發展。應用場景上,一方面會繼續擴大計算規模,並提推出內部統一實時計算服務,統一支持阿里內部的所有實時計算業務;另一方面也將會通過阿里雲的公有云和專有云渠道向外界輸出我們的實時計算能力,讓更多行業和用戶也都能享受到阿里巴巴實時計算的技術成果。

 

總之,Blink的實時計算之路剛剛開啓,未來必將有更大的挑戰和機遇,也非常歡迎各位對實時計算有興趣的技術愛好者以及高校學子們投身到這件開創新一代計算平臺的事情上來。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章