Nova-RPC rabbitmq
来源:互联网 发布:淘宝好的女装店铺推荐 编辑:程序博客网 时间:2024/05/16 10:09
Nova-RPC rabbitmq的使用
英文看着有点费劲。整理成中文的吧。
RabbitMQ与NOVA
RabbitMQ是用于OpenStack云的一个消息组件。RabbitMQ位于两个nova的组件中间,从而可以让这两个组件在松耦合的情况下通信。更精确地来说,nova的组件用RPC(远程过程调用)来与另外一个组件进行交互。这种方式是建立在发布/认购范式的策略下。那么在这种情况下,有如下好处可以达到。
1、客户端和服务端的解耦合。(更多的时候,客户并不关心服务端身在何处)。
2、客户端与服务端的异步机制。因为客户端并不要求服务端的实时响应。
3、随机平衡的远程调用。比如有多个服务端在运行的时候,一般一个调用只交付给最近最可用的服务端。
Nova一般来说,支持Direct和Topic-Based消息交换。整个系统中的架构如下图。
Nova实现了RPC(包括请求与响应,以及只有请求)。
1、请求与响应:rpc.call
2、只有请求rpc.cast
通过基于AMQP的RPC类提供了一个代理类。这个类提供了函数调用时的消息的编码与解码。每个Nova服务(比如Compute服务,Volume服务,等)在初始化的时候就建立了两个队列:
1、一个接收带有routing键值NODE-TYPE.NODE-ID,比如comput.hostname. 这个是指明了主机服务类型及主机地址。
2、接收带有routing键值NODE-TYPE,比如compute。
第一个队列是用于NOVA-API把这个队列的消息定向到一个特定的节点(也就是物理主机)。比如euca-terminate-instance i-XXXXX 的时候,这种情况下,只有运行着名为i-xxxx的虚拟机的主机才需要接收这个消息,并进行响应,做出相应的动作。API扮演的角色也会因为消息的不同,而有所不同。
1、当使用RPC.CALL时API表现得像一个消费者。
2、当使用rpc.cast时,API表现得像一个publisher.
NOVA RPC 映射
下面这个图表示了当一个虚拟机开始创建并在云中运行的时候,RabbitMQ节点中的内部结构。每个NOVA组件连接到RabbitMQ,然后根据其角色,比如角色可能有Compute node, Network node。由于角色不同,那么所使用的Queue也会不同。
1、Invoker Queue。角色为API和Scheduler时使用。Invoker主要动作:通过rpc.call、rpc.cast 发送消息。
2、Woker Queue。角色为Compute, Volume, Network时使用。主要是从消息队列中拿消息,并对rpc.call做出响应。
实际上,Invoker和worker并不真正出现在NOVA的架构中,之所以这么提,完全是为了便于理解。
上面这个图,展示了内部结构:
1、Topic Publisher:会话发起人。当开始调用rpc.cast和rpc.call的时候,Topic Publisher就开始了其生命周期。这个对象被实例化并且用来压入一个消息到消息队列系统中。每个Publisher连接常常是基于同一个话题的交换的。其生命周期与消息的传递有关。
2、Direct Consumer:直接消费者。直接消费者的生成是由于rpc.all被执行的时候,这个对象被实例化然后用于接收来自于队列系统的响应消息。每个消费者连接到一个单一的direct-based交换(此交换是基于一个单一独有的队列)。其生命周期也是受限于消息传输。交换标识和队列的标识是由一个UUID生成器生成的,然后被Topic Publisher编码(仅限于rpc.call操作)。
3、Topic Consumer:一个话题消费者被唤醒并且是同量一个Worker被实例化,一起存在于整个生命周期。这个对象用于从队列中接收消息,并且此话题消费者还会调用Worker的相应的应用程序。一个Topic Consumer连接一个相同的topic-based交换。这个Topic-based交换要么是一个共享队列要么是一个独特的独享的队列。并且一个Worker有两个topic consumer:
a、一个只关心rpc.cast操作。也就是只关心其交换key是topic.
b、一个只关心rpc.call操作。也就是连接到一个独有的队列中。其交换key是topic.host.
4、Direct Publisher:一个Direct Publisher开始其生命周期是由于rpc.call的调用。其在调用的同时,被实例化并且把消息返回到请求/响应操作。这个对象被连接到一个direct-based交换。这个交换是由到来的消息所标识。
juacm
- Nova-RPC rabbitmq
- rabbitmq rpc
- RabbitMQ RPC
- RabbitMQ RPC
- OpenStack nova rpc
- Nova中的RPC
- Nova and RabbitMQ
- Nova RPC服务 之 Nova RPC服务的创建
- nova的rpc调用机制
- AMQP<--RPC,rabbitmq-->札记
- rabbitmq学习6:RPC
- rabbitmq rpc java
- rabbitmq c++ rpc
- RabbitMQ RPC方式调用
- rabbitmq RPC java实现
- RabbitMQ实现RPC技术
- RabbitMQ的RPC【JAVA】
- RabbitMQ之RPC实现
- android layoutinflater
- testLib
- Android应用程序消息处理机制(Looper、Handler)分析
- 用完成端口开发大响应规模的Winsock应用程序
- this详解
- Nova-RPC rabbitmq
- 使用JConsole 监测自己的应用,尤其对多线程的情况很有用
- java中使用JAXP解析xml(三)对XML文档中进行增、删、改
- ArcMap - 横向输出地图
- Android手势研究(textview及listview对比验证)
- Delphi的学习笔记十四——接口1
- 马士兵struts2学习笔记(详细版)
- html控件和服务端控件的区别
- MapReduce和并行数据库,朋友还是敌人?