讀古今文學網 > OpenStack系統架構設計實戰 > 8.1 概述 >

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消息隊列協議的消息總線類型。