8大通讯中间件/MQ,比较常用且有名的有如下几种: 1. ACE: ACE提供了一组丰富的可重用C++包装外观(WrapperFacade)和框架组件,可跨多种平台完成通用的通信软件任务,其中包括:事件多路分离和事件处理器分派、信号处理、服务初始化、进程间通信、共享内存管理、消息路由、分布式服务动态(重)配置、并发执行和同步等等。ACE简化了使用进程间通信、事件多路分离、显式动态链接和并发的面向对象的网络应用和服务的开发。 ACE架构图如图1-1所示:
图1-1 ACE架构图 ACE的优点主要有: (1).增强可移植性:在ACE组件的帮助下,很容易在一种OS平台上编写并发网络应用,然后快速地将它们移植到各种其他的OS平台上。 (4).更容易转换到标准的高级中间件:TAO使用了ACE提供的可重用组件和模式,按照CORBA的标准实现,并且为高性能和实时系统作了优化。 ACE的缺点主要有: (1).整个架构比较复杂,研究学习还是比较好的选择,但是使用比较复杂。 2. ICE: ICE是一款高性能的中间件,支持分布式的部署管理,消息中间件,以及网格计算等等。主要结构如下图2-1所示:
图2-1 ICE架构图 ICE的优点主要有: (1).面向对象的语义,所有的操作调用都使用迟后绑定。 (7).采用TCP、IP 和UDP作为传输协议,客户端和服务器代码都不需要了解底层的传输机制。 ICE的缺点主要有: (1).整个架构比较复杂,研究学习还是比较好的选择,但是使用比较复杂。 3. Boost::ASIO: Boost Asio ( asynchronous input and output)关注异步输入输出。BoostAsio库提供了平台无关性的异步数据处理能力(当然它也支持同步数据处理)。一般的数据传输过程需要通过函数的返回值来判断数据传输是否成功。Boost Asio将数据传输分为两个独立的步骤: 采用异步任务的方式开始 数据传输。将传输结果通知调用端。与传统方式相比,优点在于程序在数据传输期间不会阻塞。 Boost::ASIO架构图如下图3-1所示:
图3-1 Boost::ASIO架构图 Boost::ASIO的优点: (1). 与传统方式相比,优点在于程序在数据传输期间不会阻塞。 (2). 可扩展多线程。 (3). 可移植。 Boost::ASIO的缺点: (1).抽象复杂。 (2).内存占用。 4. MSMQ: MSMQ全称MicroSoft Message Queue,微软消息队列,是在多个不同的应用之间实现相互通信的一种异步传输模式,相互通信的应用可以分布于同一台机器上,也可以分布于相连的网络空间中的任一位置。它的实现原理是:消息的发送者把自己想要发送的信息放入一个容器中(我们称之为Message),然后把它保存至一个系统公用空间的消息队列(Message Queue)中;本地或者是异地的消息接收程序再从该队列中取出发给它的消息进行处理。消息Message是由通信的双方所需要传递的信息。 MSMQ架构图如图4-1所示:
图4-1 MSMQ架构图 MSMQ系统配置图如图4-2所示:
图4-2 MSMQ系统配置图 队列的类型主要包括一下几种: (1).“公共队列”在整个“消息队列”网络中复制,并且有可能由网络连接的所有站点访问。 (2).“专用队列”不在整个网络中发布。相反,它们仅在所驻留的本地计算机上可用。专用队列只能由知道队列的完整路径名或标签的应用程序访问。 (3).“管理队列”包含确认在给定“消息队列”网络中发送的消息回执的消息。指定希望 MessageQueue 组件使用的管理队列(如果有的话)。 (4).“响应队列”包含目标应用程序接收到消息时返回给发送应用程序的响应消息。指定希望 MessageQueue 组件使用的响应队列(如果有的话)。 优点:稳定、消息优先级、脱机能力以及安全性,有保障的消息传递和执行许多业务处理的可靠的防故障机制。 缺点:MSMQ不适合于Client需要Server端实时交互情况.大量请求时候,响应延迟. 5. ActiveMQ: ActiveMQ 是Apache出品,最流行的、功能强大的即时通讯和集成模式的开源服务器。ActiveMQ 是一个完全支持JMS1.1和J2EE 1.4规范的 JMSProvider实现。提供客户端支持跨语言和协议,带有易于在充分支持JMS 1.1和1.4使用J2EE企业集成模式和许多先进的功能。(官网:http://activemq./ 5.3.0) ActiveMQ架构图如图5-1所示:
图5-1 ActiveMQ架构图 优点: (1). 支持多种语言和协议编写客户端。语言:Java、C、C++、C#、Ruby、Perl、Python、PHP。应用协议:OpenWire、Stomp REST、WS Notification、XMPP、AMQP (2). 支持多种传送协议:in-VM、TCP、SSL、NIO、UDP、JGroups、JXTA。 (3). 支持通过JDBC和journal提供高速的消息持久化。 (4). 从设计上保证了高性能的集群,客户端-服务器,点对点,执行效率高。 (5). 使用环境简单,支持自动重连,支持Ajax,支持与Axis的整合。 (6). 可以很容易得调用内嵌JMSprovider,进行测试 缺点: (1). 传输文件不方便,而且效率相对来说不是很高 6. RabbitMQ:RabbitMQ是由 LShift 提供的一个 Advanced Message Queuing Protocol (AMQP) 的开源实现,由以高性能、健壮以及可伸缩性出名的 Erlang 写成,因此也是继承了这些优点。 主要要说两个组件:Exchange和 Queue (在 AMQP 1.0 里还会有变动),如下图所示,绿色的 X 就是 Exchange ,红色的是 Queue ,这两者都在 Server 端,又称作 Broker ,这部分是 RabbitMQ 实现的,而蓝色的则是客户端,通常有 Producer 和 Consumer 两种类型: 架构图如图6-1所示:
图6-1 RabbitMQ架构图 (官网: http://www./1.7.0 ) 优点: (1).RabbitMQ易于使用和部署,适宜于很多场景如路由、负载均衡或消息持久化等,用消息队列只需几行代码即可搞定。 (2).对外提供客户端API,支持多种编程语言。 (3).基于erlang语言开发具有高可用高并发的优点,适合集群服务器。 (4). 健壮、稳定、易用、开源、跨平台、支持多种语言、文档齐全。 (5). 有消息确认机制和持久化机制,可靠性高。 缺点: (1).这使得它的可扩展性差,速度较慢,因为中央节点增加了延迟,消息封装后也比较大。 7. ZeroMQ: ZeroMQ是一种基于消息队列的多线程网络库,其对套接字类型、连接处理、帧、甚至路由的底层细节进行抽象,提供跨越多种传输协议的套接字。ZeroMQ是网络通信中新的一层,介于应用层和传输层之间(按照TCP/IP划分),其是一个可伸缩层,可并行运行,分散在分布式系统间。ZeroMQ是一个非常轻量级的消息系统,专门为高吞吐量/低延迟的场景开发,在金融界的应用中经常可以发现它。与RabbitMQ相比,ZeroMQ支持许多高级消息场景,但是你必须实现ZeroMQ框架中的各个块(比如Socket或Device等)。 ZeroMQ架构图如图7-1所示: 图7-1 ZeroMQ架构图 ZeroMQ优点: (1).简单,仅仅提供24个API接口,风格类似于BSDSocket。处理了网络异常,包括连接异常中断、重连等。改变TCP基于字节流收发数据的方式,处理了粘包、半包等问题,以msg为单位收发数据,结合Protocol Buffers,可以对应用层彻底屏蔽网络通信层。对大数据通过SENDMORE/RECVMORE提供分包收发机制。通过线程间数据流动来保证同一时刻任何数据都只会被一个线程持有,以此实现多线程的“去锁化”。通过高水位HWM来控制流量,用交换SWAP来转储内存数据,弥补HWM丢失数据的缺陷。服务器端和客户端的启动没有先后顺序。 (2).灵活,支持多种通信协议,可以灵活地适应多种通信环境,包括进程内、进程间、机器间、广播。支持多种消息模型,消息模型之间可以相互组合,形成特定的解决方案。 (3).跨平台,支持Linux、Windows、OS X等。 (4).多语言,可以绑定C、C++、Java、.NET、Python等30多种开发语言。 (5).高性能,相对同类产品,性能卓越。 ZeroMQ缺点: (1). 过高的效率会造成可靠性下降,偶然会丢失某些消息的现象。 但是测试数据仅供参考,因为缺少必须的环境参数和性能指标,比如:CPU参数、内存参数、消息模型、通信协议、极限时消耗CPU百分比、极限时消耗内存百分比等。大家可做参考:
图7-2 中间件性能分析图 8. KAFKA: Kafka是Apache下的一个子项目,是一个高性能跨语言分布式Publish/Subscribe消息队列系统,而Jafka是在Kafka之上孵化而来的,即Kafka的一个升级版。具有以下特性:快速持久化,可以在O(1)的系统开销下进行消息持久化;高吞吐,在一台普通的服务器上既可以达到10W/s的吞吐速率;完全的分布式系统,Broker、Producer、Consumer都原生自动支持分布式,自动实现复杂均衡;支持Hadoop数据并行加载,对于像Hadoop的一样的日志数据和离线分析系统,但又要求实时处理的限制,这是一个可行的解决方案。Kafka通过Hadoop的并行加载机制来统一了在线和离线的消息处理,这一点也是本课题所研究系统所看重的。Apache Kafka相对于ActiveMQ是一个非常轻量级的消息系统,除了性能非常好之外,还是一个工作良好的分布式系统。Apache Kafka架构图如下图所示:
图8-1 Apache Kafka架构图
Kafka优点: (1).通过O(1)的磁盘数据结构提供消息的持久化,这种结构对于即使数以TB的消息存储也能够保持长时间的稳定性能。 (2).高吞吐量:即使是非常普通的硬件kafka也可以支持每秒数十万的消息,适合产生大量数据的互联网服务的数据收集业务。 (3).支持通过kafka服务器和消费机集群来分区消息。 (4).支持Hadoop并行数据加载。
具体部署参考:http://blog.csdn.net/fanyun_01/article/details/52159684 http://blog.csdn.net/fanyun_01/article/details/52159674
国内中间件发展: Notify是淘宝自主研发的一套消息服务引擎,是支撑双11最为核心的系统之一,在淘宝和支付宝的核心交易场景中都有大量使用。消息系统的核心作用就是三点:解耦,异步和并行。通过消息中间件,应用程序或组件之间可以进行可靠的异步通讯来降低系统之间的耦合度,从而提高整个系统的可扩展性和可用性。 以下链接是淘宝的一个经典中间件,大家可以参考学习下! (详细见 http://www./articles/AfQRru) 本人水平有限,文章中可能存在错误和不足,欢迎批评指正。 |
|
来自: Frank__Library > 《前言技术》