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消息模型:

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的底层实现机制的抽象。

待续!!!!!


你可能感兴趣的:(openstack,openstack,通信,rpc)