全部产品

数据同步简介

更新时间:2020-11-16 13:24:25

数据同步是 mPaaS 平台的一个核心基础服务组件。数据同步源自蚂蚁集团内面向移动应用、从服务端到客户端进行海量数据推送的全链路解决方案 — SYNC。该组件提供了一个安全的基于传输控制协议(Transmission Control Protocol,简称 TCP)和安全套接层(Secure Sockets Layer,简称 SSL)的数据通道,能够及时、准确、有序地将服务器端的业务数据主动地同步(SYNC)到客户端 APP。

数据同步的主要特性及其能够解决的问题

传统的远程过程调用(Remote Procedure Call,简称 RPC)已立足互联网行业几十年,也能满足绝大部分业务场景和功能需求。但在现阶段,随着移动互联网的全面普及和发展,无论是 APP 的规模还是用户对于 APP 的要求都已进入了一个新的阶段。传统的 RPC 请求因其自身的特性,存在许多的不足:

  • 客户端在特定的场景下需要调用 RPC 请求来获取最新的数据,而服务端(云端)实际没有或仅有少量数据发生变化。
  • 在客户端启动时,不同的业务模块、业务功能因设计上的独立,需要分别进行 RPC 请求来完成各自业务的数据拉取。
  • 客户端无法及时感知服务端发生的数据变化,只能通过定时轮询 RPC 接口的方式来刷新数据。
  • 传统 RPC 大多基于 HTTP(S) 的短连接进行数据交互,连接上即使使用 keepalive 等特性也无法长期保持连接,无法做到链路持续复用。请求创建连接、证书交换、加解密等对网络耗时及性能都会代来不小的损耗。基础原理图

为了改善或解决这些问题,数据同步应运而生,其核心特性有:

  • 可靠同步
    针对业务要求的 QoS(Quality of Service)等级为必达的业务场景而言,数据同步保证只要用户在该数据有效期内活跃并且匹配业务推送要求的条件(如客户端版本号、操作系统类型等维度),就一定让客户端同步到业务推送的数据。
  • 增量有序
    数据同步保证同一个通道内到达客户端的消息顺序一定是与业务服务器调用数据同步服务器的顺序一致,并且所有消息以增量方式同步至客户端。
  • 高实时性
    当客户端连接的网络状况良好时,数据同步可以保证非常高的推送实时性,消息推送耗时几乎是纯网络传输的耗时(1s 之内送达)。当客户端连接的网络受到主干网波动、路由器故障、基站信号弱、客户端存储满等不可抗拒因素干扰时,数据同步推送则会待TCP长连接重新建上以后再进行数据同步。

基本原理

类似于 MySQL 的 binlog 机制,数据同步服务器和客户端 SDK 之间传递的基本数据单元为 oplog,当业务需要同步一个变更数据到指定的用户或设备时,业务调用数据同步接口,数据同步服务端会将业务需要同步的数据变更包装为一个 oplog 持久化到数据库,然后在客户端在线的时候把 oplog 推送给客户端。每个 oplog 拥有一个唯一的 oplog id,oplog id 在确定的用户、确定的业务范围内保证唯一并且单调递增(按调用顺序)。数据同步服务端会按照 oplog id 从小到大的顺序把每一条 oplog 都推送至客户端。数据同步服务端和客户端都会记录客户端已经收到的最大 oplog id,称为同步点(亦可以被理解成数据版本号)。

结构图

价值优势

  • 合并推送
    客户端初始化成功时,服务端可一次性推送多个业务数据,减少不同业务的请求。
  • 增量推送
    只在有增量数据时才推送业务数据,可有效减少冗余数据的传输,降低网络成本。
  • 减少请求
    在没有增量数据时,不会消耗请求成本,减少业务的冗余请求。
  • 提高时效
    当服务端发生数据变化时,可在最短时间内将变化数据直接推送至客户端,无需等待客户端请求。
  • 提升体验
    数据无感知推送,在渲染客户端界面之前,数据已到位,降低了用户等待时间。

使用场景

数据同步可应用于客户端内需要实时推送数据的业务场景,如转账结果推送、支付结果推送、消息中心等。您可以通过以下场景对数据同步的能力有更深入了解。

  • 在即时通讯 App 中,数据同步提供增量、可靠的消息触达能力,将聊天消息按发送方的发送顺序,有序推送至指定用户。
  • 在需要动态更新配置的 App 中,数据同步可以动态地将配置信息进行全设备推送。将 App 功能开关、动态参数、动态配置等信息实时推送至指定客户端,或者批量动态地改变 App 在运行期间的业务参数、业务配置。
  • 在支付类 App 中,数据同步能够为交易数据的在线推送提供安全数据通道,保证在线 App 可实时接收推送数据。同时数据同步还能够提供数据持久化能力,使 App 在下一次上线时收到不在线期间的推送数据。