ZeroMQ使用环境和结构详细分析

上传人:cl****1 文档编号:495052869 上传时间:2023-12-28 格式:DOCX 页数:11 大小:251.13KB
返回 下载 相关 举报
ZeroMQ使用环境和结构详细分析_第1页
第1页 / 共11页
ZeroMQ使用环境和结构详细分析_第2页
第2页 / 共11页
ZeroMQ使用环境和结构详细分析_第3页
第3页 / 共11页
ZeroMQ使用环境和结构详细分析_第4页
第4页 / 共11页
ZeroMQ使用环境和结构详细分析_第5页
第5页 / 共11页
点击查看更多>>
资源描述

《ZeroMQ使用环境和结构详细分析》由会员分享,可在线阅读,更多相关《ZeroMQ使用环境和结构详细分析(11页珍藏版)》请在金锄头文库上搜索。

1、ZeroMQ使用和结构详细分析目录1 ZeroMQ 概述 22 系统架构 22.1 总体架构22.2 所处层次32.3 消息模型32.3.1 一对一结对模型42.3.2 请求回应模型42.3.3 发布订阅模型42.3.4 推拉模型52.4 通信协议63 工作流程 74 性能分析 85 应用场景 96 总结 96.1 简单 96.2 灵活106.3 跨平台106.4 多语言106.5 高性能101 ZeroMQ 概述ZeroMQ是一种基于消息队列的多线程网络库,其对套接字类型、连接处理、 帧、甚至路由的底层细节进行抽象,提供跨越多种传输协议的套接字。ZeroMQ 是网络通信中新的一层,介于应用层

2、和传输层之间(按照TCP/IP划分),其是 一个可伸缩层,可并行运行,分散在分布式系统间。2系统架构2.1 总体架构ZeroMQ几乎所有的I/O操作都是异步的,主线程不会被阻塞。ZeroMQ会根 据用户调用zmq_init函数时传入的接口参数,创建对应数量的I/O Thread。每 个I/O Thread都有与之绑定的Poller, Poller采用经典的Reactor模式实现, Poller根据不同操作系统平台使用不同的网络I/O模型(select、poll、epoll、 devpoll、kequeue等)。主线程与I/O线程通过Mail Box传递消息来进行通信。 Server开始监听或者

3、Client发起连接时,在主线程中创建zmq_connecter或 zmq_listener,通过Mail Box发消息的形式将其绑定到I/O线程,I/O线程会 把zmq_connecter或zmq_listener添加到Poller中用以侦听读/写事件oServer 与Client在第一次通信时,会创建zmq_init来发送identity,用以进行认证。 认证结束后,双方会为此次连接创建Session,以后双方就通过Session进行通 信。每个Session都会关联到相应的读/写管道,主线程收发消息只是分别从管道中读/写数据。Session并不实际跟kernel交换I/O数据,而是通过p

4、lugin 到Session中的Engine来与kernel交换I/O数据。2.2所处层次ZeroMQ不是单独的服务或者程序,仅仅是一套组件,其封 装了网络通信、消息队列、线程调度等功能,向上层提供简洁的API,应用程序 通过加载库文件,调用API函数来实现高性能网络通信。2.3 消息模型ZeroMQ将消息通信分成4种模型,分别是一对一结对模型(Exclusive-Pair)、 请求回应模型(Request-Reply)、发布订阅模型(Publish-Subscribe)、推拉 模型(Push-Pull)。这4种模型总结出了通用的网络通信模型,在实际中可以 根据应用需要,组合其中的2种或多种模

5、型来形成自己的解决方案。2.3.1 一对一结对模型最简单的1:1消息通信模型,可以认为是一个TCPConnection,但是TCP Server只能接受一个连接。数据可以双向流动,这点不 同于后面的请求回应模型。2.3.2 请求回应模型由请求端发起请求,然后等待回应端应答。一个请求必须对应一个回应,从 请求端的角度来看是发-收配对,从回应端的角度是收-发对。跟一对一结对模型 的区别在于请求端可以是1N个。该模型主要用于远程调用及任务分配等。Echo2.3.3 发布订阅模型发布端单向分发数据,且不关心是否把全部信息发送给订阅端。如果发布端 开始发布信息时,订阅端尚未连接上来,则这些信息会被直接丢

6、弃。订阅端未连 接导致信息丢失的问题,可以通过与请求回应模型组合来解决。订阅端只负责接 收,而不能反馈,且在订阅端消费速度慢于发布端的情况下,会在订阅端堆积数 据。该模型主要用于数据分发。天气预报、微博明星粉丝可以应用这种经典模型。丿SUBSUBPublisherupd ateSubscriber 1Subscriber N呷网tSubscriber 2图4发布订阅模型2.3.4 推拉模型Server端作为Push端,而Client端作为Pull端,如果有多个Client端同 时连接到Server端,则Server端会在内部做一个负载均衡,采用平均分配的算 法,将所有消息均衡发布到Client

7、端上。与发布订阅模型相比,推拉模型在没 有消费者的情况下,发布的消息不会被消耗掉;在消费者能力不够的情况下,能 够提供多消费者并行消费解决方案。该模型主要用于多任务并行。2.4 通信协议提供进程内、进程间、机器间、广播等四种通信协议。通信协议配置简单, 用类似于URL形式的字符串指定即可,格式分别为inproc:/、ipc:/、tcp:/、 pgm:/。ZeroMQ会自动根据指定的字符串解析出协议、地址、端口号等信息。3 工作流程IlBiinThrcarI如Thr*创 iS rnq. wnRcrtci* i TStlServer连搖诂求.创_ * -二m ir:t tftii常rns i 11

8、 11 it Ultnsffrii-2; -.:. jnftii5gzLi i ; ij训恥叫” - f 侏毀mxtIattoch Listener j 诃蛰:,-、: i nn I ftT/0?t lSess iun-tjma Ln threi*d 之问迪过禅道適伫主覘皑调川咖w化从岡尉i im 关联菅道读驭弼EPSJT/O阻用调用忑mu 9皿曲1槪ftf楷定严一FI Pjjd 11 em-J.gm mjlfl f& ft诂:曲q 1心很据措定的 .n 弐请求7_P刚述2叫_1 nm,T捋;”hdair. J ll-TP-!调.IIUH|_.i 口 iy 创 建Mntixt描针Ifijjff

9、usii nu 创SE如匸FjxIP、刚取网_匚1讯杆图6基本流程4性能分析目前,市面上类似的产品不少,主要有4种:MSMQ (微软产品)、ActiveMQ (Java)、Rabbi tMQ(Erlang)、ZeroMQ(C+)。除 ZeroMQ 外,其它 3 款产品都 是一个单独服务或者进程,需要单独安装和运行,且对环境有一定依赖。其中, MSMQ在非Windows平台下安装非常复杂,ActiveMQ需要目标机器上已经安装了Java,RabbitMQ需要Erlang环境。而ZeroMQ是以库的形式存在,由应用程序 加载、运行即可。但是ZeroMQ仅提供非持久性的消息队列。图7是来自于Inte

10、rnet的性能测试数据。显示的是每秒钟发送和接受的消 息数。整个过程共产生1百万条1K的消息,测试环境为Windows Vista。从测 试数据可以看出,ZeroMQ的性能远远高于其它3个MQ。但是测试数据仅供参考,因为缺少必须的环境参数和性能指标,比如:CPU 参数、内存参数、消息模型、通信协议、极限时消耗CPU百分比、极限时消耗内 存百分比等。RabbitM Q.MS M0.050000 1QCQD0 15CDD0 20000025OM0300000 35QWOMMQActivi&MQRabbiHVIQZeroMO. Send11066452122782265970216453122818

11、8699AciveMClZeroMQ.图7性能测试5 应用场景应用ZeroMQ的Push-Pull模型实现联众游戏服务器的“热插拔”、负载均 衡和消息派发。按照如图8部署服务器,Push端充当Gateway,作为一组游戏服 务器集群最上层的一个Proxy,起负载均衡的作用,所有Gameserver作为Pull 端。当一个请求到达Push端(Gateway)时,Push端根据一定的分配策略将任 务派发到Pull端(Gameserver)。以联众某款游戏A为例,游戏A刚上线时, 预计最大同时在线人数是10W,单台Gameserver并发处理能力为1W,需要10 台Gameserver,由于游戏A可

12、玩性非常好,半个月后最大同时在线人数暴增到 50W,那么不需要在某天的凌晨将Gateway和Gameserver停机,只需要随时在机 房新添加40台Gameserver,启动并连接到Gat eway即可。ZeroMQ中对Client和Server的启动顺序没有要求,Gameserver之间如果 需要通信的话,Gameserver的应用层不需要管理这些细节,ZeroMQ已经做了重 连处理。图8应用场景6总结6.1 简单1、仅仅提供24个API接口,风格类似于BSD Socket。2、处理了网络异常,包括连接异常中断、重连等。3、改变TCP基于字节流收发数据的方式,处理了粘包、半包等问题,以msg

13、为 单位收发数据,结合Protocol Buffers,可以对应用层彻底屏蔽网络通信层。4、对大数据通过SENDMORE/RECVMORE提供分包收发机制。5、通过线程间数据流动来保证同一时刻任何数据都只会被一个线程持有,以此 实现多线程的“去锁化”。6、通过高水位HWM来控制流量,用交换SWAP来转储内存数据,弥补HWM丢失数 据的缺陷。7、服务器端和客户端的启动没有先后顺序。6.2灵活1、支持多种通信协议,可以灵活地适应多种通信环境,包括进程内、进程间、 机器间、广播。2、支持多种消息模型,消息模型之间可以相互组合,形成特定的解决方案。6.3 跨平台支持 Linux、Windows、OS X 等。6.4 多语言可以绑定C、C+、Java、.NET、Python等30多种开发语言。6.5高性能相对同类产品,性能卓越。

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 机械/制造/汽车 > 综合/其它

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号