祝大家每日进步,有技术问题多多交流,同时欢迎大家关注我的头条号:IT人孙会良 消息平台架构设计 一.消息平台的应用场景及难点 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接口(对业务方透明) ———————————————— 版权声明:本文为CSDN博主「大道化简」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/sunhuiliang85/java/article/details/78235866 |
|