mPaaS 服务端核心组件:移动分析服务 MAS 架构解析

avatar
mPaaS 官方专栏号 @蚂蚁集团

承接《开篇 | mPaaS 服务端核心组件体系概述》已经介绍移动分析服务 MAS 的主要功能和数据链路情况,包括“基础分析,自定义分析,性能分析,日志管理”。 本章节,我们将对移动分析服务 MAS 背后的架构能力做进一步的解析。

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

  1. 通过实时计算多维数据,全方位展现移动应用的表现力;
  2. 通过离线分析用户属性和行为,促进服务产品优化与运营推广;
  3. 通过自动采集流程日志,提升排查效率,快速解决研发问题。

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

  1. 用户行为分析:提供应用使用分析,包括用户报活、用户登录、新增用户等多种指标的统计功能,并支持按照平台、版本、地域、时间的多维度分析对比,方便用户更快速、便捷的了解自身 App 的使用情况。
  2. 稳定性分析:提供应用稳定性分析,包括闪退监控、异常监控、性能监控及用户诊断功能,帮助开发人员及时发现、定位问题。
  3. 诊断分析:提供应用日志诊断,包括个人用户诊断和诊断日志采集两部分。其中个人用户诊断用户实时获取用户客户端行为,诊断日志采集通过 Push 方式下发指令到客户端传回客户端本地日志。

由此可见,MAS移动分析对移动客户端研发及企业其他方面的作用为:采集海量移动端产生的日志数据,并通过实时或离线计算,输出特定的分析结果和报表,并通过 MAS 数据分析能力来赋能企业,协助企业建立一个互利共生的移动端服务生态,帮助企业监控终端、洞察用户行为和行业变迁来辅助企业的进行战略布局和决策支持。

2. MAS 移动分析架构解析

首先看一下数据链路图:

从数据链路图中我们可以得知:数据的最前端源于客户端的 SDK,目前 mPaaS 框架中提供的日志埋点 SDK 主要由 4 部分功能:

  1. 从服务端拉取日志采集及上报规则,如“是否上报、上报网络条件、上报频率、包大小、日志存放时间”等等;
  2. 自动监控客户端基础行为,并记录埋点日志,如:报活、跳转、网络、耗时、Crash 等;
  3. 提供相应的接口 API,供业务模块调用,并封装基础参数(业务只需关注业务日志数据)后输出至客户端日志文件;
  4. 根据采集与上报规则,将客户端日志上报至服务端日志网关(MDAP)。

而后,当所需日志均上报至 MDAP 日志网关后,MDAP 会以服务端日志输出至服务器日志文件中,在服务器中部署的 logtail/flume 等采集工具将日志采集并传输至 SLS/Kafka 等消息中间件,再由不同的平台接收,并根据各自的规则和调度计划进行计算。

目前 MAS 同时支持了实时、离线 2 种计算形式:

a. 实时计算

依托于 Kepler 或 JStorm 的计算引擎来提供支持,其中:Kepler 为蚂蚁实时计算平台,包括底层的计算引擎 Kepler 和对应的开发平台 Kepler-UI,支持 exactly once语义,并提供了 Transaction 等支持。

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 小时调度起来。核心原理如下图:

  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 整体架构如下图:

对于 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 三层,分别是数据接入层,数据公共层,数据应用层。数据模型则采用了星型模型,能够满足快速理解,快速开发等特点。

  • 任务关系

  • 任务树 Demo

离线计算目前主要支撑了 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 日,线上直播见!