如何打造100億SDK累計覆蓋量的大數據系統

做爲推送行業領導者,截止目前個推SDK累計安裝覆蓋量達100億(含海外),接入應用超過43萬,獨立終端覆蓋超過10億 (含海外)。個推系統天天會產生大量的日誌和數據,面臨許多數據處理方面的挑戰。
 
首先數據存儲方面,個推天天產生10TB以上的數據,而且累積數據已在PB級別。其次,做爲推送技術服務商,個推有不少來自客戶和公司各部門的數據分析和統計需求,例如:消息推送和數據報表。雖然部分數據分析工做是離線模式,但開源數據處理系統穩定性並不很高,保障數據分析服務的高可用性也是一個挑戰。另外,推送業務並非單純的消息下發,它需幫助客戶經過數據分析把合適的內容在合適的場景送達給合適的人,這要求系統支持數據挖掘,並保證數據實時性。最後,個推要求快速響應數據分析需求。所以,個推大數據系統面臨着數據存儲、日誌傳輸、日誌分析處理、大量任務調度和管理、數據分析處理服務高可用、海量多維度報表和快速響應分析和取數需求等方面的挑戰。架構

大數據系統演進之路框架

面臨諸多挑戰,個推大數據系統在逐步發展中不斷完善。其發展可分爲三個階段。一是統計報表,即傳統意義的BI;二是大數據系統的基礎建設階段;三是工具、服務和產品化。運維

圖片描述

個推大數據系統演進第一階段:統計報表計算機器學習

圖片描述

早期因爲數據處理無太複雜的需求,個推選擇幾臺高性能的機器,把全部數據分別放在這些機器上計算。只需在機器上多進程運行PHP或Shell腳本便可完成處理和統計。數據處理更多關注客戶今天推送多少條消息,某個推送任務有多少回執等,執行相對較簡單的報表。
 
此階段個推大數據系統的特色是,只需運維定時腳本傳輸到指定中間節點;用戶雖然有億級別但日誌種類較單一;只需使用PHP、Shell腳原本運行和數據只需短時間保存(結果集長期保存、中間數據和原始數據保存很短期)。工具

個推大數據系統演進第二階段:大數據基礎建設,離線批處理系統oop

圖片描述

2014年個推推出智能推送解決方案。用戶體量大的明星App接入,系統覆蓋用戶數爆增。且客戶接入個推系統後,提出了不少新的需求如:報表統計維度更豐富,它要求在數據量翻倍的狀況下進行更復雜的計算,計算壓力增大。其次,智能推送本質是數據深度挖掘,數據保存週期越長,覆蓋維度越多越好。
 
這樣的狀況下,個推引進Hadoop生態體系,用HDFS基本解決存儲的問題,使用Hive作數據倉庫和離線分析,而且使用Mahout作機器學習。個推完成了由單機或多機模式向集羣方向的轉變。整個運轉流程和原來相似,差異在於將日誌傳輸到中轉節點以後,使用hdfs命令put數據到hdfs,並添加hive表分區,而後對日誌作進一步的處理,導入到數據倉儲裏去。最後個推對數據倉庫中數據進行挖掘,給用戶打標籤,入庫到HBase和線上ES等。這是離線批處理系統的基本建設。性能

個推大數據系統演進第二階段:大數據基礎建設,實時處理系統學習

隨着業務不斷髮展,需求也相應增長。如不少統計分析任務提出了要求在T+0的時間內知足,或者客戶上午推送的消息,下午要求給到反映推送效果的數據報表,而不能等到T+1的時間,這些需求都對數據處理實時性提出了更高要求。並且不少客戶會提出要檢索一些數據,或查看某種標籤相關數據,這類取數須要快速響應。因而個推對原有的架構進行了一些調整,引入了一個主要包含離線處理、實時處理和數據服務(包含檢索)的架構模式。大數據

原有的數據存到HDFS,使用Spark,MR等進行離線批處理。引入Kafka來解決日誌收集問題,用Flume收集各個業務節點的日誌,並寫入到Kafka集羣,再依照業務的分級進行小時級別和秒級別處理。最終個推會落地一份數據,將它同步給業務線的DB或ES中使用。
 
基礎建設階段個推完成幾項工做:採用Lambda架構(Batch Layer、Speed Layer、ServingLayer);引入Hadoop(Hdfs、Hive/MR、Hbase、Mahout等);採用ES、SolrCloud+ HBase方案 實現多維度檢索;引入Flume 、Kafka、Camus和優化改造日誌傳輸和引入和優化國產開源的Redis集羣方案-Codis 。優化

個推大數據系統演進第三階段:工具化+服務化+產品化

圖片描述

基礎建設過程當中,個推發現雖有了總體框架,但依然不能比較便捷地響應業務方的需求。因此個推選擇提供工具給業務方,並增長一個服務代理層,也就是上圖紅色部分,把批處理任務等抽象成任務模板,配置到代理層,最終提給業務方調用,他們只要作簡單的二次開發,就可使用個推集羣的計算服務,提升業務開發速度。
 
這個階段,個推在架構上主要完成了如下工做:增長Job調度管理:引入Azkaban和進行改造(變量共享、多集羣支持等);增長服務代理層:引入DataService和Job Proxy(開放給更多產品線使用並解耦);增長應用層:基於服務代理層研發相應的工具和取數產品。

圖片描述

個推大數據系統演進的經驗與總結

第一,探索數據和理解數據是開發前必備工做。數據處理以前須要探索有哪些髒數據,這些髒數據的分佈,以及無效數據和缺省狀況的發現等。

第二,數據存儲方案向分析和計算須要靠攏。能夠考慮使用相似Carbondata等帶有索引的文件格式。

第三,數據標準化是提升後續處理首要手段。絕大部分數據須要標準化後供給後續使用(基本清洗、統一內部ID、增長必備屬性),如對實時性數據,應先作標準化處理後,再發布到Kafka裏,最後供全部其餘實時系統作處理,減小常規清洗和轉化處理在多個業務中重複作,而且統一ID,便於和數據打通。

第四,工具化、服務化、產品化提升總體效率。在開發層面能夠將MR、Spark進行API封裝而且提供足夠的工具包。

第五,大數據系統全鏈路監控很重要。批處理監控主要包括:平常任務運行時間監控、是否出現傾斜、結果集每日曲線、異常數據曲線,GC監控;流式處理監控包括:原數據波動監控、消費速率監控報警、計算節點delay監控等。

相關文章
相關標籤/搜索