聊天室高并发架构概要

简单总结下我理解的聊天室的高并发架构概要设计。

image

  • client在页面初始化时,先访问scheduler服务获取可用的gateway列表,然后长连接gateway接入聊天室服务集群;
  • scheduler服务应设计为异地多活,通过DNS路由给不同scheduler服务集群;
  • scheduler收集所有gateway的metrics,根据HTTPDNS信息、gateway负载信息决定要返回哪些gateway;
  • scheduler长连接gateway列表的第一个gateway,若失败则尝试连接列表的下一个直至连接成功,若列表的gateway都连接失败则重新向scheduler获取gateway列表(根据聊天室返回不同类型gateway,gateway资源是隔离的);
  • scheduler以stick connection的方式和gateway连接上,此时该gateway是有状态的;
  • gateway在负载较大出于自保护的考虑,可能主动断掉一部分client的connection,即反向压力(back pressure)。client收到反向压力信号,主动去连接下一个可用的gateway。

client连接上gateway后,其消息流转流程如下:

image

  • gateway作为聊天室服务集群的接入层,需要考虑限流、降级、鉴权以及反向压力等设计;
  • gateway通过之后的消息,投递给实时消息队列nsq;
  • 具体业务逻辑的logic模块,异步消费上游消息后,将回复给client的消息投递到另一个nsq,等待gateway进行消费;
  • 若有其他业务方需要投递消息给client,也是将消息投递到nsq,等待gateway消费;
  • 需要有一个分布式配置中心(携程的Apollo),通过配置的实时变更实现开关、限流值调整、灰度等等动态特性。