1. 程式人生 > >克拉克拉(KilaKila):大規模實時計算平臺架構實戰

克拉克拉(KilaKila):大規模實時計算平臺架構實戰

克拉克拉(KilaKila):大規模實時計算平臺架構實戰

一、產品背景:
克拉克拉(KilaKila)是國內專注二次元、主打年輕使用者的娛樂互動內容社群軟體。KilaKila推出互動語音直播、短視訊配音、對話小說等功能,滿足當下年輕使用者個性化、碎片化的文娛需求。App使用者等級體系作為克拉克拉社群化打造的核心業務,在增強社群活躍度、提高產品留存方面起到至關重要的作用。隨著業務規模增長,海量使用者行為日誌實時採集與計算的瓶頸也日益突出,由於單臺伺服器的處理能力有限,海量資料分析需要分散式計算模型來替代。通過技術調研與架構選型,最終解決方案採用基於阿里雲日誌服務(Log Service)與 開源技術Storm為組合的基礎架構。

二、實時日誌採集:
LogHub 支援客戶端、網頁、協議、SDK/API等多種日誌無損採集方式,所有采集方式均基於Restful API實現,除此之外也可以通過API/SDK實現新的採集方式。對於克拉克拉來說,業務日誌會實時輸出到本地伺服器,通過在日誌伺服器部署Logtail,即可完成日誌的無丟失採集。因業務場景不同,對日誌可以根據不同的Topic進行分類,從而滿足不同業務的個性化計算需求。此外,LogHup可通過配置自帶的投遞服務,將海量日誌同步到資料倉庫中永久儲存。

_1

圖一:日誌採集流程圖

通過Logtail來採集Nginx上使用者行為的日誌到Logstore只需要簡單配置相應日誌所在的機器組和日誌的絕對路徑,其從日誌落盤伺服器到採集工作的完成控制在1秒內。同時Logstore支援多功能的日誌檢索服務,可以為後續明確使用者行為提供快捷的查詢服務。其中我們將不同topic的日誌儲存在不同的Logstore中,供後續不同業務有針對性的實時消費。

_2

圖二:克拉克拉topic日誌結構圖

_3

圖三:日誌檢索

三、實時業務場景:
為滿足克拉克拉使用者社群目標,該業務主要針對APP使用者在直播、小說、視訊三大業務線100多種行為場景下完成使用者經驗值的實時計算,也就是資料值的增刪改查。在實時計算層,克拉克拉選擇了Storm開源的分散式實時大資料處理框架,而阿里雲日誌服務對於Storm有著非常好的相容與支援。
_4

圖四:克拉克拉實時計算框架

_5

圖五: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服務端。

四、實時資料儲存
克拉克拉實時計算框架中存在諸多資料快取、永久儲存等場景需求。面對該問題,克拉克拉採用了阿里雲OTS元件方案。OTS也稱為表格儲存(Table Store)是阿里雲自研的NoSQL多模型資料庫,提供海量結構化資料儲存以及快速的查詢和分析服務。表格儲存的分散式儲存和強大的索引引擎能夠提供PB級儲存、千萬TPS以及毫秒級延遲的服務能力。通過使用OTS所提供的Java SDK開發包實現了Storm計算過程中所涉及到的資料儲存需求。

_6

圖六:克拉克拉OTS儲存示例


五、專案總結
該專案以實時性和資料的精確度作為評判指標,所面臨的挑戰主要是使用者行為的高併發,平均每秒百萬級別的使用者計算量;而針對不同的Logstore的日誌處理量將會達到使用者計算量的十倍左右。通過基於阿里雲日誌服務、OTS表格儲存元件所搭建的克拉克拉實時計算平臺綜合能力表現良好,符合產品業務預期。
六、未來展望
以Storm為計算中心的框架雖可滿足克拉克拉業務訴求,但相關專案研發效率還可進一步提升。對此,後續將重點調研阿里雲另一個高效實時計算元件Blink。Blink 是阿里雲實時計算方案,基於開源的Apache Flink。 該技術方案的最大亮點是通過SQL指令碼語言來代替現有Java語言所開發的計算邏輯。從研發效率上來講,SQL指令碼更容易上手且運維成本更低,相信到時公司整體實時計算框架的效能將會得到顯著的提升。