消息队列及中转软件总结

2020-06-07 16:17

消息队列及中转软件总结

摘要

ZeroMQ ActiveMQ Redis MongoDB Memcached

都是开源产品,都可以实现消息中转的功能,但各有不同。

ZeroMQ ActiveMQ消息中转实现形式为队列形式,分布式、集群服务助手。 Redis MongoDB较成熟的非结构性数据库产品,key-value数据库,结构松散的文本型数据库。

Memcached高性能的分布式内存对象缓存系统,数据读写速度内存级别。

MQ消息队列

消息队列(MQ)是一种应用程序对应用程序的通信方法。应用程序通过写和检索出入列队的数据(消息)来通信,而无需专用连接来链接它们。消息传递指的是程序之间通过在消息中发送数据进行通信,而不是通过直接调用彼此来通信,直接调用通常是用于诸如远程过程调用的技术。排队指的是应用程序通过队列来通信。队列的使用除去了接收和发送应用程序同时执行的要求,一般情况下都需要有一个队列维护服务。消息服务器在分布式系统各应用间消息通信起到了至关重要的作用。

ZeroMQ ZeroMQ是一种基于消息队列的多线程网络库,其对套接字类型、连接处理、帧、甚至路由的底层细节进行抽象,提供跨越多种传输协议的套接字。ZeroMQ是非典型的消息中间件,而且更像是一个网络通信框架

ZeroMQ是网络通信中新的一层,介于应用层和传输层之间(按照TCP/IP划分),其是一个可伸缩层,可并行运行,分散在分布式系统间。

ZeroMQ号称是最快的消息队列系统,尤其针对大吞吐量的需求场景。ZMQ能够实现RabbitMQ不擅长的高级/复杂的队列,但是开发人员需要自己组合多种技术框架,技术上的复杂度是对ZMQ能够应用成功的挑战。ZeroMQ具有一个独特的非中间件的模式,甚至不需要安装和运行一个消息服务器或中间件,因为应用程序将扮演这个服务角色。只需要简单的引用ZeroMQ程序库,然后就可以愉快的在应用程序之间发送消息了。但是ZeroMQ仅提供非持久性的队列,也就

是说如果down机,数据将会丢失。其中,Twitter的Storm中使用ZeroMQ作为数据流的传输。

ZMQ是个类似于Socket的一系列接口,他跟Socket的区别是普通的Socket是端到端的(1:1的关系),而ZMQ却是可以N:M 的关系,人们对BSD套接字的了解较多的是点对点的连接,点对点连接需要显式地建立连接、销毁连接、选择协议(TCP/UDP)和处理错误等,而ZMQ屏蔽了这些细节,让你的网络编程更为简单。ZMQ用于node与node间的通信,node可以是主机或者是进程。 ZeroMQ不是单独的服务或者程序,仅仅是一套组件,其封装了网络通信、消息队列、线程调度等功能,向上层提供简洁的API,应用程序通过加载库文件,调用API函数来实现高性能网络通信。

应用层ZeroMQOS API

ZeroMQ消息模型

ZeroMQ将消息通信分成4种模型,分别是一对一结对模型(Exclusive-Pair)、请求回应模型(Request-Reply)、发布订阅模型(Publish-Subscribe)、推拉模型(Push-Pull)。这4种模型总结出了通用的网络通信模型,在实际中可以根据应用需要,组合其中的2种或多种模型来形成自己的解决方案。 1.一对一:TCP Connection,TCP Sever只能接受一个连接,数据双向流动 2.请求回应:一个服务端对应多个客户端,每个请求服务端都会给一个回应,相当于1对N的方式。

Client1REQClient2REQClient3REQ请求1回复1请求2回复2请求3回复3REPServer 3.发布订阅模型:发布端单向分发数据,且不关心是否把全部信息发送给订阅端,天气预报、微博明星粉丝可以应用这种经典模型。

PublisherPUBbindupdateupdateconnectupdateconnectupdateconnectSUBSUBSUBSubscriber1Subscriber2Subscriber3 4.推拉模型:Server端为push端,Client端为pull端,如果有多个Client端同时连接到Server端,则Server端会在内部做一个负载均衡,采用平均分配的算法,均衡推送,改模型主要用于多任务并行。

VentilatorPUSHtaskstasktasktaskPULLPULLPULLWorkerPUSHresultWorkerPUSHresultresultsWorkerPUSHresultPULLSink

ZeroMQ通信协议:提供进程内、进程间、机器间、广播等四种通信协议,支持的具体协议类型有:inproc、ipc、tcp、pgm。

用类似于URL形式的字符串指定即可,格式分别为inproc://、ipc://、tcp://、pgm://。ZeroMQ会自动根据指定的字符串解析出协议、地址、端口号等信息。

支持常用的多种语言客户端 C++、Java、.Net、Python、 Php、 Ruby等。 ZeroMQ性能

目前,市面上类似的产品不少,主要有4种:MSMQ(微软产品)、ActiveMQ(Java)、RabbitMQ(Erlang)、ZeroMQ(C++)。除ZeroMQ外,其它3款产品都是一个单独服务或者进程,需要单独安装和运行,且对环境有一定依赖。其中,MSMQ在非Windows平台下安装非常复杂,ActiveMQ需要目标机器上已经安装了Java,RabbitMQ需要Erlang环境。而ZeroMQ是以库的形式存在,由应用程序加载、运行即可。但是ZeroMQ仅提供非持久性的消息队列。

下图是来自Internet的性能测试数据。显示的是每秒钟发送和接受的消息数。整个过程共产生1百万条1K的消息,测试环境为Windows Vista。从测试数据可以看出,ZeroMQ的性能远远高于其它3个MQ。

ZeroMQ优点: 简单

1、仅仅提供24个API接口,风格类似于BSD Socket。 2、处理了网络异常,包括连接异常中断、重连等。

3、改变TCP基于字节流收发数据的方式,处理了粘包、半包等问题,以msg为单位收发数据,结合Protocol Buffers,可以对应用层彻底屏蔽网络通信层。 4、对大数据通过SENDMORE/RECVMORE提供分包收发机制。

5、通过线程间数据流动来保证同一时刻任何数据都只会被一个线程持有,以此实现多线程的“去锁化”。

6、通过高水位HWM来控制流量,用交换SWAP来转储内存数据,弥补HWM丢失数据的缺陷。

7、服务器端和客户端的启动没有先后顺序。 灵活

1、支持多种通信协议,可以灵活地适应多种通信环境,包括进程内、进程间、机器间、广播。


消息队列及中转软件总结.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:巴菲特2011年股东大会问答(文字实录)

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: