ZMQ专题学习之一:初识ZeroMQ

ZMQ专题学习之一:初识ZeroMQ

     ZeroMQ号称是“史上最快的消息队列”,基于c语言开发的。引用官方说明定义:“ZMQ(以下ZeroMQ简称ZMQ)是一个简单好用的传输层,像框架一样的一个socket library,他使得Socket编程更加简单、简洁和性能更高。是一个消息处理队列库,可在多个线程、内核和主机盒之间弹性伸缩。

       ZMQ的明确目标是“成为标准网络协议栈的一部分,之后进入Linux内核”。是极具前景的并且是人们更加需要的“传统”BSD套接字之上的一层封装。ZMQ让编写高性能网络应用程序极为简单和有趣。相比较它跟RabbitMQ、ActiveMQ之类的MQ,有着相当本质的区别,其原因在于ZeroMQ根本就不是一个消息队列服务器,更像是一组底层网络通讯库,对原有的Socket API加上一层封装,是我们操作更简便。使用时只需要引入相应的jar包即可。

   ZeroMQ与其他MQ类似,也实现了三种最基本的工作模式:发布-订阅、请求-应答、管道。

ZeroMQ特点

     1.嵌入式消息组件

       ZeroMQ就像是一个嵌入在操作系统内的一个组件,说白了ZeroMQ就是一组jar包,直接嵌入到项目中就可以运行,它不需要一台独立的服务器来承载整个消息系统。ZeroMQ关注的不是消息的可靠送达,而是着眼于端到端的发送,接收…它希望的是尽快完成任务,而不介意部分消息的丢失。但这也并不是说他完全没有持久化的功能,ZeroMQ是具有一定的本地持久化的功能的,但是能保存的数据量比较有限,而且是暂存于内存中的。
   2. 高效的处理速度

    由于ZeroMQ的定位以及对消息的处理方式。ZeroMQ对于消息的处理可以说除却请求-应答模式之外,基本就是不关注消息是否丢失,它只管发送。ZeroMQ的定位ZeroMQ融入到Linux内核中去。基于这两点,高效的处理速度就成了它必不可少的特点之一。

    3.多核下的线程绑定

       传统的多线程并发模式一般会采用锁、临界区、信号量等技术来控制,而ZeroMQ采取的策略是:在创建IO时不要超出CPU核数。当创建一个上下文时都会采用代码“Context context = ZMQ.context(1);”这里就指定了IO线程数。通常情况下一个线程足矣。但是如要创建多个IO线程,最好不要超出CPU核数,因为此时ZeroMQ会将工作线程其实就是那个Poller绑定到每一个核,避免了线程上下文切换带来的开销。


     鉴于上面的特点,下面进行TPS、并发性、持久化、技术点以及扩展性这几个方面与其他MQ产品进行对比:

  1.TPS

     上图显示的是每秒钟发送和接受的消息数。整个过程共产生1百万条1K的消息,从测试数据可以看出,ZeroMQ的性能远远高于其它3个MQ。或者说ZeroMQ与其他3各MQ根本就不再一个量级上比较了。

 2.持久化消息比较

      ZeroMq原生是不支持持久化的,仅支持相当有限的本地缓存,如需要消息持久化需要自己进行扩展。
而ActiveMq和rabbitMq等MQ都支持。                 

 3.并发性

      虽然ZeroMQ在高并发环境下不会出问题,但是有可能会导致本地的缓存区被塞满而导致消息丢失的情况。所以不推荐在并发量较高的情境下使用ZeroMQ。而ActiveMQ在发送到queue的消息并发较多时,消费端只能接收一部分,比如100条消息在较短的时间内发入,总有10来条接收不到,存放在服务器上,而且这些消息一直不能主动发送出来,后面继续进入的消息都能正常处理,最终只有重新启动服务消费端才能接收到那部分剩下的消息。而RabbitMQ,从实现语言来看,它是并发性最好的,原因是它的实现语言是天生具备高并发高可用的erlang语言。

4.技术点以及扩展性

       就扩展性而言,毫无疑问的是ZeroMQ最强,其余其中MQ都已经是成形的产品,已经是一款应用程序了。而ZeroMQ说白了就是一组库函数。基于这种情况,开发者可以按自己的需要实现IPollEvent以及ZObject来开发适合自己的Socket组件,至于它对于消息持久化的不支持,只是原生不支持,因为它的定位不是只保证可靠的消息传输。所以在可靠性这部分我们完全可以按自己的需求进行扩展。

       一组lib的扩展度明显是宽于产品级的rabbitMQ之类的产品。技术上虽然ZeroMQ立志于成为Linux内核的消息组件,但是不得不说它的开源社区活跃度是远远不及RabbitMQ或者ActiveMQ。或许是处于它的可靠性考虑,它的应用场景比较受限制。
      可靠性上虽然ActiveMQ也具备,只是性能上相比于RabbitMQ还是有一定差距,所以大部分的MQ选型都是RabbitMQ。
 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jyl_sh

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值