`
jzhihui
  • 浏览: 268088 次
  • 性别: 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一系列的吗?

相关推荐

    open stack nova 源码

    Nova由多个服务组成,如nova-api、nova-scheduler、nova-compute等,它们通过AMQP(Advanced Message Queuing Protocol)消息队列通信。nova-api作为前端接口,处理用户请求;nova-scheduler负责选择最适合运行实例...

    实训5:Nova的安装与配置.docx

    - `openstack-nova-conductor`:处理数据库访问和AMQP消息传递。 - `openstack-nova-console`:处理对虚拟机控制台的访问。 - `openstack-nova-novncproxy`:提供VNC代理服务。 - `openstack-nova-scheduler`:根据...

    nova创建instance的过程

    这个通信是通过RabbitMQ消息队列进行的,使用AMQP协议。 3. **计算节点**:计算节点上的`nova-compute`服务接收到消息后,开始实例化过程。它使用libvirt或其他支持的虚拟化技术(如KVM)创建虚拟机,并挂载映像...

    nova g3 源码

    - Nova使用RabbitMQ作为消息队列,通过AMQP协议协调各个服务之间的通信。`nova/objects`目录下的对象用于序列化和反序列化消息内容。 9. **并发与锁机制** - 由于多线程和分布式环境,Nova源码中大量使用了线程锁...

    openstack nova 部分原理

    Nova通过AMQP(高级消息队列协议)来实现各组件之间的通信。AMQP是一个提供可靠消息传递的网络协议,能够确保消息在不同组件之间的正确传送。 Nova还支持高级计算资源池的划分,使得管理员可以根据特定需求将物理...

    005.Nova详解1

    3. 安装并配置Nova组件,设置服务间通信的AMQP消息队列。 4. 创建数据库并同步Nova的模型。 5. 配置网络环境,如flat、vlan或neutron网络模型。 6. 启动Nova服务,并进行基本的功能测试。 七、Instance启动过程 1. ...

    云计算第三版精品课程配套PPT课件含习题(25页)第8章 OpenStack 开源虚拟化平台(二).pptx

    AMQP协议在Nova中的作用至关重要,它定义了一种应用层的消息传输标准,允许不同模块通过交换器、队列和绑定进行高效通信。交换器根据预设的路由规则将消息分发到相应的队列,队列则负责存储和转发消息。交换器有多种...

    nameko-nova-compat:nameko 的 Nova-RPC 兼容性

    它使用AMQP(Advanced Message Queuing Protocol)协议来实现异步消息传递,确保服务之间的解耦和高可用性。而Nameko-nova-compat的出现,是为了让开发者能够利用Nameko的便利性来编写与Nova-RPC兼容的服务,无需...

    OpenStack源码

    服务之间的通信基于AMQP协议,可以在`nova/objects`和`nova/conductor`等目录中找到相关实现。 6. **配置文件**:Nova的配置文件通常位于`etc/nova`目录下,通过修改这些配置文件可以调整Nova的行为和服务参数。 7...

    Openstack 启动instance ‘hvm’错误问题解决办法

    2012-05-25 10:07:12 TRACE nova.rpc.amqp File /usr/lib/python2.7/dist-packages/nova/rpc/amqp.py, line 252, in _process_data 2012-05-25 10:07:12 TRACE nova.rpc.amqp rval = node_func(context=c

    Openstack performance

    Nova的架构被简化为几个关键组件,包括HTTP REST API nova-api、消息队列AMQP nova-compute、调度器nova-scheduler、控制器nova-conductor和数据库。当前的虚拟机调度由nova-scheduler完成,它使用多种过滤器来选择...

    openStack学习文档

    - **消息队列:** 使用 AMQP (Advanced Message Queuing Protocol) 作为消息传输协议,常见的实现有 RabbitMQ 和 ZeroMQ。 - **数据库:** 使用关系型数据库 (如 MySQL) 或 NoSQL 数据库 (如 MongoDB) 来存储元数据。 ...

    openstack安装指南

    该项目采用Apache许可证授权,基于Python编程语言,整合了Tornado网页服务器、Nebula运算平台和Twisted软件框架,遵循OpenVirtualizationFormat(OVF)、AMQP、SQLAlchemy等行业标准。OpenStack支持多种虚拟化技术,如...

    openstack技术调研报告

    - **队列**:传递消息,支持AMQP协议的任何Message Queue Server均可使用,官方推荐使用RabbitMQ。 - **SQL数据库**:存储虚拟机实例数据、网络数据等。 - **用户仪表板**:提供Web界面供普通用户或管理员管理...

    OpenStack Grizzly版本单节点双网卡实验部署指导书

    - **RabbitMQ简介:** RabbitMQ是一个开源的消息代理和队列服务器,实现AMQP(高级消息队列协议),用于在分布式系统中处理消息传递。 - **安装过程:** 可以通过apt-get命令安装RabbitMQ服务端,并进行必要的配置,...

    openstack安装图解.docx

    2. **安装和配置组件**:逐个安装和配置OpenStack的各个组件,如Nova、Swift、Quantum等,这通常涉及数据库、消息队列(如RabbitMQ,用于AMQP)和各种服务的配置。 3. **部署和测试**:启动OpenStack服务,验证各...

    OpenStack与先电Iaas云平台2022优秀文档.ppt

    3. Nova(计算服务):一套控制器,用于为单个用户或使用群组管理虚拟机实例的整个生命周期,根据用户需求来提供虚拟服务。 4. Neutron(网络支持):提供云计算的网络虚拟化技术,为OpenStack其他服务提供网络连接...

    Openstack L版,最新配置文件node1

    2. **RabbitMQ**:这是一种基于AMQP协议的消息队列服务器,OpenStack使用RabbitMQ作为其默认的消息传递中介,负责在各个服务之间传递事件和请求,实现分布式系统的解耦。 3. **iSCSI(Internet Small Computer ...

Global site tag (gtag.js) - Google Analytics