Posted by:
努力记

努力记,通过记录,计划,让自己的努力可以触碰彩虹!

13,107

ZeroMQ:分布式网络通讯协议

  • 2014-04-20
  • 暂无评论
ZMQ(以下ZeroMQ简称ZMQ)是一个简单好用的传输层,像框架一样的一个socket library,他使得Socket编程更加简单、简洁和性能更高。是一个消息处理队列库,可在多个线程、内核和主机盒之间弹性伸缩。ZMQ的明确目标是“成为标准网络协议栈的一部分,之后进入Linux内核
ZMQ并不像是一个传统意义上的消息队列服务器,事实上,它也根本不是一个服务器,它更像是一个底层的网络通讯库,在Socket API之上做了一层封装,将网络通讯、进程通讯和线程通讯抽象为统一的API接口,是一种基于消息队列模型的多线程网络库,其对套接字类型、连接处理、帧、甚至路由的底层细节进行抽象,提供跨越多种传输协议的套接字。

ZeroMQ 特点介绍

1、支持高并发的异步 Socket 框架,24个API接口,对通讯模型进行了优雅的封装(通讯模型,通讯协议)
2、支持的通讯模型适用于大型集群和分布式计算,内置丰富的组合模式,可用于简化大型分步式计算架构
3、提供多种消息传递机制,如         inproc/IPC/TCP/multicast 等
4、提供异步 I/O 模式,通讯双方没有启动先后顺序,进程内通讯适用于可扩展的多核应用开发(通过线程间数据流动来保证同一时刻任何数据都只会被一个线程持有,以此实现多线程的“去锁化”。)

5、拥有活跃的开发者社区提供技术支持,发展相当迅速
6、支持超过 30 种的编程语言,如 C/C++/Java/.NET/Python/PHP 等
7、良好的跨平台性,支持多种 OS,如 Linux/Windows/OS X 等
8、拥有 iMatix 公司的商业级别支持,却是完全免费的

ZeroMQ提供了三个基本的通信模型 :

也支持最基本的一对一结对模型Exclusive-Pair:最简单的1:1消息通信模型,可以认为是一个TCP Connection,但是TCP Server只能接受一个连接。数据可以双向流动,这点不同于后面的请求回应模型。
zeromq1

1.Request-Reply :请求回应模型。由请求端发起请求,并等待回应端回应请求。从请求端来看,一定是一对对收发配对的;反之,在回应端一定是发收对。请求端和回应端都可以是 1:N 的模型。通常把 1 认为是 server ,N 认为是 Client 。ZeroMQ 可以很好的支持路由功能(实现路由功能的组件叫作 Device),把 1:N 扩展为 N:M (只需要加入若干路由节点)。从这个模型看,更底层的端点地址是对上层隐藏的。每个请求都隐含有回应地址,而应用则不关心它。
zeromq2
2.Publisher-Subscriber:发布订阅模型。这个模型里,发布端是单向只发送数据的,且不关心是否把全部的信息都发送给订阅端。如果发布端开始发布信息的时候,订阅端尚未连接上来,这些信息直接丢弃。不过一旦订阅端连接上来,中间会保证没有信息丢失。同样,订阅端则只负责接收,而不能反馈。如果发布端和订阅端需要交互(比如要确认订阅者是否已经连接上),则使用额外的 socket 采用请求回应模型满足这个需求(开启另外一个ZMQ的通信通道,用于报告当前节点的情况)
zeromq3zeromq4
3.Parallel Pipeline:管道模型。这个模型里,管道是单向的,从 PUSH 端单向的向 PULL 端单向的推送数据流。

Server端作为Push端,而Client端作为Pull端,如果有多个Client端同时连接到Server端,则Server端会在内部做一个负载均衡,采用平均分配的算法,将所有消息均衡发布到Client端上。与发布订阅模型相比,推拉模型在没有消费者的情况下,发布的消息不会被消耗掉;在消费者能力不够的情况下,能够提供多消费者并行消费解决方案。该模型主要用于多任务并行。

zeromq5
扩展模式:
任何分布式,并行的需求,都可以用这三种模型组合起来解决问题

通常,一个节点,即可以作为Server,同时也能作为Client,通过PipeLine模型中的Worker,他向上连接着任务分发,向下连接着结果搜集的Sink机器。因此,我们可以借助这种特性,丰富的扩展原有的三种模式。例如,一个代理Publisher,作为一个内网的Subscriber接受信息,同时将信息,转发到外网

zeromq6
zeromq7
灵活的组织各个模式,极大程度简化了通讯开发的复杂度
通信协议:提供进程内、进程间、机器间、广播等四种通信协议。通信协议配置简单,用类似于URL形式的字符串指定即可,格式分别为inproc://、ipc://、tcp://、pgm://。ZeroMQ会自动根据指定的字符串解析出协议、地址、端口号等信息。
工作流程:
zeromq8
zeromq9
来源:

 



back up ↑

无觅相关文章插件,快速提升流量