mPaaS云平台运维系列之—移动同步产品介绍

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

1.1    产品介绍

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

1)客户端在特定的场景下需要调用RPC请求来获取最新的数据,而服务端(云端)实际没有或仅有少量数据发生变化。

2)在客户端启动时,不同的业务模块、业务功能因设计上的独立,需要分别进行RPC 请求来完成各自业务的数据拉取。

3)客户端无法及时感知服务端发生的数据变化,只能通过定时轮询RPC接口的方式来刷新数据。

4)传统RPC大多基于HTTP(S) 的短连接进行数据交互,连接上即使使用keepalive等特性也无法长期保持连接,无法做到链路持续复用。请求创建连接、证书交换、加解密等对网络耗时及性能都会代来不小的损耗。

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

1.1.1  功能简述

如图1-1所示,数据同步服务具备以下特性:

1)可靠同步

针对业务要求的QoSQuality of Service)等级为必达的业务场景而言,数据同步保证只要用户在该数据有效期内活跃并且匹配业务推送要求的条件(如客户端版本号、操作系统类型等维度),就一定让客户端同步到业务推送的数据。

2)增量有序

数据同步保证同一个通道内到达客户端的消息顺序一定是与业务服务器调用数据同步服务器的顺序一致,并且所有消息以增量方式同步至客户端。

3)高实时性

当客户端连接的网络状况良好时,数据同步可以保证非常高的推送实时性,消息推送耗时几乎是纯网络传输的耗时。

image.png

1‑1 MSS产品功能图

1.1.2  基本原理

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

image.png

图1‑2 MSS原理图

1.1.3  价值优势

1合并推送

客户端初始化成功时,服务端可一次性推送多个业务数据,减少不同业务的请求。

2增量推送

只在有增量数据时才推送业务数据,可有效减少冗余数据的传输,降低网络成本。

3减少请求

在没有增量数据时,不会消耗请求成本,减少业务的冗余请求。

4提高时效

当服务端发生数据变化时,可在最短时间内将变化数据直接推送至客户端,无需等待客户端请求。

5提升体验

数据无感知推送,在渲染客户端界面之前,数据已到位,降低了用户等待时间。

1.1.4  使用场景

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

1在即时通讯App中,数据同步提供增量、可靠的消息触达能力,将聊天消息按发送方的发送顺序,有序推送至指定用户。

2在需要动态更新配置App中,数据同步可以动态地将配置信息进行全设备推送。将App功能开关、动态参数、动态配置等信息实时推送至指定客户端,或者批量动态地改变App在运行期间的业务参数、业务配置。

3在支付类App中,数据同步能够为交易数据的在线推送提供安全数据通道,保证在线App可实时接收推送数据。同时数据同步还能够提供数据持久化能力,使App在下一次上线时收到不在线期间的推送数据。

综上分析,数据同步在一些特殊场景下可以用来替代RPC,可以达到事半功倍的效果,比如:

1客户端重复调用RPC请求,但实际没有(或少量)数据发生变化(比如消息通知,配置下发)

2服务端数据发生变化时,客户端无法及时感知,只能定时轮询RPC接口来刷新数据(比如单点登录)

3业务数据体很大,无法在单次RPC结果中返回,需要多次RPC请求来完成不同业务的数据获取(比如直播里的点赞)

常见的使用移动同步的场景为例,移动同步可以使用场景如图1-3所示。

image.png

图1‑3 使用sync场景举例

1.2    产品架构

图1-4所示,客户端App在启动时会通过同步标识,和msync建立TCP长链接。用户可以通过mAppCenter控制台或服务端调用msync暴露的API进行消息同步推送。msync依赖缓存和数据库,数据库记录了配置信息和同步的数据oplog,缓存中记录了客户端的链接信息、标识等,msync根据缓存信息、配置规则将oplog数据同步推送到客户端App。

image.png

图1‑4 MSS产品架构图

1.2.1  服务依赖

msync启动时,会请求mAppCenter拉取元数据,与数据库中的数据做对比,将差异量入库。数据库挂掉会影响MPS提供服务。运行时依赖主要分为三个部分:

1mAppCenter会聚合MSS的前端页面,前端界面上的请求会经由mAppCenternginx路由到MSS

2msync提供自建渠道网关。

3设备在线状态依赖缓存(TbaseHbase等)。

1.2.2  流量路径

移动同步服务主要涉及以下两个流量路径:

1客户端长连接以及消息推送

 客户端与MSYNC建立长连接,并一直保持

 MSYNC向客户端下发消息同步TOKEN

 客户端上报用户ID信息以绑定消息同步TOKEN

2业务服务器调用MSYNCRESTFUL接口进行消息同步

 MSYNC服务端接收到消息同步的请求后,将同步任务、同步消息入库

 通过长连接将消息同步给客户端

 若客户端不在线,则消息会保存在库中,待客户端在线后进行同步。

其中涉及存储结构包括关系型数据库OB,用来保存同步消息、同步任务信息。缓存数据库Tbase或者Hbase,用来保存客户端链接信息。

1.3    网络架构

如图1-5所示,客户端App 通过DNS解析(或直接暴露IP)连接到streamstream反向代理到msyncmsync查询缓存TBase和数据库OB将同步数据推送给客户端。mAppCenter 和客户业务系统,都可以通过openapi调用msync,进行数据同步。

image.png

图1‑5 MSS网络架构图

msync需要通过TCP长连接主动往客户端推送业务数据,因此需要将MSS的长连接服务暴露在公网上,一般情况下为公网IP配合8666端口使用,如果 8666 合规上不允许,则可以使用80端口,只要确保映射到MSS的服务端口为8666即可。如果前置有 F5 等网络设备,则需要在网络设备上配置成支持长连接,并且最短维持时间需要配置成5分钟以上。根据以往经验,配置最低30+分钟综合表现比较良好。如果安全上要求需要支持SSL,则需要将公网端口设置为443(目前客户端SDK仅支持443端口下进行TCP+SSL长连接),并在网络设备上将443端口映射至MSS服务的8666端口上同理,如果途径DMZ区,需要DMZ区有四层反向服务,进行TCP请求代理和转发

1.4    常用日志

如图1-6所示,包含了MSS常用的运维日志目录,可用于日常运维问题排查使用。

image.png

图1‑6 MSS常用日志介绍

其中关键日志说明如下。

1)日志文件:/home/admin/logs/msync2/pmgw-biz-longlink.log

在该日志中,通过关键字 ConnectInitInvoker 即可确定客户端是否连接至服务端。如下示例,表明在2022-06-03 21:38:08,700,设备IDXLSLQlYHhC0DAKex6GqYX0oS的客户端已连接至服务端。

2022-06-03 21:38:08,700 INFO  LONG-LINK-LOGGER - 0ba0120f1559569088654452286976[ConnectInitInvoker init. linkInfo = null,11.160.18.15_1044776809,1000000772562375,XLSLQlYHhC0DAKex6GqYX0oS,1044776809,sit_82AFEB4241402,,sit_82AFEB4241402,,1.6.14,FOREGROUND,cdaebe3f-17b9-4a64-9f24-a3be0d70005f,false,other,11.160.18.15_2104661442,1,false,10,LONGLINK, msg = LongLinkFrame[v=5, m=0, l=71, z=48]

2)日志文件:/home/admin/logs/msync2/pmgw-biz-longlink.log

在该日志中,通过关键 HeartBeatInvoker 即可判断客户端心跳正常。如下示例,表明在2022-06-03 21:38:05,523,设备IDXPSZFEFKQW0DADzzF+cpXR8R的客户端发起了一次心跳事件。

2022-06-03 21:38:05,523 INFO  LONG-LINK-LOGGER - 0ba0120f1559568837367413686976[HeartBeatInvoker hb. linkInfo = null,11.160.18.15_49488647,,XPSZFEFKQW0DADzzF+cpXR8R,49488647,sit_4B3A8BA151442,,sit_4B3A8BA151442,4B3A8BA151442_ANDROID-sit,0.8.0-sit-debug,FOREGROUND,,false,other,11.160.18.15_1008819317,1,false,10,LONGLINK, msg = LongLinkFrame[v=5, m=3, l=0, z=0]

3/home/admin/logs/msync2/pmgw-biz-longlink.log

在该日志中,通过关键字 invalid app!!! 即可判断客户端连接初始化验签失败。如下示例,表明在2022-05-21 17:32:28,570,客户端连接初始化失败。

2022-05-21 17:32:28,570 WARN  LONG-LINK-LOGGER - 0ba0120f1558430792924834670987[invalid app!!!  instanceId=test4_4B3A8BA151442, initMsg=linkToken: "216610000000445703113"

4/home/admin/logs/msync2/mobilesync-sync-data-digest.30dt.log

在该日志中,通过关键字 syncData 即可确定业务系统是否调用MSS服务接口。如下示例,表明在2022-01-02 10:43:14,305,某系统调用m2088402647291319推送了一条UCF-HCCO的数据;此外,可继续根据/home/admin/logs/msync2/mobilesync-sync-data.log 进行协助排查详细流程情况。

2022-01-02 10:43:14,305,[0a35a7b915148609942845455109577,syncData,2088402647291319,UCF-HCCO,true,2017082408080800008000000291310000000001Tue Jan 02 10:43:14 CST 2018UC2088402647291319,true,180142104314200001,100,4,ALIPAY_WALLET,null,-]##mobilesync-30-7707

5)日志文件:/home/admin/logs/msync2/mobilesync-sync.log

在该日志中,通过关键字 C-1001 即可确定客户端建立连接以后触发同步事件,示例如下。

2022-06-03 21:55:38.784,0ba0120f1559570138782620286976, $$[ @ C-1001]$$ --> [-,WbI3+un5ivsDAJZEKXfD45rC,-,-,-,-] {syncVersion=1,opCode=1001,osType=android,osVersion=,productId=516DAA5131133_ANDROID-dev,vmType=null,brand=,model=,clientVersion=201811131542102052,channel=null,prisonBreaked=null,userIdentity=null,residence=null,session=false,clientSkey={APLUS-CONFIG-USER=0, APLUS-CONFIG=0, F2F_PAY_RESULT=0, UNI-RESULT-PAGE=0, MSG-CENTER-S-USER=0},bucketSkey=null,initTag=false,initMerge=false,connectType=10,linkType=LONGLINK,linkInfoKey=11.160.18.15_2037080267,appStatus=1,gwInternalIp=11.160.18.15,appName=ALIPAY_WALLET},extParaMap={syncVer=1},tagExtMap=null

6)日志文件:/home/admin/logs/msync2/mobilesync-sync.log

在该日志中,通过关键字 C-3001 即可确定客户端登录以后发起了绑定用户事件,示例如下。

2022-06-03 21:55:58.148,0ba0120f1559570158147624086976, $$[ @ C-3001]$$ --> [216610000004382851973,WbI3+un5ivsDAJZEKXfD45rC,-,-,-,-]  {syncVersion=1,opCode=3001,osType=android,osVersion=,productId=516DAA5131133_ANDROID-dev,vmType=null,brand=,model=,clientVersion=201811131542102052,channel=null,prisonBreaked=null,userIdentity=null,residence=null,session=false,clientSkey={APLUS-CONFIG-USER=0, F2F_PAY_RESULT=0, UNI-RESULT-PAGE=0, MSG-CENTER-S-USER=0},bucketSkey=null,initTag=false,initMerge=false,connectType=10,linkType=LONGLINK,linkInfoKey=11.160.18.15_2037080267,appStatus=1,gwInternalIp=11.160.18.15,appName=ALIPAY_WALLET}

7)日志文件:/home/admin/logs/msync2/mobilesync-sync-digest.30dt.log

在该日志中,通过关键字 20012002 即可确定MSS有没有推送给客户端,客户端有没有收到。

关键字 2001,表明服务器发起推送。关键字2002,客户端收到数据后返回了回执。如下示例,表明MSS2022-01-02 10:43:14,305推送给2088402647291319一条UCF-HCCO的数据,并且在2022-01-02 10:43:14,345的时候收到了客户端ack

此外,可继续根据 /home/admin/logs/msync2/mobilesync-sync.log 进行协助排查详细流程情况。

2022-01-02 10:43:14,305,[0a35a7b915148609942845455109577,2001,iOS,IPHONE_1ND_BETA,10.1.12.122916,WiperVm2KH0DANZr7BSkDsqr,2088402647291319,UCF-HCCO,180142104314200001,wifi,-,-,ALIPAY_WALLET,1,LINK,noPush,1513781985934,1000,-,1,1m,0,-]##mobilesync-30-7707

 

2022-01-02 10:43:14,345,[0bbeed681514860994342690344417,2002,iOS,IPHONE_1ND_BETA,10.1.12.122916,WiperVm2KH0DANZr7BSkDsqr,2088402647291319,UCF-HCCO,180142104314200001,wifi,40,-,ALIPAY_WALLET,1,LINK,-,1513781985934,-,-,1,1m,0,]##mobilesync-30-7666

1.5    常见问题

1MSS数据推送客户端无任何响应问题

标准的MSS服务会对客户端长连接建立后的第一个初始化请求进行数据验签以确保客户端为可信终端,而验签需要依赖客户端无线保镖SDK。因此,如果遇到MSS数据推送客户端无任何响应的情况,请先确认无线保镖功能可正常使用。

2MSS设备维度数据客户端成功收到、用户维度数据未收到问题

MSS用户维度数据同步,需要依赖用户ID,而用户ID会在建立连接后第一个初始化包一起上报,或者由登录行为触发上报。因此,这种问题,一般是因为为客户端未做用户登录或登录成功后未通知MSS SDK进行用户与长连接的绑定,请参考客户端集成文档检查绑定接口是否调用。

目录
相关文章
|
4月前
|
弹性计算 人工智能 安全
|
SQL 运维 数据库
【运维知识进阶篇】如何部署数据库主从同步?
【运维知识进阶篇】如何部署数据库主从同步?
227 0
|
存储 弹性计算 运维
《企业运维之弹性计算原理与实践》——第一章 云网络总览与概述——第一章(上):云服务及弹性产品介绍(1)
《企业运维之弹性计算原理与实践》——第一章 云网络总览与概述——第一章(上):云服务及弹性产品介绍(1)
147 0
|
云安全 弹性计算 运维
《企业运维之弹性计算原理与实践》——第一章 云网络总览与概述——第一章(上):云服务及弹性产品介绍(4)
《企业运维之弹性计算原理与实践》——第一章 云网络总览与概述——第一章(上):云服务及弹性产品介绍(4)
119 0
|
存储 运维 负载均衡
mPaaS云平台运维系列之—高可用架构介绍
mPaaS云平台运维系列之—高可用架构介绍
1228 0
mPaaS云平台运维系列之—高可用架构介绍
|
存储 弹性计算 运维
《企业运维之弹性计算原理与实践》——第一章 云网络总览与概述——第一章(上):云服务及弹性产品介绍(2)
《企业运维之弹性计算原理与实践》——第一章 云网络总览与概述——第一章(上):云服务及弹性产品介绍(2)
139 0
|
弹性计算 运维 网络安全
《企业运维之弹性计算原理与实践》——第一章 云网络总览与概述——第一章(上):云服务及弹性产品介绍(5)
《企业运维之弹性计算原理与实践》——第一章 云网络总览与概述——第一章(上):云服务及弹性产品介绍(5)
127 0
|
机器学习/深度学习 弹性计算 人工智能
《企业运维之弹性计算原理与实践》——第一章 云网络总览与概述——第一章(上):云服务及弹性产品介绍(7)
《企业运维之弹性计算原理与实践》——第一章 云网络总览与概述——第一章(上):云服务及弹性产品介绍(7)
78 0
|
SQL 安全 大数据
《CDP企业数据云平台从入门到实践》——Cloudera CDP 产品介绍 (1)
《CDP企业数据云平台从入门到实践》——Cloudera CDP 产品介绍 (1)
675 0
|
弹性计算 分布式计算 安全
《CDP企业数据云平台从入门到实践》——Cloudera CDP 产品介绍 (2)
《CDP企业数据云平台从入门到实践》——Cloudera CDP 产品介绍 (2)
300 0

热门文章

最新文章