支付寶客戶端架構分析:自動化日誌收集及分析

螞蟻金服科技發表於2018-12-17

前言

《支付寶客戶端架構解析》系列將從支付寶客戶端的架構設計方案入手,細分拆解客戶端在“容器化框架設計”、“網路優化”、“效能啟動優化”、“自動化日誌收集”、“RPC 元件設計”、“移動應用監控、診斷、定位”等具體實現,帶領大家進一步瞭解支付寶在客戶端架構上的迭代與優化歷程。

本節將結合禾兮在 OSChina 珠海站現場的分享《移動端分析方案在螞蟻金服 mPaaS 中的實踐》,介紹支付寶客戶端自動化日誌收集與分析的具體思路。內容將分成三個部分展開:

  • 支付寶客戶端分析方案的探索;
  • MAS 移動分析框架淺析;
  • mPaaS 技術架構與助力。

支付寶客戶端分析方案的探索

正如我們在《開篇 | 模組化與解耦式開發在螞蟻金服 mPaaS 深度實踐探討》已經對支付寶的架構演變與開發團隊規模發展做過介紹:

截止目前,在研發上面,支付寶僅 Android、iOS 客戶端開發人員近千人,客戶端程式碼行數超過了數百萬行,按業務劃分的工程數也已近千個,每個工程都有獨立的開發 owner 負責某一個具體的模組。雖然工程師團隊及工程量越發龐大,支付寶依舊能夠做到日釋出的頻率以確保業務快速迭代,同時在業務功能日益複雜的環境,保證 App 閃退率僅 0.01%。

支付寶客戶端架構分析:自動化日誌收集及分析

那麼,在如此大體量的使用者規模和研發團隊下,支付寶又是如何確保使用者使用過程中的使用者體驗呢?我們主要從以下兩個維度衡量客戶端使用者體驗:

  • 靜態:指應用開發過程中,關注 App 本身的安裝包大小、儲存、涉及到的使用者隱私許可權、安全策略等,決定使用者是否願意安裝並使用你的應用

  • 動態:指應用釋出上線後,使用者在使用過程中,App 的啟動速度,閃退、卡死卡頓等穩定性資料,網路請求,記憶體以及電量流量等使用者實際的使用感受

    支付寶客戶端架構分析:自動化日誌收集及分析
    啟動應用是使用者使用任何一款應用最必不可少的操作,從點選 App 圖示到首頁展示,整個啟動過程的效能,嚴重影響著使用者的體驗,支付寶客戶端作為一個超級 App,啟動速度當然是我們關注的重要指標之一。支付寶對於應用啟動過程中的優化,主要分為以下三個方面:

  • 框架治理

    • 梳理啟動流程並重構,遵守啟動過程中按需載入原則
    • 引用 Pipeline 機制,根據業務優先順序規定業務初始化時機
    • 制定統一的開發規範,儘量降低業務方流程對啟動效能的影響
  • 業務治理

    • 按需載入,延時執行
    • 執行緒治理:統一管理已有執行緒,並調整執行緒優先順序
    • I/O 治理:關注主執行緒 I/O,優化合並頻繁讀寫的 I/O 操作,儘量使用統一儲存
  • 技術突破

    • 防止啟動過程中的 UI 重刷操作
    • 虛擬機器優化,包括 JIT 關閉,降低 GC 次數
    • 基礎模組調優,分析主執行緒耗時操作並優化

另外,使用者使用過程中 App 的記憶體、儲存、電量及流量等消耗,也是重要的衡量指標。具體的優化點如下:

  • 記憶體
    • 記憶體分析:memtrace hprof 線下記憶體分析,遍歷物件,根據生命週期標記記憶體洩露,同時根據 object 建立引用確定業務歸屬
    • Native 記憶體:影象庫切換到 native 層,4.x bitmap 畫素資料放到 ashme 共享記憶體,降低 GC
    • 記憶體優化:物件池複用,減小 bitmap 對記憶體佔用,使用更小的圖,尤其注意三方 H5 頁面
  • 儲存
    • 儲存分析:檢視應用儲存大小
    • 儲存優化:使用共享庫,業務定向優化,壓縮儲存等
  • 流量
    • 耗流量原因:分析各種網路請求
    • 流量異常捕獲:hook 所有網路請求,根據host聚合流量,超過閾值確定異常
    • 流量優化:PC 底層協議優化,資源增量按需下載,同時通過切面資訊呼叫方
  • 電量
    • 耗電原因:監控 CPU 使用率,各種 sensor、gps、weaklock、網路連線等耗電操作
    • 耗電異常捕獲:遍歷執行緒,獲取所有執行緒執行時間,與主執行緒比較確定異常
    • 耗電優化:高效能 dump 執行緒棧優化,通過執行緒對映呼叫方,評估呼叫邏輯進行優化

支付寶客戶端架構分析:自動化日誌收集及分析

針對以上每個優化點,支付寶都投入了大量精力進行研究和實踐,啟動速度優化的詳細內容可以查閱文件《支付寶客戶端架構解析:iOS 客戶端啟動效能優化初探》《支付寶客戶端架構解析:Android 客戶端啟動速度優化之「垃圾回收」》,其他優化點請持續關注“客戶端架構解析”系列文章。

基於這些對使用者體驗優化的內容,支付寶構建了一套完整的超級 App 線上運維體系,實時監控線上 App 發生的異常問題,針對這些問題,以最快的時間定位問題原因並找到對應的解決方案,最後通過動態熱修復的技術及時修復線上問題,最終形成一個線上質量保障的閉環,保障應用執行的穩定性。

支付寶客戶端架構分析:自動化日誌收集及分析

MAS 移動分析框架淺析

接下來,詳細介紹超級 App 運維體系中的移動監控框架具體是如何實現的。 移動分析 MAS(Mobile Analysis Service)通過對移動客戶端、H5、小程式、PC等多端埋點資料的採集與分析,實現產品核心指標監控,提供頁面、裝置、留存、效能等基礎分析,並支援自定義事件分析、漏斗分析等高階分析,幫助企業更好地完成業務監控、使用者洞察與行為分析,指導產品迭代,精細化產品運營,輔助營銷決策,加速業務商業化。主要分為以下四個階段:

支付寶客戶端架構分析:自動化日誌收集及分析

整個移動分析的完整鏈路從左往右看,就是客戶端通過呼叫埋點 SDK的介面進行資料埋點,埋點 SDK 對日誌進行格式化後,先寫入客戶端本地檔案,滿足日誌上報觸發條件後,將本地日誌上報到日誌伺服器並清理本地日誌檔案以減少儲存大小;日誌伺服器接收到客戶端上報的日誌後同步到計算平臺,經過離線計算和實時計算後,將結果進行展示,用來監控、分析、搜尋、推薦等。

結合上圖,接下來從移動分析框架的四個階段,詳細介紹資料分析的整個鏈路邏輯。

1. 資料採集

根據採集資料時機、應用場景,最終用途的不同,我們把客戶端採集的資料分為了以下幾類。其中結合 mPaaS 模組化開發框架,報活埋點、押後臺埋點、頁面自動化埋點、效能埋點及 H5 埋點,由客戶端 SDK 自動採集,無需開發者手動呼叫介面實現,開發者只需要關注自己的業務邏輯,在需要監控的邏輯除埋點統計。

支付寶客戶端架構分析:自動化日誌收集及分析

為了降低頻繁上報日誌對應用效能的影響,客戶端採集到資料後,會預先儲存在應用本地,通過以下三種方式同步到日誌伺服器

  • 自動上報:滿足一定條件後自動上報
    • 程式每次冷啟動都會觸發檢查日誌上報的邏輯。
    • 程式進入後臺會立即觸發上報。
    • 寫日誌時,某種型別的日誌預設到達 40 條就觸發上報。
  • 實時監控:對於比較重要的客戶端日誌,如異常、應用閃退日誌等,可實時上報,產生一條上報一條,便於後臺實時監控。
  • 動態控制:在自動上報的基礎上,通過服務端下發的開關值,修改客戶端日誌寫入和日誌上報觸發的條件。如在大流量併發的情況下,為減少日誌伺服器的壓力,控制客戶端只寫入並上報異常或閃退日誌,忽略行為日誌的統計。

2. 資料計算

上報到日誌伺服器的日誌,會同步到計算平臺進行計算,後臺主要包含以下幾個系統:

  • mdap:日誌採集閘道器,負責收集客戶端埋點日誌,收到日誌後,直接傳輸至 JStorm 叢集進行計算。
  • JStorm:實時計算引擎,根據處理規則對日誌進行實時解析並將需要的資料儲存入庫。
  • SSDB: kv 資料儲存層,底層使用 leveldb,支援單表十億級記錄。
  • ZooKeeper:叢集管理、元件間服務發現。

支付寶客戶端架構分析:自動化日誌收集及分析

3. 資料應用

計算平臺計算出來的結果,可以為使用者提供使用者分析、事件分析、行為、效能等資料分析服務。

  • 基礎分析: 關注於 App 的通用分析,包括每日登入使用者、新增使用者、使用時長、使用者留存、頁面分析、訪問路徑等基礎分析。
  • 高階分析: 用於 App 專注業務的特定分析需求,提供一種靈活的多維分析能力;提供熱修復報告,幫助您瞭解 RPC、修復、回滾相關資訊等。
  • 效能分析: 提供閃退、卡死、卡頓的統計功能。當客戶端發生效能問題後,移動分析服務提供實時檢視效能分析的統計資料。
  • 日誌管理: 支援按關鍵字實時搜尋查詢日誌,或通過服務端開關實時控制客戶端日誌上報邏輯。

支付寶客戶端架構分析:自動化日誌收集及分析

4. 資料決策

在上一步資料應用的基礎上,可以與大資料、營銷平臺及推送平臺結合,根據移動分析得到的埋點資料,通過大資料平臺進行打標、圈人、使用者畫像及建模後,可以在營銷平臺上發起一次營銷活動,指定活動的型別,活動演算法,參與人群及活動獎品,通過訊息推送、資料同步,動態釋出等形式,觸達到客戶端,實現客戶端拉新促活、活動推廣及操作引導的目的。同時結合運營活動的場景需求,形成了一套完整的數字化運營體系,監控一次運營活動的參與人數、活動發放率、核銷率等,觀察活動的有效性。

支付寶客戶端架構分析:自動化日誌收集及分析

mPaaS 技術架構與助力

上面介紹的支付寶內移動端分析方案的技術積累和架構實踐,已經通過 mPaaS 移動開發平臺作為螞蟻金服金融科技的一部分對外開放。

支付寶客戶端架構分析:自動化日誌收集及分析

在 mPaaS 移動開放平臺上,我們將移動分析框架中的本地日誌、埋點、自動化埋點、效能監控、Crash報告、診斷日誌等模組,作為一個個獨立的元件來進行輸出。任何一個 App 都可以通過 mPaaS 外掛,新增對應的元件,在當前應用中整合這些功能,只需要這樣簡單的操作,就可以讓你的應用具有和支付寶一樣強大的移動端分析監控能力。

支付寶客戶端架構分析:自動化日誌收集及分析

客戶端整合了這些移動分析相關的元件後,使用者在使用 App 過程中會產生相應的日誌,經過資料採集、資料上報、資料計算等處理後,計算的結果會同步到 mPaaS 移動分析的大盤上展示,包括應用的基礎應用概況、效能穩定資料、流量走向等等,方便開發者實時監控 App 的概況大盤和穩定性等,實時發現線上問題並修復。

支付寶客戶端架構分析:自動化日誌收集及分析

支付寶客戶端架構分析:自動化日誌收集及分析

目前,mPaaS 移動開發平臺已經服務了眾多企業,包括螞蟻金服內部的香港支付寶、網商銀行、口碑商家等,同時還有大量的外部螞蟻生態合作伙伴,包括12306、上海地鐵、廣州地鐵、廣發銀行等。秉承著「給世界帶來小而美的變化」的理念,我們通過 mPaaS 幫助 12306 這樣的國民級 App 重構了客戶端,使得大家可以用上一個好的體驗的 App 進行出行購票,用 mPaaS 這樣成熟的底層框架搭建一個 12306 僅需要 2-3 個月的時間。 除了 12306 還有支付寶香港版廣發銀行手機銀行發現精彩多個客戶端,同樣在短短几個月的時間內便完成了業務重構。

往期閱讀

《開篇 | 模組化與解耦式開發在螞蟻金服 mPaaS 深度實踐探討》

《支付寶移動端動態化方案實踐》

《支付寶客戶端架構解析:iOS 容器化框架初探》

《支付寶客戶端架構解析:Android 容器化框架初探》

《支付寶客戶端架構解析:Android 客戶端啟動速度優化之「垃圾回收」》

《Demo Show | 螞蟻金服 mPaaS IDEA 外掛實踐》

關注我們公眾號,獲得第一手 mPaaS 技術實踐乾貨

QRCode


號外!問卷調研

填寫你對移動開發的具體需求和痛點吧,幫助我們進一步優化 mPaaS 的能力!

即日起截止 11.30 晚 18:00,填寫提交 mPaaS 開發者調研問卷,即有機會獲取限量版螞蟻 U 型枕 1 個。 我們將在掘金平臺完成問卷填寫的使用者中抽取 5 位,贈送螞蟻公仔限量版 U 型枕

支付寶客戶端架構分析:自動化日誌收集及分析

相關文章