最新公告
  • 欢迎您光临码农资源网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!加入我们
  • 常用的主流消息中间件介绍与性能对比

    消息队列中间件是分布式系统中重要的组件,主要解决应用耦合、异步消息、流量削峰等问题。它可以实现高性能、高可用、可伸缩和最终一致性架构,是大型分布式系统不可缺少的中间件。

    消息队列在电商系统、消息通讯、日志收集等应用中扮演着关键作用,作为提升应用性能的重要手段,分布式消息队列技术在互联网领域得到了越来越广泛的关注 。我们常用的分布式消息队列开源软件有:Kafka、ActiveMQ、RabbitMQ 及 RocketMQ。

    常用的主流消息中间件

    消息队列是一种 “先进先出” 的数据结构;其中常运用的数据结构为链表(一般采用双向列表),其主要应用场景主要为3各方面:应用解耦、流量削锋、数据分发。

    应用解耦:系统的耦合性越高,容错性就越低。以电商应用为例,用户创建订单后,如果耦合调用库存系统、物流系统、支付系统,任何一个子系统出了故障或者因为升级等原因暂时不可用,都会造成下单操作异常,影响用户使用体验。

    流量削锋:应用系统如果遇到系统请求流量的瞬间猛增,有可能会将系统压垮。有了消息队列可以将大量请求缓存起来,分散到很长一段时间处理,这样可以大大提到系统的稳定性和用户体验。

    数据分发:通过消息队列可以让数据在多个系统之间进行流通。数据的产生方不需要关心谁来使用数据,只需要将数据发送到消息队列,数据使用方直接在消息队列中直接获取数据即可。

    ActiveMQ的优缺点

    ActiveMQ:是 Apache 出品,最流行的,能力强劲的开源消息总线,并且它一个完全支持 JMS 规范的消息中间件。

    优点:

    1. 基于 JAVA,跨平台运行

    2. 可以用 JDBC 连接多种数据库

    3. 有完善的界面、监控、安全机制

    4. 自动重连和错误重试

    缺点:

    1. 社区活跃度不及 RabbitMQ

    2. 目前重心放到 6.0 产品 Apollo,对 5 的 Bug 维护较少

    3. 不适合用于上千个队列的应用场景

    RibbitMQ的优缺点

    RibbitMQ:是使用 Erlang 语言开发的开源消息队列系统,基于 AMQP 协议来实现。

    优点:

    1. 基于 Erlang,支持高并发

    2. 支持多种平台,多种富户端,文档齐全

    3. 可靠性高

    4. 在互联网公司有较大规模的应用,社区活跃度高

    缺点:

    1. Erlang语音较为小众,不利于二次开发

    2. 代理架构下,中央节点增加了延迟,影响性能

    3. 使用 AMQP 协议,使用起来有学习成本

    RocketMQ的优缺点

    RocketMQ:是阿里开源的消息中间件,目前也已经孵化为 Apache 顶级项目,它是纯 Java 开发,具有高吞吐量、高可用性、适合大规模分布式系统应用的特点。

    优点:

    1. 基于 Java,方便二次开发

    2. 单机支持 1 万以上持久化队列

    3. 内存与磁盘都有一份数据,保证性能+高可用

    4. 开发度较活跃,版本更新很快

    缺点:

    1. 客户端种类不多,较成熟的是 Java、C++、GO等

    2. RocketMQ 的官方文档相对简单一些

    3. 社区关注度及成熟度不如 RabbitMQ

    Kafka的优缺点

    Kafka:是 LinkedIn 开源的分布式发布-订阅消息系统,目前归属于 Apache 顶级项目。Kafka 主要特点是基于 Pull 的模式来处理消息消费,追求高吞吐量,一开始的目的就是用于日志收集和传输。

    优点:

    1. 原生的分布式系统

    2. 零拷贝技术,减少IO操作步骤,提高系统吞吐量

    3. 快速持久化:可以在O(1)的系统开销下进行消息持久化

    4. 支持数据批量发送和拉取

    缺点:

    1. 单机超过64个队列/分区时,性能明显劣化

    2. 使用短轮询方式,实时性取决于轮询间隔时间

    3. 消费失败不支持重试

    4. 可靠性比较差

    对比

    ActiveMQ 最“老”,老牌,但维护较慢;

    RabbitMQ 最“火”,各种场景通杀;

    RocketMQ 最“猛”,功能强,但考验公司运维能力;

    Kafka 最“强”,支持超大量数据,但消息可靠性弱。

    结论:

    中小型软件公司,建议选 RabbitMQ。一方面,erlang 语言天生具备高并发的特性,而且他的管理界面用起来十分方便。虽然RabbitMQ是开源的,但是国内能定制化开发erlang的程序员较少。所幸,RabbitMQ 的社区十分活跃,可以解决开发过程中遇到的bug,这点对于中小型公司来说十分重要。不考虑 rocketmq 和 kafka 的原因是,一方面中小型软件公司不如互联网公司,数据量没那么大,选消息中间件,应首选功能比较完备的,所以 kafka 排除。但是 rocketmq 已经交 apache管理,所以rocketmq 的未来发展趋势看好。

    大型软件公司,根据具体使用在 rocketMq 和 kafka 之间二选一。一方面,大型软件公司,具备足够的资金搭建分布式环境,也具备足够大的数据量。针对rocketMQ,大型软件公司也可以抽出人手对rocketMQ进行定制化开发,毕竟国内有能力改 JAVA 源码的人,还是相当多的。至于 kafka,根据业务场景选择,如果有日志采集功能,肯定是首选 kafka 了。具体该选哪个,看使用场景。

    想要了解更多内容,请持续关注码农资源网,一起探索发现编程世界的无限可能!
    本站部分资源来源于网络,仅限用于学习和研究目的,请勿用于其他用途。
    如有侵权请发送邮件至1943759704@qq.com删除

    码农资源网 » 常用的主流消息中间件介绍与性能对比
    • 7会员总数(位)
    • 25846资源总数(个)
    • 0本周发布(个)
    • 0 今日发布(个)
    • 293稳定运行(天)

    提供最优质的资源集合

    立即查看 了解详情