如何设计一款高性能、高并发、高可用的im综合消息平台是很多公司发展过程中会碰到且必须要解决的问题。比如一家公司内部的通讯系统、各个互联网平台的客服咨询系统,都是离不开一款好用且维护的方便im综合消息系统。
那么,我们应该怎么样来设计一款三高特性的im系统,并能同时支持各个业务线的接入(比如:内部OA通讯、客服咨询、消息推送等等功能)有呢?
im第一版设计的初衷是公司需要一款im消息中间件用于支撑客服咨询业务。
但是,考虑到为了方便日后其他业务线也能接入消息沟通平台,所以一开始就将整个消息中心的能力需求给到中间件团队进行开发,以便除客服外的各业务线接入综合消息中心,从而实现多元的消息实时触达能力。
我们逐个解释一下各模块的作用。
1)存储端:
在初版的架构下,存储端我们使用tidb、redis作为主要存储:
1)redis用于存储消息已读未读,缓存连接信息等功能;
2)tidb作为开源的分布式数据库,选择它是为了方便消息的存储。
2)mq消息总线:
我们使用rocketmq来实现消息总线(PS:即分布式情况下,不同im实例间通过MQ进行消息交互)。
消息总线是整个im的核心,使用rocketmq能支持十万级别的tps。基本所有服务都要从消息总线中消费消息进行业务处理。
3)zookeep