1. 程式人生 > >openstack中的rpc通訊

openstack中的rpc通訊

RPC即Remote Procedure Call(遠端方法呼叫),是Openstack中一種用來實現跨程序(或者跨機器)的通訊機制。Openstack中同項目內(如nova, neutron, cinder...)各服務(service)及通過RPC實現彼此間通訊。

RCP只定義了一個通訊介面,其底層的實現可以各不相同。目前Openstack中的主要採用AMQP來實現。AMQP(Advanced Message Queuing Protocol)是一種基於佇列的可靠訊息服務協議,具體可參考http://en.wikipedia.org/wiki/Advanced_Message_Queuing_Protocol

。作為一種通訊協議,AMQP同樣存在多個實現,如Apache Qpid, RabbitMQ等。

AMQP 模型有四個重要的角色:

  • Publisher:訊息傳送者,將訊息傳送的 Exchange 並指明 Routing Key,以便 Message Queue 可以正確的收到訊息。Routing key用於 Exchange 判斷哪些訊息需要傳送對應的 Message Queue。

  • Consumer:訊息接受者,從 Message Queue 獲取訊息。

  • Exchange:根據 Routing key 轉發訊息到對應的 Message Queue 中。

  • queue:用來儲存訊息的儲存空間,訊息沒有被receiver前,儲存在佇列中。

exchange是一個很重要的概念。用來接收publisher發出的訊息,並決定訊息後續處理。後續處理取決於訊息的路由演算法,而路由演算法又是由exchange type決定的。AMQP中定義的型別包括:direct, topic, headers and fanout。

  • Direct Exchange:Point-to-Point 訊息模式,訊息點對點的通訊模式,Direct Exchange 根據 Routing Key 進行精確匹配,只有對應的 Message Queue 會接受到訊息。

  • Topic Exchange:Publish-Subscribe(Pub-sub)訊息模式,Topic Exchange 根據 Routing Key 進行模式匹配,只要符合模式匹配的 Message Queue 都會收到訊息。

  • Fanout Exchange:廣播訊息模式,Fanout Exchange 將訊息轉發到所有繫結的 Message Queue。

Openstack RPC中主要用了這三種exchange type。

AMQP訊息模型:

AMQP訊息模型.jpg

Openstack RPC中沿用了AMQP中的一些概念,並做了一些擴充套件。理解AMQP概念是理解RPC的前提。RPC中定義瞭如下主要概念:

  • Server:同AMQP中的consumer。

  • Client:同AMQP中的publisher。

  • Exchange:同AMQP中的exchange。

  • Topic:同AMQP中的topic exchange type。topic類似於面向物件中的class概念,一個topic下可以包括多個方法,client通過topic呼叫一個方法,server也通過監聽topic來提供方法呼叫。通常每個topic下的方法應該是邏輯上密切相關的,正如class的設計一樣。

下面幾個概念是RPC擴充套件的:

  • Namespace:用來組織server中的方法(method),預設是null。

  • Method:及被呼叫的方法,和普通(本地)方法呼叫中的方法是一個概念。

  • API version:用來標識server中方法的版本。隨著時間的推移,server中的方法可能不斷變化,提供版本資訊可以保持對之前client的相容。

  • Transport:對RPC的底層實現機制的抽象。

待續!!!!!