消息平台架构设计

消息平台架构设计

一.消息平台的应用场景及难点
1.解决什么业务问题:
a.端到云的实时上报
b.云到端的是实时推送
c.端到端的聊天消息

2.难点:
a.APP无线环境下消息的可达性
b.通用性,平台实现尽量与业务解耦

二.传统解决方案-端到云的上报

消息平台架构设计消息平台架构设计

三.传统解决方案-云到端的推送

1.云到端:通过第三方push或者推送服务
方案一:采用APNs或者米推等第三方推送
方案二:通过自己搭建mqtt服务推送


2.通过第三方push或者推送服务的缺点:
a.第三方推送服务的可达性和实时性无法保障,同时第三方会进行推送限速
b.Mqtt的可用性是个问题


四.传统解决方案-端到端的消息通讯
   传统方案往往可以通过结合【端到云】与【云到端】来结合解决【端到端】的实时消息推送问题。

消息平台架构设计

消息平台架构设计

五.通用消息平台解决方案

消息平台解决方案的特点:
1.使用TCP长连接,克服Http轮询效率低的瓶颈。
2.使用消息总线msq-queque通过对消息主题的发布和订阅来将消息平台与业务线app-server进行解耦。新增消息发送方,消息平台只需要配置消息类型与消息总线的映射关系,新增的app-server订阅新的主题的即可,实现了消息平台与业务的解耦

消息平台架构设计消息平台架构设计

六.通用消息平台架构
1.msg-sdk:向APP提供帅气的MSG接口。
2.msg-gate:消息平台tcp接入门户,保持tcp长连接,初步攻防,加解密,压缩/解压缩
3.msg-logic:消息平台逻辑处理部分
4.redis:高可用redis集群存储用户在线状态online/offline,以及用户在那一台msg-gate接入(如果在线)
5.DB,存储离线消息
6.业务客户端:业务方APP,可以有多个,通过msg-sdk来接入消息平台
7.MQ:消息平台通过mq来给业务方服务器发“端到云”的消息
8.app-server:业务方后端,可以有多个,通过mq接收“端到云”的消息,通过RPC发送“云到端”的消息

消息平台架构设计

消息平台架构设计

七.通用消息平台架构-分布式架构

消息平台架构设计消息平台架构设计

八.通用消息平台架构-消息投递流程
消息投递流程:
1.消息方将消息发送给消息平台
2.消息平台将消息落地
3.消息平台返回发送成功给 消息发送方
3.与此同时消息平台将消息发送给消息接收方
4.消息接收方发送ack给消息平台,表示已接收
5.消息平台将消息从数据库中删除
6.通知消息接收方ack已经处理


需注意:
如第三步,消息发送方没有收到消息平台的回复,则消息发送方需要重新发送消息
消息接收方如果收到重发的冗余消息需要进行接收方去重,做到服务端无状态。

消息平台架构设计

消息平台架构设计


九.消息平台通用接口
1.Msg-sdk对App提供的核心接口有:
a.login:接入消息平台
b.logout:登出消息平台
c.c2s:发送client to server”端到云”的消息
d.c2c:发送client to client“端到端”的消息
e.get-offline-msg:获取离线消息
f.on-msg-received:收到消息的callback回调接口
2.消息平台对App-server提供的核心接口:
a.s2c:发送server to client “云到端”的消息
3.其他业务方不需要关注,msg-sdk与消息平台之间的内部接口有:
a.keepalive:用于msg-sdk与消息平台的连接保持
b.c2c-ack:用于c2c接口应用层ack接口(对业务方透明)