`
jzhihui
  • 浏览: 266080 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

AMQP & Nova

    博客分类:
  • amqp
阅读更多

 

OpenStack中的Nova各个服务之间以松耦合的方式使用AMQP进行通信(RPC)。使用AMQP的发布/订阅模式来进行RPC有如下优势:

         1) 客户端及服务端之间解耦:客户端不需要知道有哪些服务端以及服务端的地址;

         2) 客户端与服务端之间完全的同步性:客户端的RPC不需要服务端正好在运行;

         3) 远程调用的随机均衡:如果有多个服务端在运行,单向RPC会透明的分发到最一个可用的服务端。

 

         Nova用到了directfanouttopic三种类型的交换器(Exchange),整个架构图如下:

 

Nova基于AMQP实现了两种类型的RPC

rpc.call:请求响应类型,一个请求发送出去以后,需要等待响应;调用需要指定目标服务结点;

rpc.cast:单向RPC,只将请求发送出去,不需要等待结果;不关心请求由哪个服务结点完成。

 

Nova RPC结构

       下图说明了Nova RPC机制的主要结成部分(以使用RabbitMQ为例)。从调用关系上来说,Nova服务要么以调用方(InvokerAPIScheduler)角色来使用消息队列,要么以服务方(WorkerComputeVolumeNetwork)角色来使用消息队列。调用方通过rpc.callrpc.cast发送消息;服务方从消息队列接收消息,并对rpc.call请求做出响应。

         从生命周期上来说,TopicPublisherDirectConsumerDirectPublisher三部分是在rpc.call发起的时候创建的;而TopicConsumerNova的各个服务在启动时创建,并在服务结束时销毁。Nova中每一个服务在启动时会创建两个TopicConsumer:一个以NODE-TYPE为交换器键(Exchange Key),一个以NODE-TYPE.HOST为交换器键。

 

rpc.call调用流程

         1). 初始化一个TopicPublisher,发送消息到消息队列;在发送消息之前,初始化一个DirectConsumer(以消息ID为交换器的名称),用于等待响应消息;

         2). 消息被交换器分发到NODE-TYPE.HOST消息队列(下图中的topic.host),并被相应服务结点(根据host确定)的TopicConsumer获取到;

         3). 服务结点根据消息内容(调用函数及参数)调用相应服务;调用完成后,初始化一个DirectPublisher,并根据消息ID将响应消息发送到相应的消息队列;

         4). 响应消息被调用方的DirectConsumer获取到,调用完成。

 

rpc.cast调用流程

         1). 初始化一个TopicPublisher,并将消息发送到消息队列;

         2). 消息被交换器分发到NODE-TYPE消息队列(下图中的topic),并被相应服务的结点TopicConsumer获取到,然后根据消息内容调用相应服务完成调用。

 

==================================

上面是OpenStack文档里的主要内容,详细内容见这里。消息队列还有两种用法未在上面文档里说明。

 

实际上,Nova每个服务在启动时,还有创建第三个消费者:FanoutConsumer,不过这个Consumer只有一个应用:scheduler更新服务功能,通过rpc.fanout_cast调用(参见$NOVA_ROOT/nova/scheduler/api. update_service_capabilities)。

 

         另一种用法是rpc.notify,基于消息队列做成的一个事件通知机制,当有事件发生时,比如有计算结点挂起和继续时,会通过notifier.notify发送类似compute.instance.suspend或者compute.instance.resume的事件。详见$NOVA_ROOT/nova/notifier/api.notify $NOVA_ROOT/nova/notifier/rabbit_notifier.notify

  • 大小: 26.1 KB
  • 大小: 43.9 KB
  • 大小: 40 KB
  • 大小: 29.9 KB
分享到:
评论
1 楼 xiaoyao3857 2013-03-27  
LZ有OpenStack一系列的吗?

相关推荐

    Spring AMQP API(Spring AMQP 开发文档).CHM

    Spring AMQP API(Spring AMQP 开发文档).CHM 官网 Spring AMQP API。Spring AMQP 开发文档。

    amqp-core-complete-v1.0、amqp.0-10.zip

    amqp0-8.pdf来源:https://www.rabbitmq.com/resources/specs/amqp0-8.pdf specs/amqp0-9-1.pdf来源:https://www.rabbitmq.com/resources/specs/amqp0-9-1.pdf A080219O.pdf来源:...

    amqp的一些配置信息,规范

    rabbit的AMQP协议介绍

    amqp1.0协议翻译

    amqp1.0协议翻译

    amqp-client-5.10.0.jar

    amqp-client-5.10.0.jar

    amqp-client 5.4.3

    amqp-client 5.4.3

    AMQP10标准

    AMQP10标准 This document defines a networking protocol, the Advanced Message Queuing Protocol (AMQP), which enables conforming client applications to communicate with conforming messaging middleware ...

    amqp-client-5.5.0-API文档-中英对照版.zip

    赠送jar包:amqp-client-5.5.0.jar; 赠送原API文档:amqp-client-5.5.0-javadoc.jar; 赠送源代码:amqp-client-5.5.0-sources.jar; 赠送Maven依赖信息文件:amqp-client-5.5.0.pom; 包含翻译后的API文档:amqp-...

    php5.6 amqp拓展

    适用于win7 64位 php5.6 rabbitmq.1.dll 放在PHP根目录 php_amqp.dll 放在ext目录 php.ini 添加一行 extension=php_amqp.dll

    amqp-1.9.3.tgz

    amqp-1.9.3

    amqp-client-5.5.0-API文档-中文版.zip

    赠送jar包:amqp-client-5.5.0.jar; 赠送原API文档:amqp-client-5.5.0-javadoc.jar; 赠送源代码:amqp-client-5.5.0-sources.jar; 赠送Maven依赖信息文件:amqp-client-5.5.0.pom; 包含翻译后的API文档:amqp-...

    amqp.so扩展

    amqp.so是rabbitmq php的扩展,这个amqp.so可以应用在mac电脑中,可以放在mamp 环境中

    amqp-client-5.1.2-API文档-中文版.zip

    赠送jar包:amqp-client-5.1.2.jar; 赠送原API文档:amqp-client-5.1.2-javadoc.jar; 赠送源代码:amqp-client-5.1.2-sources.jar; 赠送Maven依赖信息文件:amqp-client-5.1.2.pom; 包含翻译后的API文档:amqp-...

    amqp-client-5.1.2-API文档-中英对照版.zip

    赠送jar包:amqp-client-5.1.2.jar; 赠送原API文档:amqp-client-5.1.2-javadoc.jar; 赠送源代码:amqp-client-5.1.2-sources.jar; 赠送Maven依赖信息文件:amqp-client-5.1.2.pom; 包含翻译后的API文档:amqp-...

    spring-amqp 1.5.3源码

    压缩包包含两部分,spring-amqp为java版的Spring AMQP的实现,spring-amqp-sample为补充版(也可作为快速入门的)

    SpringAMQP-支持使用AMQP的Spring编程模型

    Spring AMQP 是基于 Spring 框架的 AMQP 消息解决方案,提供模板化的发送和接收消息的抽象层,提供基于消息驱动的 POJO。同时有 Java 和 .NET 的版本。

    amqp高级消息队列协议v1.0

    amqp高级消息队列协议v1.0

    AMQP消息解决方案SpringAMQP.zip

    Spring AMQP 是基于 Spring 框架的 AMQP 消息解决方案,提供模板化的发送和接收消息的抽象层,提供基于消息驱动的 POJO。同时有 Java 和 .NET 的版本。示例代码:public static void main(final String... args...

    spring-amqp 相关jar

    spring-amqp 相关jar , 最近在学spring amqp是时候找jar找了好长时间,现在找全了,在这分享给大家。

    Laravel开发-laravel-amqp

    Laravel开发-laravel-amqp 用于laravel和lumen发布和使用消息的AMQP包装器

Global site tag (gtag.js) - Google Analytics