有贊是一個商家服務公司,提供全行業全場景的電商解決方案。在有贊,大量的業務場景依賴對實時數據的處理,做爲一類基礎技術組件,服務着有贊內部幾十個業務產品,幾百個實時計算任務,其中包括交易數據大屏,商品實時統計分析,日誌平臺,調用鏈,風控等多個業務場景,本文將介紹有贊實時計算當前的發展歷程和當前的實時計算技術架構。緩存
從技術棧的角度,咱們的選擇和大多數互聯網公司一致,從早期的Storm,到JStorm, Spark Streaming 和最近興起的Flink。從發展階段來講,主要經歷了兩個階段,起步階段和平臺化階段;下面將按照下圖中的時間線,介紹實時計算在有讚的發展歷程。服務器
這裏的的起步階段的基本特徵是,缺乏總體的實時計算規劃,缺少平臺化任務管理,監控,報警工具,用戶提交任務直接經過登陸 AG 服務器使用命令行命令提交任務到線上集羣,很難知足用戶對可用性的要求。 可是,在起步階段裏積累了內部大量的實時計算場景。架構
2014年初,第一個 Storm 應用在有贊內部開始使用,最初的場景是把實時事件的統計從業務邏輯中解耦出來,Storm 應用經過監聽 MySQL 的 binlog 更新事件作實時計算,而後將結果更新到 MySQL 或者 Redis 緩存上,供在線系統使用。相似的場景獲得了業務開發的承認,逐漸開始支撐起大量的業務場景,詳見2017年整理的一篇博客文章-《基於 Storm 的實時應用實踐》。 框架
早期,用戶經過登陸一組線上環境的AG服務器,經過Storm的客戶端向Storm集羣作提交任務等操做, 這樣在2年多的時間裏,Storm 組件積累了近百個實時應用。 Storm也一樣暴露出不少問題,主要體如今系統吞吐上,對吞吐量巨大,可是對延遲不敏感的場景,顯得力不從心。運維
2016 年底,隨着 Spark 技術棧的日益成熟,又由於 Storm 引擎自己在吞吐/性能上跟 Spark Streaming 技術棧相比有明顯劣勢,因此從那時候開始,部分業務團隊開始嘗試新的流式計算引擎。 由於有贊離線計算有大量 Spark 任務的使用經驗,Spark Streaming 很天然的成爲了第一選擇,隨着前期業務日誌系統和埋點日誌系統的實時應用的接入,大量業務方也開始逐漸接入。 同 Storm 同樣,業務方完成實時計算應任務開發後,經過一組 AG 服務器,使用 Spark 客戶端,向大數據 Yarn 集羣提交任務。 分佈式
初步階段持續的時間比較長,差很少在2017年年底,有贊實時計算的部署狀況以下圖所示:工具
這種架構在業務量少的狀況下問題不大,可是隨着應用方任務數目的增長,暴露出一些運維上的問題,主要在如下幾個方面:性能
總的來講就是缺乏一個統一的實時計算平臺,來管理實時計算的方方面面。測試
接上一節,面對上面提到的這四個問題,對實時計算平臺的初步需求以下:大數據
因此在18年初,咱們立項開始作實時平臺第一期,做爲嘗試起初咱們僅僅完成對 Spark Streaming 實時計算任務的支持, 並在較短期內完成了全部 Spark Streaming 任務的遷移。 試運行2個月後,明顯感受到對業務的掌控力變強。隨後便開始了對 Storm 任務的支持,並遷移了全部的 Storm 實時計算任務. AG 服務器所有下線,業務方不再須要登陸服務器作任務提交。
2018 年中,有贊線上運行着 Storm,Spark Streaming 兩種計算引擎的實時任務,能夠知足大部分業務需求,可是,兩種引擎自己也各自存在着問題。 Storm自己存在着吞吐能力的限制。和 Spark Streaming 對比,選擇彷佛更難一些。咱們主要從如下幾個角度考慮:
出於以上幾點緣由,有贊開始在實時平臺中增長了對 Flink 引擎的支持,選擇 Flink 的更具體的緣由能夠參考咱們另外一篇博客文章-《Flink 在有贊實時計算的實踐》
在完成 Flink 引擎的集成後,有贊實時計算的部署狀況以下圖所示:
以上完成以後,基本上就能夠提供穩定/可靠的實時計算服務;隨之,業務方開發效率的問題開始顯得突出。用戶通常的接入流程包含如下幾個步驟:
整個算下來,整個流程至少須要2~3天,實時應用接入效率逐漸成了眼前最棘手的問題。 對於這個問題。在作了不少調研工做後,最終肯定了兩個實時計算的方向:
實時任務 SQL 化能夠大大簡化業務的開發成本,縮短實時任務的上線週期。 在有贊,實時任務 SQL化 基於 Flink 引擎,目前正在構建中,咱們目前的規劃是首先完成對如下功能的支持:
目前SQL化實時任務的支持工做正在進行中。
經過對業務的觀察,咱們發如今業務的實時應用中,有大量的需求是統計在不一樣維度下的 uv,pv 類統計,模式相對固定,對於此類需求,咱們把目光放在了支持數據實時更新,而且支持實時的Olap類查詢上的存儲引擎上。
咱們主要調研了 Kudu,Druid 兩個技術棧,前者是 C++ 實現,分佈式列式存儲引擎,能夠高效的作 Olap 類查詢,支持明細數據查詢;後者是 Java 實現的事件類數據的預聚合 Olap 類查詢引擎~
綜合考慮了運維成本,與當前技術棧的融合,查詢性能,支持場景後,最終選擇了 Druid,關於 Druid 在有讚的實踐,能夠參考咱們另外一篇博客文章-《Druid在有讚的實踐》。
目前實時計算在有讚的總體技術架構以下圖:
首先要落地並的是實時任務SQL化,提升SQL化任務能夠覆蓋的業務場景(目標是70%),從而經過提升業務開發效率的角度賦能業務。
在SQL化實時任務初步完成後,流數據的複用變成了提升效率上 ROI 最高的措施,初步計劃會着手開始實時數倉的建設,對於實時數倉的初步設計以下圖:
固然,完整的實時數倉絕沒有這麼簡單,不僅是實時計算相關的基礎設施要達到必定的平臺化水平,還依賴實時元數據管理,實時數據質量管理等配套的組件建設,路漫漫其修遠~
有贊實時計算在業務方的需求下推進前進,在不一樣的階段下,技術方向始終朝着當前投入產出比最高的方向在不斷調整。本文並無深刻技術細節,而是循着時間線描述了實時計算在有讚的發展歷程,有些地方由於做者認知有限,不免紕漏,歡迎各位同行指出。
最後打個小廣告,有贊大數據團隊基礎設施團隊,主要負責有讚的數據平臺(DP), 實時計算(Storm, Spark Streaming, Flink),離線計算(HDFS,YARN,HIVE, SPARK SQL),在線存儲(HBase),實時 OLAP(Druid) 等數個技術產品,歡迎感興趣的小夥伴聯繫 hefei@youzan.com