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