mPaaS 服務端核心元件:移動分析服務 MAS 架構解析

螞蟻金服移動開發平臺mPaaS發表於2019-03-07

承接《開篇 | mPaaS 服務端核心元件體系概述》已經介紹移動分析服務 MAS 的主要功能和資料鏈路情況,包括“基礎分析,自定義分析,效能分析,日誌管理”。 本章節,我們將對移動分析服務 MAS 背後的架構能力做進一步的解析。

1. MAS 移動分析核心能力:

  1. 通過實時計算多維資料,全方位展現移動應用的表現力;
  2. 通過離線分析使用者屬性和行為,促進服務產品優化與運營推廣;
  3. 通過自動採集流程日誌,提升排查效率,快速解決研發問題。

由核心能力延伸出來的功能包括:

  1. 使用者行為分析:提供應用使用分析,包括使用者報活、使用者登入、新增使用者等多種指標的統計功能,並支援按照平臺、版本、地域、時間的多維度分析對比,方便使用者更快速、便捷的瞭解自身 App 的使用情況。
  2. 穩定性分析:提供應用穩定性分析,包括閃退監控、異常監控、效能監控及使用者診斷功能,幫助開發人員及時發現、定位問題。
  3. 診斷分析:提供應用日誌診斷,包括個人使用者診斷和診斷日誌採集兩部分。其中個人使用者診斷使用者實時獲取使用者客戶端行為,診斷日誌採集通過 Push 方式下發指令到客戶端傳回客戶端本地日誌。

mPaaS 服務端核心元件:移動分析服務 MAS 架構解析

mPaaS 服務端核心元件:移動分析服務 MAS 架構解析

由此可見,MAS移動分析對移動客戶端研發及企業其他方面的作用為:採集海量移動端產生的日誌資料,並通過實時或離線計算,輸出特定的分析結果和報表,並通過 MAS 資料分析能力來賦能企業,協助企業建立一個互利共生的移動端服務生態,幫助企業監控終端、洞察使用者行為和行業變遷來輔助企業的進行戰略佈局和決策支援。

2. MAS 移動分析架構解析

首先看一下資料鏈路圖:

mPaaS 服務端核心元件:移動分析服務 MAS 架構解析

從資料鏈路圖中我們可以得知:資料的最前端源於客戶端的 SDK,目前 mPaaS 框架中提供的日誌埋點 SDK 主要由 4 部分功能:

  1. 從服務端拉取日誌採集及上報規則,如“是否上報、上報網路條件、上報頻率、包大小、日誌存放時間”等等;
  2. 自動監控客戶端基礎行為,並記錄埋點日誌,如:報活、跳轉、網路、耗時、Crash 等;
  3. 提供相應的介面 API,供業務模組呼叫,並封裝基礎引數(業務只需關注業務日誌資料)後輸出至客戶端日誌檔案;
  4. 根據採集與上報規則,將客戶端日誌上報至服務端日誌閘道器(MDAP)。

而後,當所需日誌均上報至 MDAP 日誌閘道器後,MDAP 會以服務端日誌輸出至伺服器日誌檔案中,在伺服器中部署的 logtail/flume 等採集工具將日誌採集並傳輸至 SLS/Kafka 等訊息中介軟體,再由不同的平臺接收,並根據各自的規則和排程計劃進行計算。

mPaaS 服務端核心元件:移動分析服務 MAS 架構解析

目前 MAS 同時支援了實時、離線 2 種計算形式:

a. 實時計算

依託於 Kepler 或 JStorm 的計算引擎來提供支援,其中:Kepler 為螞蟻實時計算平臺,包括底層的計算引擎 Kepler 和對應的開發平臺 Kepler-UI,支援 exactly once語義,並提供了 Transaction 等支援。

mPaaS 服務端核心元件:移動分析服務 MAS 架構解析

Kepler 為提供了 SQL 和高階運算元兩種程式設計正規化:

  1. Kepler SQL:相容了大部分的 Streaming SQL 的語義,並支援 Window、Trigger 等 Apache Beam 的概念。SQL 由於易上手易維護的特點,是目前 Kepler 使用者使用方式的主流。
  2. 高階運算元:Kepler 內建了完備的實時計算運算元,包括:過濾(Filter)、轉換(UDF、UDTF)、聚合(UDAF)、多流 Join、Union、Split 等型別,在 Spark 、Flink 高階 API 裡你能看到相同的概念,通過組裝這些運算元,使用者可以輕鬆實現一個自定義邏輯的 DataStream。通過高階 API,使用者可以更細粒度地去描述計算本身,而因為高階運算元封裝了 State、Retract 等能力,又為使用者省去了繁瑣的儲存和出錯回滾細節。

在 Kepler 計算引擎層,則專注排程和執行資料流,而執行引擎對於運算元層是可插拔的,目前 Kepler 支援了預設的執行引擎和螞蟻的分散式計算框架 Raya。

Raya 是螞蟻版本的 Ray,Ray學習可參考: https://ray.readthedocs.io/en/latest/index.html

在 IO 層,Kepler 計劃支援了所有的儲存元件,包括但不限於 SLS、AntQ、DRC、HBase、MySQL、Kudu、Pangu、Explorer 等等,並且這些儲存型別都有對應的內建 IO 元件,使用者不需要寫任何 IO 相關的一行程式碼,就能輕鬆完成資料讀取和儲存。

此外,MAS 為適應不同部署環境,也支援了 JStorm 實時計算平臺,通過在 JStorm 中提交計算拓撲完成資料分析。

JStorm 是一個分散式實時計算引擎,類似 Hadoop MapReduce,使用者按照規定的程式設計規範實現一個任務,將任務提交到 JStorm 上,JStorm 即可將任務 7*24 小時排程起來。核心原理如下圖:

mPaaS 服務端核心元件:移動分析服務 MAS 架構解析

  1. JStorm 提交執行的程式稱為 Topology。
  2. Topology 處理的最小的訊息單位是一個 Tuple,也就是一個任意物件的陣列。
  3. Topology 由 Spout 和 Bolt 構成。Spout 是發出 Tuple 的結點。Bolt 可以隨意訂閱某個 Spout 或者 Bolt 發出的 Tuple。Spout 和 Bolt 都統稱為 Component。

MAS 埋點資料通過 SLS/Kafka,等訊息中介軟體流入計算拓撲。拓撲中會根據預先配置的日誌切分、聚合規則,對資料進行多次的處理,並最終流出至持久層,持久層 MAS主要用到了 MESDB(基於 ElasticSearch)、OTS(HBase) 和 Explorer:

  • 鑑於 ElasticSearch 全文檢索能力以及強大的寫入和查詢效能,MESDB 主要用來存放基礎行為資料,例如,活躍使用者、新增使用者、累計使用者以及日誌回放資料。

  • OTS(HBase),則主要存放了部分結果,與計算中間態資料,而 Explorer 則用來做使用者自定義分析的資料儲存。

  • Explorer 是螞蟻分散式低延時的 PB 級實時分析型列式資料庫:

    首先,列式設計可最大限度地減少 I/O 爭用,後者是導致分析處理髮生延遲的主要原因。列式設計還可提供極高的壓縮率,相比於行式資料庫,通常可將壓縮率提高四倍或五倍。MPP 資料倉儲通常按比例線性擴充套件,這意味著如果您將雙節點 MPP 倉庫的空間翻倍,那麼可有效將其效能提高一倍。

    其次,Explorer 協議層提供 MySQL 協議的介面,通過 mysql-jdbc-driver,可以向 Explorer 發起 insert,select 請求。而計算層基於 Drill,支援多種型別的儲存,叢集線性擴充套件,執行計劃可定製,儲存層則基於 Druid,擁有針對 OLAP 特有的儲存格式和計算能力,Explorer 整體架構如下圖:

mPaaS 服務端核心元件:移動分析服務 MAS 架構解析

對於 MAS 自定義分析中,因無法預先確定使用者自定義聚合規則,以及屬性維度,因此選擇了 Explorer,並利用其強大的預聚合能力來支撐。在 Kepler/JStorm 實時計算拓撲中,僅需根據使用者自定義的屬性維度,切分後實時插入 Explorer 即可完成聚合。

此外,即時查詢能力強與弱的核心的標準:返回時間。

且不說支付寶客戶端這樣的超級 App,mPaaS 公有云服務的廠商每天的日誌都達到數億條,資料儲存TB級別,在這個量級上的查詢要在秒級返回資料,是非常困難的。而 Explorer 採用的 Hyperlog 演算法則剛好解決了這個問題,充分的支撐了 MAS 的訴求(如果想要更多瞭解這個演算法,請搜尋 Cardinality Estimation,可以對型別的演算法有更全面的瞭解)。

b. 離線計算

為支援不同的部署場景,MAS 在離線計算平臺,可按實際需要選擇阿里雲 DataWorks,Hadoop/Spark,或螞蟻金融雲-資料智慧研發平臺來支撐。

  1. DataWorks:是阿里雲提供的離線資料平臺,在國內有非常良好的應用。
  2. Hadoop/Spark:開源事實標準型的資料平臺,是自建大資料平臺的不二選擇。
  3. 資料智慧研發平臺(彩雲間):是在螞蟻金融雲中搭載的資料研發平臺,已經在很多大型機構中得的應用和實踐

上述的離線計算平臺均提供了 MAS 所需的核心能力為:資料整合、資料開發、資料管理、資料治理,可對資料進行傳輸、轉換、整合的操作,從不同的資料來源引入資料,對資料進行轉化和開發,最後將資料輸送到其他資料系統。

此外在離線計算中最核心的概念為 ETL 任務:ETL 是對大資料的,清洗,加工,載入,它實現了對日誌資料的格式化,驗證,補充等處理,經過一系列統計分析,並載入到線上系統中。而無論上述 3 個平臺怎麼支撐,MAS離線分析始終圍繞ETL來建設和管理,在當前這套 MAS 中通過長時間提煉出來常用,通用的計算方法和邏輯, MAS 預置了上百個任務,並按照任務功能主要分為:ODS,CDM,ADS 三層,分別是資料接入層,資料公共層,資料應用層。資料模型則採用了星型模型,能夠滿足快速理解,快速開發等特點。

  • 任務關係

mPaaS 服務端核心元件:移動分析服務 MAS 架構解析

  • 任務樹 Demo

mPaaS 服務端核心元件:移動分析服務 MAS 架構解析

離線計算目前主要支撐了 MAS 的:裝置分析、留存分析、頁面分析、漏斗分析、 mPaaS 元件分析等多個模組。

3. MAS 核心競爭力與優勢

  1. 多樣性:MAS 除行為分析、活躍分佈、參與度分析、漏斗分析、留存分析、裝置分析、頁面分析、事件分析、自定義分析提等基於使用者為的資料分析外,還提供供了啟動分析、Crash 分析、卡頓卡死分析、渠道分析、地域分析等多種維度的分析能力,已可滿足常規 App 絕大部分的分析需求。
  2. 相容性:MAS 提供支援主流的開源解決方案和基於螞蟻金融雲、阿里雲解決方案的能力,提供更加符合不同資源環境的解決方案。
  3. 擴充套件性:MAS 架構經歷了海量資料的壓力的檢驗,具有極強的橫向擴充套件能力。即使在初期是搭建最小單元,隨著使用者量的增長,可以即時擴容,水平提升服務能力,以滿足企業對未來的規劃需求。
  4. 適應性:MAS 的客戶已包含銀行、證券等金融企業,也有出行、地鐵等非金融行業,同時可支援企業根據自身的特性定製特定的業務報表。

通過本節內容,希望給大家介紹一下大資料的基本技術,mPaaS MAS的相關技術,希望有機會針對全文索引,分析數倉系統,實時流計算,離線開發等等各個維度上的技術進行交流。

歡迎加入 mPaaS 技術交流群:

  • 釘釘群:通過釘釘搜尋群號“23124039”。

期待你的加入。

Code Hub 線上直播第一期,邀約臺灣 DevOps 社群陳正瑋和螞蟻金服移動開發平臺 mPaaS 團隊古塘,和大家一同探討《DevOps 前世今生》及《敏捷開發與動態更新在支付寶內的深度實踐》。3 月 13 日,線上直播見!

mPaaS 服務端核心元件:移動分析服務 MAS 架構解析

相關文章