IM系统的MQ消息中间件选型 消息中间件分布式系统事务一致性解决方案大对比

时间:2020-10-20

网站即时通讯

IM系统的MQ消息中间件选型

消息中间件分布式系统事务一致性解决方案大对比,谁最好使

目前对消 息中间件(MOM)的定义还未形 成统一的行业标准,我国也 正加快对消息中间件技术的标准化研 究工作。一般认为,消息中间件是一种由消息传送机制或消息队列模式组成的中间件技术,利用高效可靠的消息传递机制进行平台无关的数据交流,并基于数据通信来进行分布式系统的集成。与其它中间件技术不同(例如ORB 和RPC),一般来说,消息中间件并不要求系统具备一个可靠的底部传输层,而是通过以消息的形式收发应用程序数据来连接运行于不同系统上的应用程序。信息可以同步传送,也支持异步传送。在异步方式下,应用程序并不需要消息即时即刻传送到对方,只是由MOM 确保把信息以消息的方式传送到适当的目的地,并且只传一次。 消息中间件属于中间件的一种,拥有中间件的主要特点,但是自身的工作机制又具有特殊性,主要特点包括以下6 个方面:(1)异步传送;(2)防御通信;(3)并发执行;(4)日志通信;(5)多种通信方式;(6)应用程序与网络复杂性相隔离。

怎么选择合适的开源消息中间件

能选择的有三 种:

1. ActiveMQ/ApolloMQ

优点: 老牌的消息队列, 使用Java语言编 写。对视酷S支持最好,采用多线程并发,资源消耗比较大。如果你的主语言是Java,可以重点考虑。

缺点:由于历史悠久,历史包袱较多,版本更新很缓慢。集群模式需要依赖实现。最新架构的产品被命名为Apollo,号称下一代ActiveMQ,目前案例较少。

2. RocketMQ/Kafka

优点:专为海量消息传递打造,主张使用拉模式,天然的集群、HA、负载均衡支持。话说还是那句话,适合不适合看你有没有那么大的量。

缺点:所谓鱼和熊掌不可兼得,放弃了一些消息中间件的灵活性,使用的场景较窄,需关注你的业务模式是否契合,否则山寨变相使用很别扭。除此之外,RocketMQ没有.NET下的客户端可用。RocketMQ身出名门,但使用者不多,生态较小,毕竟消息量能达到这种体量的公司不多,你也可以直接去购买阿里云的消息服务。Kafka生态完善,其代码是用Scala语言写成,可靠性比RocketMQ低一些。

3. RabbitMQ

优点:生态丰富,使用者众,有很多人在前面踩坑。AMQP协议的领导实现,支持多种场景。淘宝的MySQL集群内部有使用它进行通讯,开源云平台的通信组件,最先在金融行业得到运用。

缺点:Erlang代码你Hold得住不? 虽然Erlang是天然集群化的,但RabbitMQ在高可用方面做起来还不是特别得心应手,别相信广告。