在高并发业务场景下,消息队列在架构设计中至关重要,特别是在异步处理、削峰、解耦上有不可替代的作用。目前较为流行的消息队列中间件有Kafka、ZeroMQ、RabbitMQ、RocketMQ、ActiveMQ、Pulsar 等。那么,消息队列中间件这么多,系统架构设计时,到底该如何选型呢?
1.开源产品优先,并且该产品的社区活跃度较高,社区活跃度高意味着使用的人多,产品在出现bug时,不仅能得到很快的修复,而且前人前人踩过的坑,你不必重蹈覆辙了。另外,在选择开源产品时,不要选用该产品的最新版本,一般选择较为稳定的版本。
2.可替代性,任何消息队列中间件都可能不是最佳的技术选型,架构设计时,我们要考虑备选方案。选择的中间件可替代,尽可能地做到出现问题时,能快速切换到备选方案,实现动态插拔,无代码入侵。
3.从中间件本身支持高可用、可靠传递、持久化、高性能的程度上进行考虑。
4.从团队的整体技术能力、学习成本、易用性、可操作性上进行考虑,选择更适合团队开发成员的消息中间件。
5.从产品的运维部署方面进行考虑,选择运维部署方便、可扩展能力强、监控跟踪方便的消息中间件。
一、RabbitMQ
RabbitMQ ,使用 Erlang 编程语言编写的,发布于2007年,最早用于电信行业系统之间的可靠通信,支持 AMQP 协议的消息。
优点:
缺点:
二、RocketMQ
RocketMQ 是阿里巴巴在 2012 年开源的消息队列产品,用 Java 语言实现,在设计时参考了 Kafka,并做出了一些改进,后来捐赠给 Apache 软件基金会,成为 Apache 的顶级项目。RocketMQ 在阿里内部被广泛应用在订单,交易,充值,流计算,消息推送,日志流式处理,Binglog 分发等场景。经历过多次双十一考验,它的性能、稳定性和可靠性都是值得信赖的。
优点:
缺点:
三、Kafka
Apache Kafka 是一个分布式消息发布订阅系统。它最初由 LinkedIn 公司基于独特的设计实现为一个分布式的日志提交系统,之后成为 Apache 项目的一部分。在早期的版本中,为了获得极致的性能,在设计方面做了很多的牺牲,比如不保证消息的可靠性,可能会丢失消息,也不支持集群,功能上也比较简陋,这些牺牲对于处理海量日志这个特定的场景都是可以接受的。
优点:
缺点:
系统架构设计中,对于高并发场景下的消息队列及相关技术选型,可以参考以下几条建议: