通用消息平台架构

消息平台是高可用、高并发、可伸缩的分布式系统,致力于为公司内各业务产品线提供基础通用的消息服务,降低公司内各业务子系统间进行信息交互的复杂度,满足C2C(用户对用户)、C2B(用户对商家)、B2C(商家对用户)的沟通需求。

消息平台为C端用户提供了私聊、群聊、密聊、聊天室、漂流瓶等多形式多场景的即时通讯功能,同时,平台还支持公司内各业务子系统间进行消息流转,如B端商家通过该系统可以定向地为用户实时推送各种业务消息,如订单消息、活动促销消息等。

1.0

消息平台第一个版本为了快速响应业务需求,是一个单体架构:

接入层、逻辑层、存储层全部在一个进程内实现,最大缺点就是无法水平扩展。

2.0

系统将接入层、逻辑层、数据层微服务化,实现水平可扩展。架构如下:

关键模块

  • comet:消息平台的接入门户(支持 ws/tcp),保持长连接,初步攻防(消息频率限制),加解密,压缩解压缩,水平可扩展
  • logic:消息平台内部对消息的处理逻辑,无业务逻辑(app-server部分负责),只维持用户在线状态,对消息进行在线投递或离线存储,水平可扩展
  • cache:高可用redis集群,存储用户在线状态,以及用户在哪一台comet接入(如果在线)
  • mq: 消息队列,logic将消息投递到mq中对应业务方的topic队列,业务方从它订阅topic队列中消费消息,即不同业务方的消息会投递到不同的主题队列
  • job: 消费mq里的发往客户端的消息,将消息发送到comet,水平可扩展
  • etcd:服务注册发现/配置中心

业务对接

  • APP/PC/Web:业务方客户端,可以有多个,如聊天客户端、交易所客户端、电商客户端
  • app-server:业务方服务端,可以有多个,如聊天服务端、OTC服务端、电商服务端等,负责处理消息对应的具体业务逻辑。

comet 接口

  • PushMsg: 往msg接收方对应的连接写msg

logic 接口

  • Connect:用户建立连接
  • Disconnect:用户关闭连接
  • HeartBeat:连接保持心跳
  • Receive:接收客户端消息
  • Push:业务服务端推送消息给客户端

TODO

  • 消息不丢不重
  • 端对端加密聊天
彦祖老师 wechat