承接《开篇 | 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 日,线上直播见!

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

  1. 开篇 | 蚂蚁金服 mPaaS 服务端核心组件体系概述

    mPaaS 是源自于支付宝客户端 App 的移动开发平台,为企业提供了移动开发.测试.运营及运维提供云到端的一站式解决方案,mPaaS 能有效降低技术门槛.减少研发成本.提升开发效率,协助企业快速搭建 ...

  2. mPaaS 服务端核心组件:消息推送 MPS 架构及流程设计

    0. 前言 根据<开篇 | mPaaS 服务端核心组件体系概述>的介绍,我们已经知道 mPaaS 的 MPS 服务主要提供了专业的移动消息推送方案,可以针对不同的场景提供多种推送类型,满足 ...

  3. 蚂蚁金服 mPaaS 服务端核心组件体系概述:移动 API 网关 MGS

    根据<开篇 | mPaaS 服务端核心组件体系概述>,我们已经初步了解 mPaaS 平台后端各组件的核心架构体系. 而在 mPaaS 服务端众多组件中,移动 API 网关 MGS 是连接移 ...

  4. KBEngine服务端源码分析笔记

    http://blog.csdn.net/qq98756524aa/article/details/77449772?locationNum=4&fps=1 此笔记是本人在开发及研读的过程中记 ...

  5. KBEngine服务端源码-分析

    目录 后续会做更详细的更新 class Task子类图示 class TimerHandler子类图示 Entity实体类--继承自 (public script::ScriptObject) 声明部 ...

  6. EJB3.0学习笔记---理解远程调用服务端和本地调用服务端的区别

    项目目的:理解远程调用服务端和本地调用服务端的区别 1.异常:       javax.ejb.EJBException: Local and Remote Interfaces cannot hav ...

  7. Netty即是服务端又是客户端,服务端和客户端相互对应

    Netty即是服务端又是客户端,服务端和客户端相互对应. 具体功能细节是: 上游有一个服务,会主动发送消息给我中间件平台.中间件平台既有服务端也有客户端.通过下游客户端连接进来的客户端和中间件传下去的 ...

  8. Asp.net webApi 通过WebSocket推送消息给客户端,搭建一个即是服务端又是客户端的服务

    Asp.net webApi 通过WebSocket推送消息给客户端,搭建一个即是服务端又是客户端的服务_IT_ziliang的博客-CSDN博客 WebSocket是一种在单个TCP连接上进行全双工 ...

  9. Netty学习笔记(二)Netty服务端流程启动分析

    先贴下在NIO和Netty里启动服务端的代码 public class NioServer { /*** 指定端口号启动服务* */public boolean startServer(int por ...

最新文章

  1. Linux 守护进程,编写(转载)
  2. Python入门基础知识学什么?
  3. 一篇文章来告诉你可视化是多么重要
  4. 分布式高性能消息处理中心HPMessageCenter
  5. android monkey压力测试,Android-Monkey 压力测试
  6. nginx设置http强制跳转https
  7. pat乙级相当于什么水平_英语四六级/专四/专八相当于美国人什么水平?
  8. Oracle移除表空间的数据文件 ora-00604 ora-01426
  9. DevExpress小结(简略)
  10. react周期函数介绍
  11. word2019加载mathtype
  12. Pega How To系列之二:如何做数据验证 ---- CheneyWang
  13. WorkNC3D沿面精加工快速修圆小技巧
  14. 什么是固态硬盘及其优缺点【转】
  15. 手机开发者选项各项参数意义
  16. “危化品重大生产安全风险感知通信预警关键技术及应用” 项目通过科技成果鉴定
  17. 布法罗大学计算机硕士学费,美国水牛城大学学费贵不贵(美国水牛城大学往年排名情况怎么样)...
  18. Python--getattr、__getattr__、__getattribute__,倔强一下
  19. office365邮箱设置
  20. CobaltStrike 流量隐藏

热门文章

  1. 习题6-5 UVA1600 巡逻机器人 Patrol Robot
  2. [论文阅读] 基于辅助函数的IVA(使用源先验的四阶关系)
  3. DS18B20温度采集报警系统,原理及汇编、C语言实现
  4. Oracle如何切换session,oracle修改process和session数
  5. 混凝土骨料微观结构数学物理模型建模
  6. 浏览器源代码下载图片原图,手把手教学
  7. Matlab:交换矩阵的两行(列)
  8. 亲身体验 北京-环球嘉年华!
  9. 编写程序实现乐手弹奏乐器。乐手可以弹奏不同的乐器从而发出不同的声音,可以弹奏的乐器包括二胡、钢琴和琵琶。
  10. Android 蓝牙开发——自动重连机制(十八)