1、消息队列
Openstack项目内部各组件之间采用远程通信机制RPC,而RPC采用消息队列来实现进程间的通信。Openstack使用的消息队列协议是AMQP,这是一个异步消息传递使用的应用层协议规范。应用程序之间无须专用连接,通过读写出入队列的消息即可进行相互通信。Openstack利用开源库oslo.messaging实现内部服务进程之间的通信。
2、AMQP的通信机制
1)建立连接,由生产者和消费者创建连接,连接到服务器/代理的物理节点上;
2)建立消息信道,信道建立在连接之上,一个连接可以建立多个信道,生产者连接虚拟主机建立信道,消费者连接到相应的队列上建立信道;
3)发送消息,生产者将消息发送到服务器/代理中的交换器;
4)转发消息,交换器收到消息后,根据一定的路由策略将消息转发到对应的队列;
5)接受消息,消费者监听相应的队列,一旦队列中有可以消费的消息,队列就将消息发送给消费者;
6)消息确认。当消费者完成一条消息的处理后,需要发送一条确认消息给相应的队列。
3、openstack中AMQP
Nova中的每个组件都会连接消息服务器,一个组件可能是一个消息发送者,也可能是一个消息接受者。Openstack默认使用kombu连接RabbitMQ服务器,消息的发送者与接受者都需要一个连接对象来连接RabbitMQ服务器。
Nova基于AMQP实现了下面两种类型的RPC:
1)rpc.call,同步调用,一个请求发送出去后,需要等待响应,调用需要指定目标服务节点;
2)rpc.cast,一般调用,是一种单向RPC,只将请求发送出去,不需要等待结果,不关心请求由哪个服务节点完成。