设为首页 收藏本站
查看: 1501|回复: 0

[经验分享] AMQP学习 & RabbitMQ 与 ActiveMQ、ZeroMQ以及Kafka的比较

[复制链接]

尚未签到

发表于 2017-7-9 14:28:10 | 显示全部楼层 |阅读模式
  之前写了一篇文章关于Active以及消息队列推拉模式的文章,可以参考:link
  关于 Active 与 RabbitMQ以及其他的比较,有如下记录:
  这篇文章 link 提到:
  基本介绍
RabbitMQ:基于AMQP协议(Advanced Message Queue Protocol)
ActiveMQ:基于STOMP协议(注:我只知道是基于JMS)
  注:更多AMQP的内容可以看这里:http://www.infoq.com/cn/articles/AMQP-RabbitMQ
  高级消息队列协议(AMQP1)是一个异步消息传递所使用的应用层协议规范。作为线路层协议,而不是API(例如JMS2),AMQP客户端能够无视消息的来源任意发送和接受信息。
  AMQP详解:http://kb.cnblogs.com/page/73759/
  AMQP协议是一种二进制协议,提供客户端应用与消息中间件之间异步、安全、高效地交互。从整体来看,AMQP协议可划分为三层:
DSC0000.png

  上面是对AMQP协议的大致说明。下面会以我们对消息服务的需求来理解AMQP所提供的域模型。消息中间件的主要功能是消息的路由(Routing)和缓存(Buffering)。在AMQP中提供类似功能的两种域模型:Exchange 和 Message queue。
DSC0001.png

DSC0002.png

  更具体的协议学习看这里:http://www.cnblogs.com/charlesblc/p/6286875.html
  rabbitMQ 是 AMQP 用 Erlang 实现的 MQ 。用 Erlang的原因(Erlang消息机制与AMQP极度吻合):



AMQP 主要是由金融领域的软件专家们贡献的创意,而联合了通讯和软件方面的力量,一起打造出来的规范。
【Contributors: JPMorgan Chase Bank & Co., Cisco Systems, Inc., Credit Suisse, Envoy Technologies Inc.,iMatix Corporation,
IONA Technologies, Rabbit Technologies Ltd., Red Hat, Inc., TWIST Process Innovations Ltd, and 29West, Inc.】

粗略的从概念上来讲 AMQP 首先满足的是金融系统的消息通讯业务需求。
这是一个可以和 JMS 进行类比的消息中间件开放规范,所不同的是 AMQP 同时定义了消息中间件的语意层面和协议层面;
另外一个不同是 AMQP 是语言中立的,而 JMS 仅和 Java 相关。

AMQP 在“语意层面的定义”,这就意味着,它并不仅仅是象 JMS 或者其他的 MQ 一样,仅能按照预定义的方式工作,而是“可编程”的消息中间件。
而“语言中立”则意味着只要遵循 AMQP 的协议,任何一种语言都可以开发消息组件乃至中间件本身。
比如说这样的场景:“Java 写的消息端(新的前端)通过 Erlang 写的消息中间件(基础设施)与 C 写的另外一个消息端(遗留系统)进行消息交互”。

AMQP 是一个开放标准,目前还在 0.9 版本。尚未成熟,但市场上已经出现了很多这个标准的实现产品。

在 AMQP 所描绘的美好前景下,我们可以这么设想将来构建在成熟之后构建在 AMQP 之上的金融系统。
前端程序员用他们熟悉的“工业语言”来构建系统中新的应用模块。后端程序员则继续用“老旧语言”在“遗产系统”上慢慢改进。
当然,金融系统需要他们赖以沟通消息互相调用的“基础设施”必须坚若磐石,为业界提供“高并发,易扩容”的产品,这似乎正是 Erlang 的强项。

之前听说“ Erlang 进入金融系统”,具体的事例,大概就是这件事了。
  更具体一点(不甚懂):



主要因为erlang有七大优势,便于开发消息系统:
1. 分布式
在erlang中,集群是内嵌能力

2. 热代码升级

3. 内嵌进程监控
在任何一个节点都可以监控真个系统

4. 可预测的高速度
不会受到GC的停顿影响(FP的功劳)

5. 点对点

6. 企业级

7. 可移植
  下面是一些指标比较(参考 link )
  第一部分:ActiveMQ,RabbitMQ,ZeroMQ的比较
  1、 TPS比较
  ZeroMq 最好,RabbitMq 次之, ActiveMq 最差。
DSC0003.png

  2. 持久化消息比较
  zeroMq不支持,activeMq和rabbitMq都支持
  持久化消息主要是指:MQ down或者MQ所在的服务器down了,消息不会丢失的机制。
  3. 技术点:可靠性、灵活的路由、集群、事务、高可用的队列、消息排序、问题追踪、可视化管理工具、插件系统、社区
  RabbitMq最好,ActiveMq次之,ZeroMq最差。
  当然ZeroMq也可以做到,不过自己必须手动写代码实现,代码量不小。尤其是可靠性中的:持久性、投递确认、发布者证实和高可用性。
  所以在可靠性和可用性上,RabbitMQ是首选,虽然ActiveMQ也具备,但是它性能不及RabbitMQ。
  4、高并发
  从实现语言来看,RabbitMQ最高,原因是它的实现语言是天生具备高并发高可用的erlang语言。
  第二部分:kafka和RabbitMQ的比较
  1、  RabbitMq比kafka成熟,在可用性上,稳定性上,可靠性上,RabbitMq超过kafka
  2、  Kafka设计的初衷就是处理日志的,可以看做是一个日志系统,针对性很强,所以它并没有具备一个成熟MQ应该具备的特性
  3、  Kafka的性能(吞吐量、tps)比RabbitMq要强,这篇文章的作者认为,两者在这方面没有可比性。
  另外,有这篇PPT讲了Rabbit的一些优点和选型的考虑:link
  PPT已下载,位置:/Users/baidu/Documents/Data/Interview/存储-Nosql-Redis-消息队列/我为什么要选择RabbitMQ.pptx
  (完)

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-392001-1-1.html 上篇帖子: RabbitMq与KafKa比较 下篇帖子: Python通过SSH隧道链接Kafka
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表