承接《開篇 | mPaaS 服務端核心組件體系概述》已經介紹移動分析服務 MAS 的主要功能和數據鏈路狀況,包括「基礎分析,自定義分析,性能分析,日誌管理」。 本章節,咱們將對移動分析服務 MAS 背後的架構能力作進一步的解析。html
由核心能力延伸出來的功能包括:前端
因而可知,MAS移動分析對移動客戶端研發及企業其餘方面的做用爲:採集海量移動端產生的日誌數據,並經過實時或離線計算,輸出特定的分析結果和報表,並經過 MAS 數據分析能力來賦能企業,協助企業創建一個互利共生的移動端服務生態,幫助企業監控終端、洞察用戶行爲和行業變遷來輔助企業的進行戰略佈局和決策支持。mysql
首先看一下數據鏈路圖:算法
從數據鏈路圖中咱們能夠得知:數據的最前端源於客戶端的 SDK,目前 mPaaS 框架中提供的日誌埋點 SDK 主要由 4 部分功能:sql
然後,當所需日誌均上報至 MDAP 日誌網關後,MDAP 會以服務端日誌輸出至服務器日誌文件中,在服務器中部署的 logtail/flume 等採集工具將日誌採集並傳輸至 SLS/Kafka 等消息中間件,再由不一樣的平臺接收,並根據各自的規則和調度計劃進行計算。數據庫
目前 MAS 同時支持了實時、離線 2 種計算形式:編程
依託於 Kepler 或 JStorm 的計算引擎來提供支持,其中:Kepler 爲螞蟻實時計算平臺,包括底層的計算引擎 Kepler 和對應的開發平臺 Kepler-UI,支持 exactly once語義,並提供了 Transaction 等支持。數組
Kepler 爲提供了 SQL 和高階算子兩種編程範式:服務器
在 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 小時調度起來。核心原理以下圖:
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 總體架構以下圖:
對於 MAS 自定義分析中,因沒法預先肯定用戶自定義聚合規則,以及屬性維度,所以選擇了 Explorer,並利用其強大的預聚合能力來支撐。在 Kepler/JStorm 實時計算拓撲中,僅需根據用戶自定義的屬性維度,切分後實時插入 Explorer 便可完成聚合。
此外,即時查詢能力強與弱的核心的標準:返回時間。
且不說支付寶客戶端這樣的超級 App,mPaaS 公有云服務的廠商天天的日誌都達到數億條,數據存儲TB級別,在這個量級上的查詢要在秒級返回數據,是很是困難的。而 Explorer 採用的 Hyperlog 算法則恰好解決了這個問題,充分的支撐了 MAS 的訴求(若是想要更多瞭解這個算法,請搜索 Cardinality Estimation,能夠對類型的算法有更全面的瞭解)。
爲支持不一樣的部署場景,MAS 在離線計算平臺,可按實際須要選擇阿里雲 DataWorks,Hadoop/Spark,或螞蟻金融雲-數據智能研發平臺來支撐。
上述的離線計算平臺均提供了 MAS 所需的核心能力爲:數據集成、數據開發、數據管理、數據治理,可對數據進行傳輸、轉換、集成的操做,從不一樣的數據源引入數據,對數據進行轉化和開發,最後將數據輸送到其餘數據系統。
此外在離線計算中最核心的概念爲 ETL 任務:ETL 是對大數據的,清洗,加工,加載,它實現了對日誌數據的格式化,驗證,補充等處理,通過一系列統計分析,並加載到在線系統中。而不管上述 3 個平臺怎麼支撐,MAS離線分析始終圍繞ETL來建設和管理,在當前這套 MAS 中經過長時間提煉出來經常使用,通用的計算方法和邏輯, MAS 預置了上百個任務,並按照任務功能主要分爲:ODS,CDM,ADS 三層,分別是數據接入層,數據公共層,數據應用層。數據模型則採用了星型模型,可以知足快速理解,快速開發等特色。
離線計算目前主要支撐了 MAS 的:設備分析、留存分析、頁面分析、漏斗分析、 mPaaS 組件分析等多個模塊。
經過本節內容,但願給你們介紹一下大數據的基本技術,mPaaS MAS的相關技術,但願有機會針對全文索引,分析數倉系統,實時流計算,離線開發等等各個維度上的技術進行交流。
歡迎加入 mPaaS 技術交流羣:
期待你的加入。
Code Hub 線上直播第一期,邀約臺灣 DevOps 社區陳正瑋和螞蟻金服移動開發平臺 mPaaS 團隊古塘,和你們一同探討《DevOps 前世此生》及《敏捷開發與動態更新在支付寶內的深度實踐》。3 月 13 日,線上直播見!