mPaaS 是源自于支付宝客户端 App 的移动开发平台,为企业提供了移动开发、测试、运营及运维提供云到端的一站式解决方案,mPaaS 能有效降低技术门槛、减少研发成本、提升开发效率,协助企业快速搭建稳定高质量的移动客户端 App。
经过《mPaaS 客户端架构解析》系列,我们已经对 mPaaS 的产品矩阵与具体定位有了初步认识。由本章节开始,我们将针对 mPaaS 服务端核心组件体系展开梳理和讨论,带领大家进一步认识了解 mPaaS 在服务端组件体系搭建过程中踩过的坑与相应的实践经验。
mPaaS 针对端上提供了 3 大研发框架:Native 开发框架、H5 开发框架和小程序开发框架,包含了 20 多个功能性组件,100 多个 UI 控件。既然定义为移动研发平台,自然需要坚实的中台能力来支撑期整个客户端生产运营过程,本文旨在介绍 mPaaS 平台后端各组件的核心架构体系;。首先我们先来看一下 mPaaS 后端的整体架构图:
如图所示,mPaaS的定位为移动端的 PaaS 平台,在他之下是蚂蚁金融云底座,该底座中包含了稳定的硬件环境,可快速的部署网络、存储、数据库等服务,在此环境之上金融云目前配备了分布式的金融级数据库、文件存储、缓存服务、注册中心、配置中心、消息中心、调度中心、监控中心、大数据平台等基础服务,同时还部署了日常运维所需的用户、权限、发布等中枢服务。 mPaaS 则专注于提供移动端所需功能组件,其最核心的为 mAppCenter 控制台和 5 大功能组件:
一.移动网关(MGS):
MGS 是连接客户端与服务端 RPC 接口的组件产品,他简化了 RPC 接口的数据协议和通讯协议,能够显著提升开发效率和网络通讯效率。
MGS 是符合开闭原则的框架化网关,支持多种客户端通讯协议:http/https/http2/spdy/mmtp(蚂蚁移动通讯协议),能轻松适配多种终端应用,支持多种数据序列化方式:Json、Protobuf。并且拥有统一标准的API接口管控平台,规范的 DevOps 能力:
在管控平台是上可方便快捷的进行 RPC 接口管理(增、删、改、上下线),配置完成后可实时的进行 APITest,验证接口是否可按预期完成运行,随后即可快速生成客户端的模型代码,支持 Android、iOS、JS 等多种语言代码生成。针对 RPC 接口 MGS 可对客户端到移动网关的请求进行验签,以验证调用者身份保证安全;
MGS 有足够的自信来支持各种企业级所需的网关平台:
- 核心功能和架构与支付宝客户端生产环境网关保持一致,常年保持 99.9999+% 高可用率,具有足够的稳定性。
- 支撑支付宝客户端、口碑、网商、聚宝、香港版等多个 App,亿级日活,经历了多年双十一、双十二、春节红包活动的海量请求考验,4c8g 单机 QPS 可支撑 10000+/S,具备超强的单机性能。
- 简单配置即可适配多种终端,可连接异构的后端服务。
- 自动生成多端 SDK,实现前后端分离,非常有效的提升开发效率。
- 支持移动服务注册、发现与管控,实现服务聚合与集成,极大的降低了管理成本和安全风险。
- 优化后的数据协议与通讯协议,大大提高了网络通讯质量和效率。
- 具备路由、流控、安全、ETAG、定制响应等功能。可对 API 的访问量进行限制,避免高峰期时后台服务器被压垮;可对 API 返回值进行 Mock,以提供特定的响应结果,减少对后端系统的调用;可在客户端请求路由到后端业务系统之前,校验该次请求的合法性,验证通过才予以放行;可对客户端到移动网关的请求进行加密,确保数据在传输过程中的安全性;目前支持的加密算法有 ECC、RSA 和国密;并且提供了错误码定制服务,可自定义返回提示内容;
二.消息推送(MPS):
MPS 提供了专业的移动消息推送方案,针对不同的场景推出多种推送类型,满足用户的个性化推送需求,并集成了苹果、华为、小米、FCM 等厂商渠道的推送功能,在提供控制台快速推送能力的同时,也提供了服务端接入方案,方便用户快速集成移动终端推送功能,与用户保持互动,从而有效地提高用户留存率,提升用户体验。
MPS 组件的几大核心功能为:
- 多种推送方式:可精准推送消息给自定义目标用户群体,单用户/设备,全部用户等方式。可从控制台页面触发推送,也可通过业务系统调用 API 接口推送;
- 自定义有效期:初次下发消息时设备未在线,在消息有效期内,设备建链或者发起用户绑定均可触发消息的再次推送,确保消息的到达率;
- 个性化模版:提供模版管理功能,供用户配置个性化模版,支持用户的个性化推送需求;
- 语音播报:根据业务场景需要可配置语音模版,在客户端收到通知后可通过语音的方式提用户,增强用户感知度和消息的点击率。
- 推送配置:可进行证书配置,可支持用户开启华为、小米、魅族、FCM等第三方渠道的推送,并支持配置信息录入。
- 密钥配置:提供了密钥配置界面供用户配置自己的密钥,对外接口都需要对请求进行签名,保证了用户的安全性,同时提供消息回执功能,供用户追踪消息的投递结果。 MPS 同样也为支付宝、口碑等客户端的双十一、双十二、春节红包等活动提供有力的支持,在当量规模下可提供秒级亿笔推送能力,消息下发速度快,保证稳定到达客户端,每天并发支撑上亿连接数,并且其接入成本低,能高效的为各种业务场景提供服务。
三.移动同步(MSS):
通过一个安全的数据通道 TCP+SSL,及时、准确、有序地将服务器端的业务数据,主动的同步(SYNC)到客户端App,是一个客户端与服务端之间的消息中间件。
MSS 用以解决的问题为:
- 客户端在功能页面上需要重复调用RPC请求已获取最新的数据,但实际只有少量的数据发生变化甚至完全无数据变更。
- 服务端业务数据发生变更时,客户端无法及时感知,只能通过定时轮询 RPC 接口来刷新数据。
- 在不通的业务场景客户端需要分别调用不同 RPC 请求来完成不同业务的数据更新。
MSS 通过学习 MySQL 数据库的 binlog 原理定义了一个 oplog 概念,服务器和客户端 SDK 之间传递的最小数据单元被称为一个 oplog,每当业务需要同步一个数据变更到指定的用户/设备的时候,业务调用 MSS 服务端的 syndData 接口,MSS 会将业务需要同步的数据变更包装为一个 oplog 持久化到数据库,然后在客户端在线的时候把oplog推送给客户端,如果当前则立即触发推送。每个 oplog 拥有一个唯一的 oplog id,oplog id 在确定的用户、确定的业务范围内保证唯一并且单调递增(按调用顺序)。 MSS 按照 oplog id 从小到大的顺序把每一条 oplog 都推送到客户端。通过 ACK 机制服务端和客户端均会记录客户端已同步数据的最大 oplog id(亦可理解为数据版本),后续产生新数据时进行差量计算和差量同步。
MSS 具备多种推送特性可供选择:
1、指定或全局
- 指定:对特定的用户(或设备)进行推送;
- 全局:给所有的用户(或设备)推送数据;
2、用户或设备
- 用户:对应一个登陆客户端的账户,通过UserID同步;
- 设备户:对应一个客户端终端设备,通过Utdid(由客户端SDK生成)同步;
3、单设备或多设备 假设一个用户有两台设备 A 和 B,则:
- 单设备同步:如果一条数据已经同步给了设备 A,则设备B不会再收到该数据;
- 多设备同步:即使一条数据已经同步给了设备 A,同样会被同步给设备 B。
4、持久化或非持久化
- 持久化:无序,数据不落数据库,业务触发调用时,如果当前客户端在线则立即同步,如果不在线则抛弃。
- 非持久化:数据落库存表,保证已数据库序列同步至客户端,如果当前在线立即触发差量计算与差量同步,如果当前不在线,后续客户端上线后再行触发同步。
MSS 在蚂蚁内部已经覆盖了所有的客户 App,近 400 个业务场景,每天数百亿条数级同步至各种客户端,同样支撑了多年的双十一、双十 二、春节红包大促等活动,持续保持着 99.9999+% 的可用率,每个数据包同步至客户端耗时尽仅在毫秒级别,已然是目前超级 App 不可或缺的一个高级组件。
四.移动发布(MDS):
MDS 提供了客户端版本升级包、热修复包、H5离线包、小程序安装包、以及各种资源包、配置项管理和发布的服务。
MDS 发布服务可支持通过白名单配置管理进行指定用户群进行灰度发布,也可以使用高级过滤规则,比如指定机型、网络、地域、灰度量来进行更多维度的灰度发布,发布过程也可设定时间窗口;发布过程已可随时终止和回滚至上一稳定版本;为减少数据冗余及设备带宽,MDS 提供了增量差分离线包更新能力,甚至可以在移动端网络条件不稳定场景下依然可提供高效的升级服务;于此同时,为保障安全性,热修复包有自定义的验签流程,可保证脚本来源的正确性,mPaaS 的 IDE 开发插件中也提供生成热修复资源包并对包进行加签的功能。 除此之外,MDS 也具备基于 mPaaS 框架的客户端安装包的编译构建打包能力,用户可以将客户端代码托管在金融科技的 GitLab 上,完成代码管理,然后通过证书管理,构建打包,实时发布等一整套开发发布流程完成最总上线。
五.移动分析(MAS):
MAS 通过对移动客户端、H5、小程序等多端埋点数据的采集与分析,从终端类型、终端版本、地域、网络类型、厂商机型等多个维度展现和分析移动应用数据实现产品核心指标监控,可帮助企业更好地完成业务监控、用户洞察与行为分析,指导产品迭代,精细化产品运营,辅助营销决策,加速业务商业化。 MAS 主要功能包括:
1.基础分析:
关注于 App 的通用分析,包括每日登录用户、新增用户、使用时长、用户留存、页面分析、访问路径等基础分析。
2.高阶分析:
用于 App 专注业务的特定分析需求,提供一种灵活的多维分析能力;提供热修复报告,帮助您了解 RPC、修复、回滚相关信息等。
3.性能分析:
提供闪退、卡死、卡顿的统计功能。当客户端发生性能问题后,移动分析服务提供实时查看性能分析的统计数据。
4.日志管理:
支持按关键字实时搜索查询日志;通过与 MPS/MSS 等组件功能结合,动态推送指令让客户端实时上传完整日志文件包,用于分析和定位客户端运行状况;此外还可通过服务端开关实时控制客户端日志上报逻辑。
数据链路上(见下图):
在客户端日志模块 SDK 采集到日志文件后,通过 mPaaS 日志网关(mdap)将日志内容输出到服务器日志文件中,随后使用服务端日志读取工具和消息中间件将日志数据按条分别投递到 2 个数据平台(实时计算平台和离线大数据平台)。
实时计算平台核型组件为 Jstorm,JStorm 是一个由阿里云研发的类似 HadoopMapReduce 的系统,开发者通过编写 JStorm 的计算 topology,可将日志文件做不通的计算处理,他具备超强的计算能力,客户端日志数据可在分钟级别内完成数据计算、存储与展示,目前 MAS 中的基础大盘、自定义分析、日志回放等功能数据均由 JStorm 计算产出;
离线大数据平台:
目前主要使用阿里云的 odps 或 spark 来完成(根据实际部署环境来选择),开发这通过编写 SQL 脚本和配置定时调度任务,可完成对超大量级的数据计算,MAS 中的用户行为分析、流存分析、页面漏斗分析等功能则由该平台计算产出。
企业在数据应用的基础上,可以与大数据、营销平台及推送平台结合,根据移动分析得到的埋点数据,通过大数据平台进行打标、圈人、用户画像及建模后,可以在营销平台上发起一次营销活动,指定活动的类型,活动算法,参与人群及活动奖品,通过消息推送、数据同步,动态发布等形式,触达到客户端,实现客户端拉新促活、活动推广及操作引导的目的。同时结合运营活动的场景需求,形成了一套完整的数字化运营体系,监控一次运营活动的参与人数、活动发放率、核销率等,观察活动的有效性
此前麦肯锡发布了报告称,在互联网时代,随着中国经济增长进入新常态,传统企业的经营环境日益严峻,大量金融科技公司正在各细分领域威胁传统金融企业的核心业务。传统金融企业面临着前所未有的机遇和挑战,数字化转型迫在眉睫。那么在这样的大背景下,蚂蚁金服 mPaaS 正是各个组织机构做好自己的数字化转型的正确打开方式。
通过本节内容,我们初步了解了支付宝在服务端如何构建组件体系,并在这过程中逐步提炼、沉淀相应的能力对外输出。后续我们将针对具体的组件设计与优化,展开细化的探讨。
相应的技术内核,我们同样应用在了 mPaaS 并对外输出,欢迎大家上手体验: t.cn/ELBlvEr
关于服务端组件设计的具体思路和实践,同样期待你们的反馈,欢迎一起探讨交流。
往期阅读
《支付宝 App 构建优化解析:通过安装包重排布优化 Android 端启动性能》
《支付宝 App 构建优化解析:Android 包大小极致压缩》
《支付宝小程序框架浅析及如何在 mPaaS 内深度集成》