一 功能描述
1.简介
数据同步是 mPaaS 平台的一个核心基础服务组件。数据同步源自蚂蚁集团内面向移动应用、从服务端到客户端进行海量数据推送的全链路解决方案 — SYNC。该组件提供了一个安全的基于传输控制协议(Transmission Control Protocol,简称 TCP)和安全套接层(Secure Sockets Layer,简称 SSL)的数据通道,能够及时、准确、有序地将服务器端的业务数据主动地同步(SYNC)到客户端 App。
2.功能特性
数据同步具备以下特性:
- 可靠同步
针对业务要求的 QoS(Quality of Service)等级为必达的业务场景而言,数据同步保证只要用户在该数据有效期内活跃并且匹配业务推送要求的条件(如客户端版本号、操作系统类型等维度),就一定让客户端同步到业务推送的数据。 - 增量有序
数据同步保证同一个通道内到达客户端的消息顺序一定是与业务服务器调用数据同步服务器的顺序一致,并且所有消息以增量方式同步至客户端。 - 高实时性
当客户端连接的网络状况良好时,数据同步可以保证非常高的推送实时性,消息推送耗时几乎是纯网络传输的耗时(1s 之内送达)。
3.基本原理
类似于 MySQL 的 binlog 机制,数据同步服务器和客户端 SDK 之间传递的基本数据单元为 oplog,当业务需要同步一个变更数据到指定的用户或设备时,业务调用数据同步接口,数据同步服务端会将业务需要同步的数据变更包装为一个 oplog 持久化到数据库,然后当客户端在线的时候把 oplog 推送给客户端。每个 oplog 拥有一个唯一的 oplog id,oplog id 在确定的用户、确定的业务范围内保证唯一并且单调递增(按调用顺序)。数据同步服务端会按照 oplog id 从小到大的顺序把每一条 oplog 都推送至客户端。数据同步服务端和客户端都会记录客户端已经收到的最大 oplog id,称为同步点(亦可以被理解成数据版本号)。
4.价值优势
- 合并推送
客户端初始化成功时,服务端可一次性推送多个业务数据,减少不同业务的请求。 - 增量推送
只在有增量数据时才推送业务数据,可有效减少冗余数据的传输,降低网络成本。 - 减少请求
在没有增量数据时,不会消耗请求成本,减少业务的冗余请求。 - 提高时效
当服务端发生数据变化时,可在最短时间内将变化数据直接推送至客户端,无需等待客户端请求。 - 提升体验
数据无感知推送,在渲染客户端界面之前,数据已到位,降低了用户等待时间。
5.使用场景
数据同步可应用于客户端内需要实时推送数据的业务场景,如转账结果推送、支付结果推送、消息中心等。您可以通过以下场景对数据同步的能力有更深入了解。
- 在即时通讯 App 中,数据同步提供增量、可靠的消息触达能力,将聊天消息按发送方的发送顺序,有序推送至指定用户。
- 在需要动态更新配置的 App 中,数据同步可以动态地将配置信息进行全设备推送。将 App 功能开关、动态参数、动态配置等信息实时推送至指定客户端,或者批量动态地改变 App 在运行期间的业务参数、业务配置。
- 在支付类 App 中,数据同步能够为交易数据的在线推送提供安全数据通道,保证在线 App 可实时接收推送数据。同时数据同步还能够提供数据持久化能力,使 App 在下一次上线时收到不在线期间的推送数据。
同时数据同步在一些特殊场景下可以用来替代RPC,可以达到事半功倍的效果,比如以下场景:
1. 客户端重复调用RPC请求,但实际没有(或少量)数据发生变化(比如消息通知,配置下发)
2. 服务端数据发生变化时,客户端无法及时感知,只能定时轮询RPC接口来刷新数据(比如单点登录)
3. 业务数据体很大,无法在单次RPC结果中返回,需要多次RPC请求来完成不同业务的数据获取(比如直播里的点赞)
以支付宝为例,移动同步使用场景如下:
二 产品架构
1.MSS架构
1.管控流程
参考上图灰色的实线,mAppCenter就是我们平时客户端同学经常使用的mPaaS控制台,当我们在mPaaS控制台上添加数据同步标识以后,msync收到配置的标识信息以后,会做一些落库操作,图中的缓存主要是存放当前设备是否在线的状态信息。
2.数据推送
开发人员从服务端或者mAppCenter控制台操作消息的同步推送,请求经msync以后,检测当前目标设备是否在线,根据配置的同步规则进行甄别,符合推送条件且当前目标设备在线的时候,信息将通过msync到APP的tcp长连接,直接同步到APP客户端。
3.网络
- 对客户端服务的入口是msync做长链接网关,所以需要msync暴露在公网。
- 因为目前架构中无LVS输出,所以4层正向代理由stream承担。
4.业务流量
- 客户端长连接以及消息推送
客户端与 MSYNC 建立长连接,并一直保持。 MSYNC 向 客户端下发消息同步 TOKEN。 客户端上报 用户 ID 信息以绑定 消息同步 TOKEN。
- 业务服务器调用 MSYNC 的 RESTFUL 接口进行消息同步
MSYNC 服务端接收到消息同步的请求后,将同步任务、同步消息入库。 通过长连接将消息同步给客户端。 若客户端不在线,则消息会保存在库中,待客户端在线后进行同步。
- MSS 存储结构
- 关系型数据库 保存同步消息、同步任务信息。
- 缓存数据库 保存客户端链接信息。
2.MSS网络架构 – AntStack底座
1.网络
msync 需要通过 TCP 长连接主动往客户端推送业务数据,因此需要将 MSS 的长连接服务暴露在 公网上,一般情况下为公网 IP 配合 8666 端口使用,如果 8666 合规上不允许,则可以使用 80 端口,只要确保映射到 MSS 的服务端口为 8666 即可。如果前置有 F5 等网络设备,则需要在网 络设备上配置成支持长连接,并且最短维持时间需要配置成 5 分钟以上。根据以往经验,配置最 低 30+分钟综合表现比较良好。如果安全上要求需要支持 SSL,则需要将公网端口设置为 443(目 前客户端 SDK 仅支持 443 端口下进行 TCP+SSL 长连接),并在网络设备上将 443 端口映射至 MSS 服务的 8666 端口上;同理,如果途径 DMZ 区,需要 DMZ 区有四层反向服务,进行 TCP 请求代理和转发。
3.MSS网络架构 – 阿里云底座
相关的请求同步逻辑如上方产品架构介绍,此处不再累述。