zoukankan      html  css  js  c++  java
  • RabbitMQ系列(一)--消息中间件MQ如何去选择

    MQ在项目中的应用很普遍,本人所在项目组使用的是ActiveMQ,但是后面介绍的RabbitMQ。。。

    一、应用场景

    1、异步处理

    2、流量削峰、秒杀

    3、日志处理,推荐kafka

    4、应用解耦

    二、衡量指标

    我们从服务性能、数据存储、集群结构三个方面去对比,选择适合自己项目的消息中间件

    1、ActiveMQ

    特点:

      早期主流的消息中间件,包括ZeroMQ,但是这几年使用的很少了,主要在长期维护的项目中使用。API丰富,本身很成熟但是在高并发、大数据

    环境下的性能不够出色,主要试用于中小型项目,有较低的概率丢失数据,最主要是的,官方现在维护的频率一直在降低,好几个月才发布一个版本。

    架构:

      1、Master-Slave模式,通过Zookeeper实现节点切换和故障转移

      2、NetWork模式,相当于多套Master-Slave模式,通过NetWork网关进行集成

    2、kafka

    特点:

      基于pull模式来处理消息消费,追求高吞吐量,开始的目的是日志采集和传输,0.8版本开始支持复制,不支持事务,对消息的重复、丢失

    、错误没有严格要求,适合大数据服务的数据计算、日志采集业务

      topic数量从几十到几百的时候,吞吐量会大幅度下降,本身支持的功能比较简单,可能有消息重复消费

    集群:

      通过zookeeper集群管理多个kafka节点,节点之间相互replication

    3、RocketMQ

    特点:

      纯Java开发,具备高吞吐量(10W级别)、高可用性、适合大规模分布式系统应用的特点。思路起源于kafka,对事务的可靠性传递和事务性

    进行优化,在阿里巴巴广泛应用于交易、充值、流计算、消息推送、日志流式处理、binglog分发等场景,但是商业版收费

      MQ功能较为完善,拓展性好,因为是分布式的,接口简易,支持复杂的MQ业务场景,本身是阿里出品,品质有所保障

      社区维护一般,没有特别活跃,而且万一像之前的Dubbo一样,没人维护了,就凉了(Dubbo现在已经重新维护,接连发布很多版本)

    集群:

      master-slave、2M-2S、多主多从等

    4、RabbitMQ

    特点:

      开源的消息代理和队列服务器,在普通协议在不同的应用之间共享数据,使用Erlang编写(Erlang进行数据交换的性能很好,和原生socket

    一样好的延迟响应效果),遵守AMQP协议,AMQP主要特征是面向消息、队列、路由(点对点的发布/订阅)、可靠性、安全。适合对数据一致性、

    稳定性(100%消息投递)和可靠性要求很高的场景,对性能和吞吐量的要求其次。

    优点:

      能达到几万级别的吞吐量(和具体的机器配置有关),但是相比kafka和RocketMQ差了不少,因为采用Erlang,时延性是微秒级别,

    最重要的是有专门的可视化界面,很方便进行管理,社区非常活跃,功能很完备

    缺点:

      吞吐量的问题,因为是Erlang语言开发,很难去查看源码。如果存在什么问题,只能等官方去解决,对其掌控度很低,但是社区活跃

    度很高,这个影响也不大的

     

    综上:

      如果是大数据肯定推荐kafka,kafka是业内的标准,绝对没问题。

      而RocketMQ更加优秀,但是好像商业版收费,社区有黄掉的风险,适合大公司对自己的技术实力有很大自信的,可以自己维护扩展

      RabbitMQ方面,Erlang语言是一个限制,毕竟国内精通这个的不多,好在是开源的,稳定支持,适合中小型公司吧

      本人比较喜欢RocketMQ的,虽然这个系列是学习RabbitMQ,以后肯定还是学习RocketMQ,相对RabbitMQ优点很明显。

    关于三者详细对比,可以参考:常用MQ产品的对比,里面表格对比显示的很详细

  • 相关阅读:
    iOS WKWebView与JS的交互
    iOS开发-APP图标、启动页、名字的设置
    [UIApplication sharedApplication].keyWindow和[[UIApplication sharedApplication].delegate window]区别
    iOS开发makeKeyAndVisible和makeKeyWindow区别
    iOS开发之微信第三方登录
    Xcode 10 Error: Multiple commands produce
    iOS开发WKWebView 返回H5上级页面
    iOS中nil、 Nil、 NULL和NSNull的区别
    iOS中dealloc原理
    HTTP原理及状态码汇总
  • 原文地址:https://www.cnblogs.com/huigelaile/p/10906397.html
Copyright © 2011-2022 走看看