通用消息中间件MQ简介
RocketMQ
Ali是一个具有分布式和队列模型的开源消息中间件。它的原名是Metaq,3.0版的名字改成了Rocketmq。是阿里按照kafka的设计思路,用java实现的一套MQ。同时整合了阿里内部的各种mq产品(Notify、metaq),只维护核心功能,去除其他所有运行时依赖,保证最简化的核心功能。在此基础上,配合阿里上面提到的其他开源产品,实现不同场景下的mq架构,目前主要应用在订单交易系统中。
具有以下特征:
1.它可以保证严格的消息顺序。
2.为消息提供过滤功能。
3.提供丰富的消息拉模式。
4.用户横向扩展的有效能力。
5.实时消息订阅机制
6.十亿级消息积累能力
RabbitMQ
Erlang写的一个开源消息队列,支持很多协议:AMQP,XMPP,SMTP,STOMP,这使得它非常重量级,更适合企业开发。同时,实现了代理架构。核心思想是生产者不会将消息直接发送到队列中,而是将消息发送到客户端时在中央队列中排队。它支持路由、负载平衡和数据持久性。它主要用于企业级ESB集成。
ActiveMQ
Apache下的子项目。随着Java完全支持JMS1.1和J2EE 1.4规范的JMS提供者的实现,少量代码就可以高效地实现高级应用场景。支持可插拔的传输协议,例如in-VM、TCP、SSL、NIO、UDP、多播、JGroups和JXTA传输。RabbitMQ、ZeroMQ、ActiveMQ都支持C++、Java、.Net,Python,Php和Ruby。
Redis
用C语言开发的键值NoSQL数据库在开发和维护方面非常活跃。虽然它是一个键值数据库存储系统,但是它支持MQ函数,所以它可以作为一个轻量级的队列服务。对于RabbitMQ和Redis的入队和出队操作,每个操作执行100万次,每10万次记录一次执行时间。测试数据分为四种不同的大小:128字节、512字节、1K和10K。实验表明,加入团队时,Redis在数据量较小时的性能高于RabbitMQ,但当数据量超过10K时,Redis慢得让人难以忍受。出列时,无论数据大小如何,Redis都表现出非常好的性能,而RabbitMQ的出列性能远低于Redis。
卡夫卡
Apache是scala实现的高性能分布式发布/订阅消息队列系统,Apache下的一个子项目具有以下特征:
快速持久化:通过磁盘顺序读写和零拷贝机制,可以在O(1)的开销下持久化消息;
高吞吐量:在普通服务器上可以达到10W/s的吞吐率;
高积累:支持消费者在话题下长时间离线,消息积累大;
完全分布式系统:经纪人、生产者、消费者均原生自动支持分发,依靠zookeeper自动实现复杂平衡;
支持Hadoop数据并行加载:对于Hadoop这样的日志数据和离线分析系统,这是一个可行的解决方案,但是需要实时处理。
ZeroMQ
它被称为最快的消息队列系统,专门为高吞吐量/低延迟场景而开发,通常用于金融应用,重点是实时数据通信场景。ZMQ可以实现RabbitMQ不擅长的高级/复杂队列,但是需要开发者自己组合各种技术框架,开发成本高。所以ZeroMQ有独特的非中间件模式,更像是一个套接字库。不需要安装运行消息服务器或者中间件,因为你的应用本身就是使用ZeroMQ API完成逻辑服务的角色。但是ZeroMQ只提供非持久队列,如果宕机数据会丢失。比如Twitter的Storm中使用ZeroMQ作为数据流的传输。
ZeroMQ socket独立于传输层:ZeroMQ socket为所有传输层协议定义了统一的API接口。支持默认的进程内(inproc)、进程间(IPC)、组播、TCP协议,只需改变连接字符串的前缀就可以在不同协议间切换。您可以随时以最小的成本从进程间的本地通信切换到分布式TCP通信。ZeroMQ在后台处理连接建立、断开和重新连接的逻辑。
功能:
无锁队列模型:对于跨线程交互(客户端和会话)之间的数据交换通道管道,无锁队列算法CAS被采用;异步事件在管道的两端注册。当向管道读取或写入消息时,读写事件将被自动触发。
批量处理算法:对批量消息进行自适应优化,可以批量接收和发送消息。
多核下的线程绑定,无需CPU切换:不同于传统的多线程并发模式、信号量或临界区,zeroMQ充分利用了多核的优势,每个核绑定运行一个工作线程,避免了多线程间的CPU切换开销。
多个比较选项:
1.与ZeroMq相比,TPS最好,其次是RabbitMq和ActiveMq。
2.持久消息比较—不受—zeroMq支持,但受activeMq和rabbitMq支持。持久消息主要是指在MQ宕机或者MQ所在的服务器宕机的情况下,消息不会丢失的机制。
3.可靠性、灵活路由、集群、事务、高可用队列、消息排序、问题跟踪、可视化管理工具、插件系统、社区——rabbit MQ最好,ActiveMq次之,ZeroMq最差。
4.高并发性——rabbit MQ在实现语言上是最高的,因为它的实现语言是erlang语言,具有高并发性和高可用性。
5.RabbitMQ具有更好更全面的性能,是消息中间件的首选。
本文来自长街旧人投稿,不代表舒华文档立场,如若转载,请注明出处:https://www.chinashuhua.cn/24/479443.html