全景架构
全景架构分三层 分别是
- 接入层 支持mqtt websocket http协议
- 业务逻辑层,支持风控敏感词,路由 会话管理及推送服务
- 存储层,考虑及时推荐的实时存储redis及 历史查看的tikv influxdb 等
模块交互流程图
核心功能流程详细说明
- C端用户通过nginx 网关根据当前ID获取slot(仿redis 集群模式),拿到具体的节点信息,并与访节点建立长链接。
- C端用户发消息至接入层,如果是短链接后端随机一台就可以,如果是长链接则通过上一步建议的长链接进行消息发送
- 后端接入层收到消息后直接将消息打入MQ。 4.1 后端业务层消费消息,进行相应的业务处理后,找到消息的接收方,通过本地的slot 元数据,直接定位到目标用户所在的目标服务器进行推送。(这里参考redis 集群模式,通过java实现gossip协议) 4.2 后端业务异步并行将消息存储至后端存储。redis 和tikv 等后端存储,不影响4.1的消息推送。
由联系人服务与消息推送服务隔离部署,故需要中间联系人信息同步服务,将联系人信息同步至redis。用于推送服务。推送服务有两个场景下会使用该缓存:1. 群消息推送,需要在缓存中获取群成员列表。2推送联系人状态时。
另外用户第一次登录或者重连后需要拉取最新消息。最新的消息直接在redis中拉取比如top 100,走http 协议。用户深度摘取消息走tikv 或者influxdb
该项目架构及源代码开放,并持续升级迭代,后端java. netty 前端react 有感兴趣的小伙伴 欢迎一起参与