首页 » OpenStack系统架构设计实战 » OpenStack系统架构设计实战全文在线阅读

《OpenStack系统架构设计实战》8.1 概述

关灯直达底部

OpenStack的消息总线用于OpenStack的组件(Nova、Cinder、Glance等)的内部不同的服务进程间的相互通信。软件的消息总线的概念也是从硬件的总线概念被引入的,类似于硬件总线的做法,各类服务进程在通过消息总线通信时,一些服务向消息总线上发送消息,其他的服务进程则从总线上获取消息。

OpenStack组件之间通常都是采用REST API来互相调用的,同时组件内的服务就需要采用诸如基于消息总线的RPC远程调用的方式来通信。OpenStack组件内各服务之间通信可以采用如下两种方式。

(1)远程过程调用

进程之间的相互作用是由一个进程先向另一个进程发送一个报文请求服务,然后等待回答;服务进程接收一个请求,然后发送回答。这样一种交互作用很像通常意义上的过程调用。但是在计算机网络系统中,这种调用可能在不同的机器上执行,因此被称为远程过程调用(RPC,Remote Procedure Call)。

在OpenStack的RPC调用共定义了两种远程调用,分别是RPC.call和RPC.cast。RPC.call是采用request/response的方式,当Client向服务端发起RPC调用时,需要获得服务端的应答,可以理解为这是带返回值的远程过程调用。RPC.cast的方式是Client端发起RPC调用后,不需要获得服务端的应答,可以理解为不带返回值的远程过程调用。

(2)事件通知

在分布式架构中,事件通知(Event Notification)比RPC更实用。某个服务进程可以把事件通知的消息发送到消息总线上,该消息总线上所有对事件感兴趣的服务进程都可以获取该事件通知并进行处理,处理后的结果并不会返回事件的发送者。

OpenStack支持的消息总线类型基本都是基于AMQP协议的,比如OpenStack默认使用的消息总线是RabbitMQ,也可以配置成QPID,在理论上也支持其他任何基于AMQP消息队列协议的消息总线类型。