常用消息队列介绍与对比

2015-03-27 16:36:36   最后更新: 2020-08-06 09:39:47   访问数量:4441




MQ(Message Queue),即消息队列,一般用于应用系统解耦、消息异步分发,能够提高系统吞吐量

MQ 的产品很多,ZeroMQ、RabbitMQ、ActiveMQ、Kafka/Jafka、Kestrel、Beanstalkd、HornetQ、Apache Qpid、Sparrow、Starling、Amazon SQS、MSMQ 等,甚至 Redis 也集成了一个小型消息队列

由于不同的业务需求,可以进行不同的选择

 

RabbitMQ 是一个使用 Erlang 编写的开源消息队列,本身支持很多协议:AMQP,XMPP, SMTP, STOMP

是一个非常重量级的消息队列,是和用于企业级开发

同时实现了一个经纪人(Broker)构架,这意味着消息在发送给客户端时先在中心队列排队

对路由(Routing),负载均衡(Load balance)或者数据持久化都有很好的支持

同时集成了一个小型 webserver,可以在浏览器中监控和调整队列的运转状态

 

rabbitMQ 可谓是功能非常强大,支持四种工作模式:

rabbitmq exchange 的四种模式与点对点消息队列、发布订阅消息队列的实现

 

Redis 本身是一个 KV 的 NoSQL 数据库,但是他也集成了 MQ 的功能,所以可以被当做一个轻量级队列服务使用

实验表明:入队时,当数据比较小时Redis的性能要高于RabbitMQ,而如果数据大小超过了10K,Redis则慢的无法忍受

出队时,无论数据大小,Redis都表现出非常好的性能,而RabbitMQ的出队性能则远低于Redis

 

所以 Redis 适合用于小数据的消息队列服务

 

ZeroMQ 号称最快的消息队列,是一个类似于 socket 的网络通讯队列,不具备数据持久化功能

但是他可以实现复杂的多对多通讯功能,是一个简单好用的传输层,可以被用于分布式通信,也可以被用于进程间通信库

 

twitter 的 Stom 中使用 ZeroMQ 作为数据流的传输

 

Gearman 是一个专门用于任务分发的消息队列,任务可以分为前台同步任务和后台异步任务

提供了任务的持久化机制,使用简单方便

 

ActiveMQ 是 Apache 下的一个开源子项目

用于帮助实现高可用、高性能、可伸缩、易用和安全的企业级面向消息服务的系统

保证消息的可靠异步传输,常常作为消息中间件使用

但是只能用作点对点传输

 

Kafka 是 Apache 下的一个子项目,Jafka 是在 Kafka 之上孵化而来的

支持快速持久化,可在 O(1) 的系统开销下进行数据持久化工作

高吞吐,在一台普通服务器上即可达到 10W/s 的吞吐率

自动实现复杂的分布式负载均衡

作为一个非常轻量级的消息队列系统,不仅支持消息的持久化缓存,同时具有非常好的性能,还是一个良好的分布式系统

 

欢迎关注微信公众号,以技术为主,涉及历史、人文等多领域的学习与感悟,每周三到七篇推文,只有全部原创,只有干货没有鸡汤

 






技术帖      apache      技术分享      存储      rabbitmq      redis      消息队列      分布式      mq      message queue      消息      队列      gearman      ha      分布式存储      zeromq      activemq      jafka      kafka      持久化      通信     


京ICP备15018585号