zmq--概述-1

一、zmq概念

    zmq(zeroMQ, zero-message-queue)看起来像一个可嵌入的网络库,但是却像一个并发框架,可重用的消息传递系统。

  •  跨过程,IPC,TCP,TIPC,多播传送消息。
  •  智能模式,例如pub-sub,push-pull和router-dealer。
  •  小型库中的高速异步I / O引擎。
  •  支持每种现代语言和平台。
  •  构建任何架构:集中式,分布式,小型或大型

二、为什么需要zmq

    如今,许多应用程序由跨某种网络(局域网或Internet)延伸的组件组成。因此,许多应用程序开发人员最终都进行了某种消息传递。一些开发人员使用消息队列产品,但是大多数时候他们使用TCP或UDP自己进行消息排队。团队一遍又一遍地建造这个特殊的轮子。但是如何制作可重用的消息传递层呢?为什么当这么多项目需要这种技术时,人们仍然通过驱动代码中的TCP套接字并一遍又一遍地解决这一长列表中的问题,仍然以艰难的方式来做这项工作吗? 我们需要的是一种可以完成消息传递功能的事情,但是它以一种简单而廉价的方式完成了工作,使其可以在任何应用程序中工作,而成本却几乎为零。它应该是您仅链接的库,没有任何其他依赖关系。它应该可以在任何操作系统上运行并可以与任何编程语言一起使用。这就是ZeroMQ:一个高效,可嵌入的库,它解决了应用程序需要在网络上实现良好弹性而无需花费太多成本的大多数问题

让我们看一下开始使用原始TCP进行连接时遇到的典型问题。任何可重用的消息传递层都需要解决所有或大多数这些问题:

  • 我们如何处理I / O?我们的应用程序会阻塞还是在后台处理I / O?这是关键的设计决策。阻塞I / O会导致架构扩展性不佳。但是后台I / O很难正确处理。

  • 我们如何处理动态组件,即暂时消失的零件?我们是否将组件正式分为“客户端”和“服务器”,并要求服务器不能消失?如果我们要将服务器连接到服务器怎么办?我们是否尝试每隔几秒钟重新连接一次?

  • 我们如何在网络上表示一条消息?我们如何构造数据以使其易于写入和读取,防止缓冲区溢出,有效处理小消息,同时又适合戴着派对帽的跳舞猫的最大视频呢?

  • 我们如何处理无法立即传递的消息?特别是,如果我们正在等待某个组件恢复在线状态?我们是否丢弃消息,将其放入数据库或内存队列中?

  • 我们在哪里存储消息队列?如果从队列中读取的组件非常慢,导致我们的队列堆积,会发生什么情况?那我们的策略是什么?

  • 我们如何处理丢失的消息?我们是在等待新数据,请求重发还是在构建某种可靠性层以确保消息不会丢失?如果该层本身崩溃了怎么办?

  • 如果我们需要使用其他网络传输怎么办。说,多播而不是TCP单播?还是IPv6?我们需要重写应用程序,还是将传输抽象到某个层?

  • 我们如何路由消息?我们可以将相同的消息发送给多个对等方吗?我们可以将回复发送回原始请求者吗?

  • 我们如何编写另一种语言的API?我们是重新实现线级协议还是重新封装库?如果是前者,我们如何保证有效且稳定的堆栈?如果是后者,我们如何保证互操作性?

  • 我们如何表示数据,以便可以在不同体系结构之间读取数据?我们是否对数据类型实施特定的编码?消息传递系统而不是高层的工作范围是多远?

  • 我们如何处理网络错误?我们是等待重试,还是默默地忽略它们,还是放弃?

zmq特点:

  • 它在后台线程中异步处理I / O。它们使用无锁数据结构与应用程序线程通信,因此并发的ZeroMQ应用程序不需要锁,信号量或其他等待状态。

  • 组件可以动态变化,ZeroMQ将自动重新连接。这意味着您可以按任何顺序启动组件。您可以创建“面向服务的体系结构”(SOA),使服务可以随时加入和离开网络。

  • 它在需要时自动将消息排队。它可以智能地进行此操作,在将消息排队之前,将消息推到尽可能靠近接收者的位置。

  • 它具有处理过多队列的方法(称为“高水位线”)。当队列已满时,ZeroMQ会根据您正在执行的消息传递的类型自动阻止发件人或丢弃消息(所谓的“模式”)。

  • 它使您的应用程序可以通过任意传输相互通信:TCP,多播,进程内,进程间。您无需更改代码即可使用其他传输方式。

  • 它使用不同的策略(取决于消息传递模式)来安全地处理慢速/阻塞阅读器。

  • 它使您可以使用各种模式来路由消息,例如请求-答复和发布-订阅。这些模式是创建拓扑和网络结构的方式。

  • 它使您可以创建代理,以通过单个呼叫将消息排队,转发或捕获消息。代理可以降低网络的互连复杂性。

  • 它使用网络上的简单帧来完全传递已发送的完整消息。如果您写10k消息,您将收到10k消息。

  • 它不对邮件强加任何格式。它们是从零到千兆字节的斑点。当您要表示数据时,可以选择其他一些产品,例如msgpack,Google的协议缓冲区等。

  • 通过在有意义的情况下自动重试,它可以智能地处理网络错误。

  • 它减少了您的碳足迹。用更少的CPU做更多的事情意味着您的盒子会消耗更少的功率,并且您可以使旧盒子的使用时间更长。阿尔·戈尔(Al Gore)会喜欢ZeroMQ。

 

三、

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值