1. 概述
本文继续介绍IM系统分布式部署方案。
2. IM分布式部署方案
RabbitMQ支持跨地区分布式集群
部署,其采用的通信协议AMQP
支持TLS证书,保证了数据安全,参考分布式部署文档
但是,如果Region之间带宽受限
时,RabbitMQ集群可能会引起各种不可控
问题,例如脑裂、跨Region消息收发延迟等问题。(RabbitMQ集群对带宽的依赖程度,尚未明确,需要测试)
因此,引入Broker
,解决跨Region消息收发问题。
如下图,Broker
可以认为是区域IM系统的边界网关,负责IM消息的跨Region路由,因此,需要记录IM系统的在线用户路由表
,即IM Online User
与Broker
的对应关系
Broker在线用户路由表
- 维护当前Region的在线用户列表。通过RabbitMQ,接收来自当前区域SM的用户上线/下线通知,且通知Router服务,Router服务再转发给其他Broker
- 维护其他Region的在线用户列表。通过接收Router的用户上线/下线通知,维护其他Region的在线用户列表,以及
在线用户的GroupId列表
(可由Router查库并广播给Broker) - 每次启动,通过Router获取到当前系统完整的在线用户路由表
Broker服务发现
- 每次启动,通过Router获取当前IM系统的Broker地址列表,并注册自己到Router
- 每次退出,需要在Router完成注销,或者通过心跳保证最终注销
- 提供API,供Router回调,以通知其他Broker的上线或下线
Broker消息收发
- 收到
packageType=receive
数据包,则根据本地在线用户路由表
,获取receiver所在region - 如果没有找到region,或者为当前所在region,则drop
- 如果找到region,则通过
grpc stream
通道,转发给对应的broker
备注:每个Region会部署Broker、RabbitMQ、Recorder、Auditor,以及若干SM服务。
3. 小结
下文将介绍IM常见问题与术语,完成系统架构设计。
网友评论