python消息中间件有哪些_消息中间件选型

本文介绍了消息中间件在分布式系统中的作用,包括RPC、CORBA、RMI、WebService和MOM等技术。重点讲解了面向消息中间件MOM,特别是AMQP协议,以及其在Qpid、RabbitMQ、ZeroMQ等开源实现中的应用。Qpid提供了C++和Java版本,支持多种语言的客户端,适合集群环境。RabbitMQ是Erlang实现的,支持多种协议,适合企业级应用。ZeroMQ则是一个轻量级的消息内核,无broker设计,适用于高性能、低延迟的场景。文章还对比了各种MQ的性能、特性,指出在选择消息系统时应考虑持久化、吞吐能力、高可用性等因素。
摘要由CSDN通过智能技术生成

一、     分布式系统消息通信技术简介

分布式系统消息通信技术主要包括以下几种:

1.RPC(Remote Procedure Call Protocol).

一般是C/S方式,同步的,跨语言跨平台,面向过程

2.CORBA(Common Object Request Broker Architecture).

CORBA从概念上扩展了RPC。面向对象的,企业级的(面向对象中间件还有DCOM)

3.RMI(Remote Method Invocation).

面向对象方式的 Java RPC

4.WebService.

基于Web,C/S或B/S,跨系统跨平台跨网络。多为同步调用, 实时性要求较高

5.MOM(Message oriented Middleware).

面向消息中间件,主要适用于消息通道、消息总线、消息路由和发布/订阅的场景。目前主流标准有JMS(Java Message Service)、AMQP(Advanced Message Queuing Protocol)和STOMP(Streaming Text Oriented Messaging Protocol)。

JMS是Java平台上的面向接口的消息规范,是一套API标准,并没有考虑异构系统。AMQP是一个面向协议的,跟语言平台无关的消息传递应用层协议规范。STOMP是流文本定向消息协议,是一种为MOM设计的简单文本协议。AMQP和STOMP都是跟http处于同一层的协议。

在 AMQP 模型中,消息的 producer 将 Message 发送给 Exchange,Exchange 负责交换 / 路由,将消息正确地转发给相应的 Queue。消息的 Consumer 从 Queue 中读取消息。

AMQP 系统构架

二、     常见开源跨平台MQ简介

目前业界上关于消息中间件的实现多达好几十种,可谓百花齐放,所用的实现语言同样也五花八门。下面挑选了一部分,在网上开源社区相对容易搜索出来的十多种MQ来作简单介绍。

开源MQ

概述

1.Qpid

Apach的一个开源AMQP实现,broker架构,有C++和Java两个版本

2.RabbitMQ

LShift 用Erlang实现,支持多协议,broker架构,重量级

3.ZeroMQ

AMQP最初设计者iMatix公司实现,轻量消息内核,无broker设计。C++实现

4.Jafka/Kafka

LinkedIn用Scala语言实现,支持hadoop数据并行加载

5.ActiveMQ

Apach的一种JMS具体实现,支持代理和p2p部署。支持多协议。Java实现

6.Apollo

ActiveMQ的下一代产品,支持多协议,Scala实现

7.Redis

Key-value  NoSQL数据库,有MQ的功能

8.MemcacheQ

国人利用memcache缓冲队列协议开发的消息队列,C/C++实现

9.Open-MQ

C++和QT实现,支持JMS

10.ActiveMQ-CPP

ActiveMQ的C++纯客户端库,用于跟ActiveMQ通信

11.MQ4CPP

一个C++实现的MQ,信息甚少

12.MetaQ

Alibaba对Kafka的改造,增加事务支持等新特性,用纯Java实现

13.Beanstalkd

一个类memcached协议设计的消息队列,C/C++实现

14.OpenAMQ

iMatix公司AMQP1.0的实现,类似rabbitMQ。C++实现。2010年项目放弃

15.Spread Toolkit

高性能的分布式分组消息系统,C++实现

16.SAFMQ

C++实现的储存转发消息队列中间件

17. Mosquitto

一个轻量级的IBM物联网连接协议的消息中间件实现,C/C++实现

18.MUSCLE

提供一个多路消息服务器和消息对象传递功能,支持C/C++

19.JORAM

一个类似OpenJMS(Sun OpenMQ)的JMS消息中间件,JAVA实现

Qpid

Qpid 是 Apache 开发的一款面向对象的消息中间件,它是一个 AMQP 的实现,可以和其他符合 AMQP 协议的系统进行通信。Qpid 提供了 C++/Python/Java/C# 等主流编程语言的客户端库,Qpid 提供了很多额外的 HA 特性,非常适于集群环境下的消息通信。

它提供了 C++ 和 Java 两个版本的 broker服务端,并支持多种语言的客户端。C++版本的服务器端具备高性能/低消耗以及RDMA支持;而Java版本的服务器则支持JMS。Qpid 还提供了一些额外的特性:

采用 Corosync 来保证了集群环境下的 Fault-tolerant 特性

支持 XML 类型的 Exchange,当消息格式为 XML 时,可以利用 Xquery 进行过滤

支持 plugin,用户可以方便地增加新的功能,比如新的 exchange 类型

提供了安全认证特性,任何 producer/consumer 需要和 broker 通信时,都需要提供身份认证。QPID 的安全认证使用 SSL 协议。

授权协议: Apache

开发语言: Java C/C++

操作系统: 跨平台

官网:http://qpid.apache.org  最新版本0.30发布于2014-09-26。

有新浪的朋友比较推荐Qpid,它比rabbitmq要轻型,比zeromq保险点!各方面的文档都比较健全。目前在openstack中作为一种可选的消息中间件服务配置。MB(WSO2 Message Broker) 基于Apache Qpid,这是一个Java项目。开源的企业服务总线(ESB) – Celtix,基于Apache Incubator项目Qpid。

跟Qpid有关联的其他项目主要有:

RabbitMQ

LShift 用Erlang编写的一个开源的消息队列,支持很多的协议:AMQP,XMPP, SMTP, STOMP,重量级,更适合于企业级的开发。代理(Broker)架构,对路由(Routing),负载均衡(Load balance)或者数据持久化都有很好的支持。

缺点:可扩展性差,速度较慢,因为中央节点增加了延迟,消息封装后也比较大。

AMQP 里主要要说两个组件:Exchange 和 Queue (在 AMQP 1.0 里还会有变动),如下图所示,绿色的 X 就是 Exchange ,红色的是 Queue ,这两者都在 Server 端,又称作 Broker ,这部分是 RabbitMQ 实现的,而蓝色的则是客户端,通常有 Producer 和 Consumer 两种类型:

授权协议: MPL

开发语言: ErLang

操作系统: 跨平台

官网:http://www.rabbitmq.com/,最新版本3.4.3发布于2015-1-7

ØMQ(ZeroMQ)

早期需要设计可靠消息系统比如AMQP,但是这种方式引入了single-point broker。对于需要这种可靠消息系统的应用来说,需要在broker上面做相当多的事情确保可靠性以及性能。但是这样对于中小应用陷入了尴尬,为了使用这种方便的消息系统他们需要引入broker这么东西是不能够忍受的。我们需要的一种简单方便的消息传输系统,没有任何附加代价(比如所有数据都流经 broker),这就是ZeroMQ设计初衷。

2010年3月30日,AMQP的最初设计者iMatix公司的首席执行官Pieter Hintjens宣布iMatix将退出AMQP工作组,而且为了简单得多,快的多的ZeroMQ,将不支持可能发布的AMQP/1.0。一个非常轻量级的消息内核,专门为高吞吐量/低延迟的场景开发。ZeroMQ支持许多高级消息场景,但是你必须实现ZeroMQ框架中的各个块(比如Socket或Device等)。没有中间件架构,应用程序端点扮演了这个服务角色。部署简单,仅提供非持久性的队列。与RabbitMQ相比,ØMQ并不像是一个传统意义上的消息队列服务器,事实上,它也根本不是一个服务器,它更像是一个底层的网络通讯库,在socket API之上做了一层封装,将网络通讯、进程通讯和线程通讯抽象为统一的API接口。

支持C、C++、Python、.NET /Mono、Fortran和Java语言

授权协议: LGPL

开发语言: C/C++

操作系统: 跨平台

官网:http://zeromq.org/,   最新版本4.1.0发布于2014/10/14。Twitter的Storm中使用ZeroMQ作为数据流的传输,还有常见于金融界的应用中。Mongrel2是使用ZeroMQ的一个Web服务器。

Jafka/Kafka

LinkedIn用Scala语言开发。高吞吐量高性能支持跨语言分布式Publish/Subscribe消息队列系统,而J

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值