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

原文連接算法

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

在阿里巴巴的11年工做期間,持續專一大數據計算與存儲技術領域,基於Hadoop開源生態打造的數據基礎設施一直服務於搜索、推薦等阿里核心電商業務場景,最近一年帶領團隊對Apache Flink進行了大量架構改進、功能完善和性能提高,打造出了阿里新一代實時計算引擎: Blink。目前數千臺規模的Blink生產集羣已經開始在線支持搜索、推薦、廣告、螞蟻金服等核心實時業務場景。
2
王峯在清華大學演講
實時計算時代來臨
隨着互聯網應用的普及、智能硬件的發展,數據的種類和規模都呈現了爆炸式的增加,各行各業都但願可以從大數據中發掘出更深層次的信息和知識,併產生實際價值。數據挖掘手段也逐漸從基本的數據統計向更高層次的機器學習和深度學習演變,但這些都須要強大的計算能力做爲支撐,所以大數據價值的體現離不開大數據計算平臺的發展。架構

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

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

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

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

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

流式計算介紹
顯然批量計算模型是沒法知足當前大數據實時計算需求的,只有流式計算模型纔是實時計算的自然計算模型,所以我先介紹下流式計算的基本思想,尤爲是區別於傳統批量計算的一些概念。批量計算是對於有限固定的數據集合進行處理,流式計算是對無限數據流的處理,即計算沒法肯定數據什麼時候會結束。從另外一個角度看,批量計算其實也能夠認爲是流式計算的一種特例,所以批量計算能夠看作是一個數據流中的片斷,即有明確開始和結束標記的數據流,以下圖所示:
4
完善的流式計算不只應該提供實時計算能力,還應該支持計算過程當中的狀態管理,狀態主要是指計算過程當中須要的數據或者變量,例如:統計計算中的aggregation(sum/min/max…),機器學習中的feature和model,狀態管理包括這些數據的存儲、備份、恢復,版本管理,提供讀寫訪問API,並保證一致性,以下圖所示:
5
此外,完善的流計算還須要考慮數據的時序問題,由於現實場景中,數據的產生順序和接收順序未必一致,所以須要給數據附帶時間戳屬性,即:event time,計算邏輯能夠按照數據的event time來處理,這樣能夠解決數據的亂序問題,配合watermark機制,能夠較好的解決time window計算,以下圖所示:

6

流和批統一的計算引擎
7

完整的生態系統

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

9

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

Flink的問題

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

Blink介紹

Blink產生背景

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

當時咱們重點分析對比了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在阿里巴巴的現狀

11

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系統中,讓算法或者運營人員能夠實時看到線上實際效果,從而合理調整配置各類模型,逐步達到最佳效果。

12

商品數索引構建流程

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

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

Porsche – 在線機器學習平臺

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

Blink技術架構
15

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

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

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

Blink的將來

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

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

相關文章
相關標籤/搜索