消息平台是高可用、高并发、可伸缩的分布式系统,致力于为公司内各业务产品线提供基础通用的消息服务,降低公司内各业务子系统间进行信息交互的复杂度,满足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
- 消息不丢不重
- 端对端加密聊天