截止到2019年6月,友盟+已累計為180萬移動應用和815萬家網站提供10年的專業穩定資料服務;目前友盟+每天接收日志量達萬億級别,實作每秒處理2億次事件的能力,相當于每眨眼一次,就有2億資料被重新整理了!友盟+資料存量高達50PB,相當于A4紙正反面寫滿數字并裝滿15萬輛卡車;且還在持續快速增漲,如何搭建一個高可用、高安全、高性能、高穩定的友盟+全域資料統計分析資料平台架構,成為友盟+技術人首先需要考慮的問題。
把時間軸拉回到2016年初,當時友盟+的業務處于快速成長期,友盟+的資料統計分析服務都搭建在一系列的開源軟體之上,業務前端是Nginx采集層,後端離線計算是的Hadoop叢集,後端實時計算是用的Storm叢集;而當業務快速增長,使用者各類個性化統計需求層出不窮,之前開源叢集上一些小bug會被放大,導緻業務出現波動,穩定性無法保障,而且在使用場景上也無法根據自己業務特點來進行調整。為保障平台業務穩定性,滿足使用者在統計方面提出的各種新的統計需求,在2016年中旬我們制定了把友盟+全域資料統計分析平台更新計劃:
友盟+新統計分析資料平台簡述
友盟+資料平台技術架構主要包含資料采集&接入、資料清洗&傳輸、資料模組化&存儲、計算&分析、查詢&可視化,其SaaS服務部分基本架構參考下圖。

這是一個非常概要的架構圖,這個架構被稱為lambda+架構。盡管近幾年有一些新的架構提法,比如Kappa之類,但lambda仍然是經典架構。友盟+統計分析産品無論是移動分析U-App還是網站分析U-Web,都為使用者預置了功能豐富的報表,這些報表是在多年服務客戶的過程中積累的需求。對于預定義報表,lambda架構進行預計算非常适合,客戶隻需要內建基本的SDK,就能得到這些豐富的報表。因為結果都是預計算好的,直接查詢結果,報表響應很快。
那為什麼叫lambda+架構呢,加的部分主要是指adhoc分析,adhoc分析對資料化營運真正進行了賦能。友盟+新的統計分析服務允許客戶進行adhoc細分、漏鬥、留存、分群等,并對一些正常的分析則可以設定為例行計算。但adhoc分析從時效上可以有兩種服務,一種是慢分析,一種是互動式分析。前者能提供精确的全量分析,後者側重分析探索效率,這種分級方式是我們對成本和效率的折中。
在友盟+新的統計分析平台中,最主要的能力集中于海量資料的實時計算能力和離線計算能力和互動式分析能力,以及這些能力提供出來的資料分析能力。
友盟+實時計算使用blink(flink),blink功能非常完整,有高效狀态存儲及checkpoint機制,支援資料幂等計算。實際上友盟+實時計算引擎進行數次更換(storm->galaxy->blink),以後還可能再換或引入别的引擎(比如私有化),是以我們開發了一套與引擎無關的實時計算架構,該架構整體上分為兩層:core層和适配層。core層定義了一些基本的對象、接口、算子,以及一些通用的輔助對象和業務flow。這些基本對象、接口、業務flow與前面提到的lambda通用計算架構是一緻的。适配層的目的是适配不同的計算引擎,比如blink、beam、spark streaming,這一層實作較薄,其關注點不再是業務邏輯,而是如何選擇作業參數、如何配置資源、是否做作業拆分這些問題。
實時計算的挑戰主要有以下這些:
· 資料傾斜問題:個别客戶資料量巨大,使用者數巨多,站點及應用級别的統計資料傾斜十分嚴重;某些統計粒度太小(比如按受訪頁面或來路頁面),對細粒度統計進行排序甩尾的節點壓力會比較大。資料傾斜的普通解法是通過資料加salt打散局部聚合再彙總的方式,但這種方式需要多加一個處理層,資源消耗較大。我們采取的方式将實時計算變為小批量,然後在map層進行local reduce(類似于hadoop map層的local combine)。這種簡單處理系統性地既解決了資料傾斜的問題,又減少了聚合計算map層和reduce層傳輸的資料量,提升了性能。
· 巨量groupby key和狀态存儲:以web統計為例,需要對來路頁面、受訪頁面級别進行pv、uv統計。個别大客戶單天key的數量就超過2億,總key的數量是百億級。解決辦法包括:短key替換長key、長尾key過濾、自動采樣還原等。
· 高tps輸出:以web統計為例,因為幾乎所有名額都進行實時計算,高峰期每秒更新的統計結果超過300W。我們一方面通過異步buffer重新整理方式犧牲一定時效性(秒級延時->分鐘級延時),降低實際資料輸出tps;另一方面沒有使用通常的hbase等系統存儲實時計算結果,而是使用自研的一套系統,該系統不但支援很高的刷寫性能,而且還支援不同列的topN索引功能。
· distinct計算優化。我們的優化手段:再etl階段打标,将count distinct轉化為count,比如新增使用者首次出現時增加一個新增标記;使用自适應基數估計算子(比如hyperloglog),當基數低于一定門檻值時使用set,超過後自動轉為基數估計資料結構,還可以進一步結合bitmap壓縮算法;基于bloomfilter将count distinct轉換為count。
在友盟+新的統計分析平台中,離線計算與實時計算類似,其實作方式與前面提到的lambda通用計算架構一緻,單個作業即支援不同使用者不同的計算需求。與實時計算的差别在于distinct計算不需要使用基數估計,更加精确。
離線計算使用阿裡雲MaxCompute,例行計算使用MaxCompute的SQL+UDX通過類似Apache Tez的DAG計算完成工作,對速度要求較高的adhoc分析使用MaxCompute內建的Spark進行計算。
在友盟+新的統計分析平台中互動式分析使用的是俄羅斯Yandex開源的Clickhouse。Clickhouse不是一個通用型分析資料庫,但針對基于明細資料的多元分析做了深度優化,在成本和性能上表現很好,同時支援資料的準實時寫入。Clickhouse除了一般多元分析,内置算子也十分豐富,同時允許使用者自定義聚合函數做複雜行為分析。Clickhouse的存儲設計同樣遵循我們前面讨論的一些原則。Clickhouse對純的基于Event的分析支援很好,但如果引入User表進行交叉分析則不是很友善,是以我們也在深入研究Event + User 模型,嘗試為其設計開發特定的存儲引擎。
新的統計分析平台中資料分析系統主要解決産品研發及營運效率問題,比如通過精準推廣降低拉新、留活成本,比如基于資料(a/b test)優化産品流程減少試錯成本、加快疊代速度。分析的主要資料基礎就是使用者對産品功能、推廣活動等的行為回報,這些資料本質上是營運樣本資料。通過這些樣本資料做一些假設,指導營運活動和産品設計。
廣義的使用者行為分析包括使用者自定義分群、留存分析、漏鬥分析、流失分析、路徑分析等等。目的是根據使用者的曆史行為以及使用者profile資訊,了解不同人群的特征,進而差異化的進行營運,以滿足更精準的營銷。其中曆史行為是基于時間的縱向資訊,該資訊往往有時效性,也即越靠近分析時間點,越有價值。但并不是說舊的曆史行為就完全沒有價值,很久以前發生的行為雖然單個事件價值低(且直接使用成本也比較高),但通過資料挖掘可沉澱出使用者标簽,将具體行為變為抽象描述。相對于使用者曆史行為,使用者profile是橫向資訊,其中有一些屬性是完全靜态的,比如性别;另外一些會保持穩定一段時間,比如标簽;還有一些是adhoc即時生成(比如臨時根據某種條件篩選一個使用者分組)。
使用者行為分析的基本計算過程是:過濾、分組、按人建立事件行為拉鍊、時間序列算法(不同的分析目标有不同的時間序列算法)、彙總統計。【友盟+】對常用使用者行為分析模型進行了統一的計算抽象。使用者隻需要在頁面配置相關參數,即可通過資料平台提供的标準計算作業完成分析。使用者行為分析也支援例行、adhoc(單次)兩種執行方式。其中adhoc支援離線和互動式分析兩種,但需要在資料量和計算時效上折中,也即:對較短時間内資料(比如一個月)提供即席分析,而對更大時間跨度或更老的資料進行分析,使用離線的adhoc分析。離線分析使用MaxCompute SQL或者SPARK。
同時為保證友盟+新的統計分析平台的安全和合規,我們在安全方面實施了一系列部署(全站https、網絡層ddos攻防演練和政策實施),來提升安全性,保障業務穩定性。
友盟+獲得了ISO/IEC 27001:2013 資訊安全管理體系認證、ISO/IEC 27018:2019 公有雲個人資訊保護管理體系認證,成為國内首批獲得此高标準公有雲個人資訊保護證書的大資料服務商。友盟+同時擁有公安部頒發的資訊系統安全三級等保證書。
為保障友盟+新的統計分析平台整體的穩定性和高效性,在效能方面,我們統一了開發語言,提高了代碼的可維護性;建立了統一的采集平台,把原來多業務的多套采集服務歸一化,在提供代碼可維護性的同時,也把原來多個小的資源池轉變為一個大的資源池,增加了業務異常增量的可控性,保證了業務的穩定性,同時推動業務無狀态和容器化,目前95%的應用已完成無狀态改造,并跑在容器上,通過平台的快速擴容能力,可以應對90%的客戶業務量突增情況。
在穩定性方面,友盟+開始規劃和部署采集服務雙機房異常部署,同時參加機房容災演練,從架構上保證業務穩定性;同時在接入層推動對IPv6的支援,保障各種網絡場景下采集資料的完整性;在業務層,我們推行核心業務穩定性分政策,通過釋出控制,代碼強制review控制,灰階時常控制,應急政策控制等等來進一步增加業務的穩定性。
目前友盟+新的統計分析平台已支援多樣性的資料采集、個性化的自定義分析、可實作精細化營運分析;同時提供可視化埋碼能力,降低使用者使用門檻;擴充多平台的資料采集能力,協助使用者打通多域資料,完善資料化營運的閉環。