1、產品背景:
克拉克拉(KilaKila)是國內專一二次元、主打年輕用戶的娛樂互動內容社區軟件。KilaKila推出互動語音直播、短視頻配音、對話小說等功能,知足當下年輕用戶個性化、碎片化的文娛需求。App用戶等級體系做爲克拉克拉社區化打造的核心業務,在加強社區活躍度、提升產品留存方面起到相當重要的做用。隨着業務規模增加,海量用戶行爲日誌實時採集與計算的瓶頸也日益突出,因爲單臺服務器的處理能力有限,海量數據分析須要分佈式計算模型來替代。經過技術調研與架構選型,最終解決方案採用基於阿里雲日誌服務(Log Service)與 開源技術Storm爲組合的基礎架構。數據庫
2、實時日誌採集:
LogHub 支持客戶端、網頁、協議、SDK/API等多種日誌無損採集方式,全部採集方式均基於Restful API實現,除此以外也能夠經過API/SDK實現新的採集方式。對於克拉克拉來講,業務日誌會實時輸出到本地服務器,經過在日誌服務器部署Logtail,便可完成日誌的無丟失採集。因業務場景不一樣,對日誌能夠根據不一樣的Topic進行分類,從而知足不一樣業務的個性化計算需求。此外,LogHup可經過配置自帶的投遞服務,將海量日誌同步到數據倉庫中永久存儲。緩存
圖一:日誌採集流程圖服務器
經過Logtail來採集Nginx上用戶行爲的日誌到Logstore只須要簡單配置相應日誌所在的機器組和日誌的絕對路徑,其從日誌落盤服務器到採集工做的完成控制在1秒內。同時Logstore支持多功能的日誌檢索服務,能夠爲後續明確用戶行爲提供快捷的查詢服務。其中咱們將不一樣topic的日誌存儲在不一樣的Logstore中,供後續不一樣業務有針對性的實時消費。架構
圖二:克拉克拉topic日誌結構圖併發
圖三:日誌檢索負載均衡
3、實時業務場景:
爲知足克拉克拉用戶社區目標,該業務主要針對APP用戶在直播、小說、視頻三大業務線100多種行爲場景下完成用戶經驗值的實時計算,也就是數據值的增刪改查。在實時計算層,克拉克拉選擇了Storm開源的分佈式實時大數據處理框架,而阿里雲日誌服務對於Storm有着很是好的兼容與支持。
框架
圖四:克拉克拉實時計算框架運維
圖五:LogHup 與 Storm關係分佈式
上圖中紅色虛線框中就是LogHub Storm Spout,每一個Storm Topology會有一組Spout,同組內的Spout共同負責讀取Logstore中所有數據。不一樣Topology中的Spout相互不干擾。每一個Topology須要選擇惟一的LogHub Consume Group名字來相互標識,同一 Topology內的Spout經過 Consumer Library來完成負載均衡和自動failover。Spout從LogHub中實時讀取數據以後,發送至Topology中的Bolt節點,按期保存消費完成位置做爲checkpoint到LogHub服務端。高併發
4、實時數據存儲
克拉克拉實時計算框架中存在諸多數據緩存、永久存儲等場景需求。面對該問題,克拉克拉採用了阿里雲OTS組件方案。OTS也稱爲表格存儲(Table Store)是阿里雲自研的NoSQL多模型數據庫,提供海量結構化數據存儲以及快速的查詢和分析服務。表格存儲的分佈式存儲和強大的索引引擎可以提供PB級存儲、千萬TPS以及毫秒級延遲的服務能力。經過使用OTS所提供的Java SDK開發包實現了Storm計算過程當中所涉及到的數據存儲需求。
圖六:克拉克拉OTS存儲示例
5、項目總結 該項目以實時性和數據的精確度做爲評判指標,所面臨的挑戰主要是用戶行爲的高併發,平均每秒百萬級別的用戶計算量;而針對不一樣的Logstore的日誌處理量將會達到用戶計算量的十倍左右。經過基於阿里雲日誌服務、OTS表格存儲組件所搭建的克拉克拉實時計算平臺綜合能力表現良好,符合產品業務預期。 6、將來展望 以Storm爲計算中心的框架雖可知足克拉克拉業務訴求,但相關項目研發效率還可進一步提高。對此,後續將重點調研阿里雲另外一個高效實時計算組件Blink。Blink 是阿里雲實時計算方案,基於開源的Apache Flink。 該技術方案的最大亮點是經過SQL腳本語言來代替現有Java語言所開發的計算邏輯。從研發效率上來說,SQL腳本更容易上手且運維成本更低,相信到時公司總體實時計算框架的性能將會獲得顯著的提高。