一、为什么需要消息队列服务?
在高并发环境下,由于来不及同步处理,请求往往会发生堵塞,比如大量的insert,update之类的请求同时达到mysql,直接导致无数的行锁表锁,甚至最后请求堆积过多,从而触发too many connections错误。通过使用消息队列,我们可以异步处理请求,从而缓解系统的压力。
二、选择MQ时主要关注的特性
1) 通信模式(是否满足业务场景):
ActiveMQ: queue(producer/consumer), topic(publisher/subscriber)
RabbitMQ: AMQP协议支持路由选择和广播
ZeroMQ: 支持REQ、PUSH、PULL等模式
2) 支持的接口语言:
RabbitMQ、ZeroMQ、ActiveMQ均支持常用的多种语言客户端 C++、Java、.Net,、Python、 Php、 Ruby等。
3) 消息持久化:
ActiveMQ 和 RabbitMQ都支持
4) 服务器主备搭建,客户端自动failover支持:
ActiveMQ(非常容易) > RabbitMQ > ZeroMQ
5) 性能
6) 监控、配置
方便监控、配置
三、各类MQ比较
ActiveMQ
Apache ActiveMQ居于两者(RabbitMQ & ZeroMQ)之间,类似于ZeroMQ,它可以部署于代理模式和P2P模式。
ActiveMQ被誉为Java世界的中坚力量。
类似于RabbitMQ,它少量代码就可以高效地实现高级应用场景。
RabbitMQ
RabbitMQ是使用Erlang编写的一个开源的消息队列,本身支持很多协议:AMQP,XMPP,SMTP,STOMP,也正是如此,使它变得非常重量级,更适合企业级的开发。RabbitMQ是AMQP协议领先的一个实现,它实现了代理(Broker)架构,意味着消息在发送到客户端之前可以在中央节点上排队。
对路由(Routing),负载均衡(Load balance)或者数据持久化都有很好的支持。此特性使得RabbitMQ易于使用和部署,适宜很多场景如路由、负载均衡或消息持久化等,用消息队列只需要几行代码就可以搞定。但是,这使得它的扩展性差,速度较慢,因为中央节点增加了延迟,消息封装后也比较大。
RabbitMQ需要在目标主机上安装Erlang环境。
ZeroMQ
ZeroMQ号称最快的消息队列系统,尤其针对大吞吐量的需求场景。是一个非常轻量级的消息系统,专门为高吞吐量/低延迟的场景开发,在金融界的应用中经常可以发现它。与RabbitMQ相比,ZeroMQ支持许多高级消息场景,但是你必须实现ZeroMQ框架中的各个模块(比如Socket或者Device等)。
ZeroMQ能实现RabbitMQ不擅长的高级/复杂的队列,但是开发人员需要自己组合各种技术框架,技术上的复杂度是对这个MQ能够应用成功的挑战。ZeroMQ具有一个独特的非中间件的模式,你不需要安装和运行一个消息服务器或者中间件,因为你的应用程序将扮演这个服务角色。你只需要简单的引用ZeroMQ程序库,可以使用NuGet安装,然后你就可以愉快的在应用程序之间发送消息了。
但是,ZeroMQ仅提供非持久性的队列,也就是down机,数据将会丢失。
Kafka/Jafka
Kafka(能将消息分散到不同的节点上)是LinkedIn于2010年12月开发并开源的一个分布式MQ系统,现在是Apache的一个孵化项目,是一个高性能跨语言分布式Publish/Subscribe消息队列系统,而Jafka是在Kafka之上孵化而来的,即Kafka的一个升级版。
Kafka具有以下特性:
快速持久化,可以在O(1)的系统开销下进行消息持久化;
高吞吐,在一台普通的服务器上既可以达到10w/s的吞吐速率;
完全分布式,Broker,Producer,Consumer都原生自动支持分布式,自动实现负载均衡;
支持Hadoop数据并行加载,对于像Hadoop的一样的日志数据和离线分析系统,但又要求实时处理的限制,这是一个可行的解决方案。
Redis
Redis是一个Key-Value的NoSQL数据库,开发维护很活跃,虽然它是一个Key-Value数据库存储系统,但它本身支持MQ功能,所有完全可以当做一个轻量级的队列服务来使用。
四、参考
http://blog.ftofficer.com/2010/03/translation-rabbitmq-python-rabbits-and-warrens/ 兔子和兔子窝
相关推荐
TIBCO Rendezvous(或称为TIBCO RV)产品是一种中间件,它具有发布/订阅(Publish/Subscribe)、基于主题寻址(Subject-Based Addressing) 和自定义数据信息(Self-Describing Data Messages)等专利技术功能,使不同应用...
消息中间件在分布式系统中的作用介绍,对比消息中间件
国产化中间件行业深度分析.pdf
消息队列中间件调研文档。ActiveMQ、RabbitMQ、RocketMq、Joram、HornetQ、OpenMQ等的对比。
消息中间件activemq的入门demo,以及集成了spring管理jsm的初始化管理,简化发送消息的步骤。前后两个项目的对比,凸显出spring的优点
Android操作系统与数字电视中间件的对比分析
自己在公司做讲师的时候整理的,什么是消息中间件?里面包含 为什么选择Kafka? Kafka的使用 Kafka是顺序消费吗? Kafka与其他消息中间件对比,可以加深对kafka的理解。
消息中间件技术选型,ActiveMQ、Apollo、RabbitMQ、RocketMQ、Kafka、Redis、ZeroMQ多维护对比分析
在linux下用于部署读写分离的中间件maxscale。它是实现mysql数据库的读写分离的
什么是消息中间件MOM(Message Oriented Middleware)利用高效可靠的消息传递机制进行平台无关的数据交流,并基于数据通信来进行分布式系统的集成。通过提供消息传递和消息排队模型,它可以在分布式环境下扩展进程...
全书总计 8 章,首先简单介绍了分布式系统和分布式数据库的需求,然后讲解了分布式数据库的实现原理,并对市场上存在的各种分布式数据库中间件进行了对比,再围绕着如何利用 Mycat 实现分布式数据库而展开。...
JMS规范详情 AMQP协议详情 RocketMQ RabbitMQ Kafka ActiveMQ ......对比
如果你有 express ,koa, redux 的使用经验,就会发现...本文主要对比redux, koa, express 的中间件实现,为了更直观,我会抽取出三者中间件相关的核心代码,精简化,写出模拟示例。示例会保持 express, koa,redux 的
全书总计 8 章,首先简单介绍了分布式系统和分布式数据库的需求,然后讲解了分布式数据库的实现原理,并对市场上存在的各种分布式数据库中间件进行了对比,再围绕着如何利用 Mycat 实现分布式数据库而展开。...
用于idea 2020 2.0版本的 金蝶容器插件 便于直接金蝶容器进行开发(替换tomcat)
从高并发、消息路由、高可用、负载均衡等场景对RabbitMQ与Kafaka进行对比,为消息中间件选型提供依据; 此外,分析了Kafaka的EOS使用场景,详细分析了幂等性以及consume-transform-produce事务流程与技术细节。
作为中间件,消息队列是分布式应用间交换信息的重要组件。消息队列可驻留在内存或磁盘上, 队列可以存储消息直到它们被应用程序读走。通过消息队列,应用程序可以在不知道彼此位置的情况下独立处理消息,或者在处理...
Android平台中对页面、原生路由功能的中间件,我的目标是 —— 简单且完美 最新版本 V1.0.0 同类对比 完美配套插件化的实现方案;(目前市面上路由组件都很难配套动态插件化方案) 接入和使用简单易懂; 扩展性极强,...
redux,express,koa中间件实现对比分析这里是示例代码,简单模拟了redux,express,koa的执行流程,替换出了中间件的核心实现,应保留原始结构和主流程,去掉异常处理,替换校准,辅助工具等干扰代码,更方便的帮助...