大數據

揭祕友盟+全域數據統計分析平臺技術架構演進

截止到2019年6月,友盟+已累計為180萬移動應用和815萬家網站提供10年的專業穩定數據服務;當前友盟+每天接收日誌量達萬億級別,實現每秒處理2億次事件的能力,相當於每眨眼一次,就有2億數據被刷新了!友盟+數據存量高達50PB,相當於A4紙正反面寫滿數字並裝滿15萬輛卡車;且還在持續快速增漲,如何搭建一個高可用、高安全、高性能、高穩定的友盟+全域數據統計分析數據平臺架構,成為友盟+技術人首先需要考慮的問題。

把時間軸拉回到2016年初,當時友盟+的業務處於快速成長期,友盟+的數據統計分析服務都搭建在一系列的開源軟件之上,業務前端是Nginx採集層,後端離線計算是的Hadoop集群,後端實時計算是用的Storm集群;而當業務快速增長,用戶各類個性化統計需求層出不窮,之前開源集群上一些小bug會被放大,導致業務出現波動,穩定性無法保障,而且在使用場景上也無法根據自己業務特點來進行調整。為保障平臺業務穩定性,滿足用戶在統計方面提出的各種新的統計需求,在2016年中旬我們制定了把友盟+全域數據統計分析平臺升級計劃:

友盟+新統計分析數據平臺簡述

友盟+數據平臺技術架構主要包含數據採集&接入、數據清洗&傳輸、數據建模&存儲、計算&分析、查詢&可視化,其SaaS服務部分基本架構參考下圖。
image001.jpg
image002.png

這是一個非常概要的架構圖,這個架構被稱為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控制,灰度時常控制,應急策略控制等等來進一步增加業務的穩定性。

當前友盟+新的統計分析平臺已支持多樣性的數據採集、個性化的自定義分析、可實現精細化運營分析;同時提供可視化埋碼能力,降低用戶使用門檻;擴展多平臺的數據採集能力,協助用戶打通多域數據,完善數據化運營的閉環。

Leave a Reply

Your email address will not be published. Required fields are marked *