什么是RPC
RPC即Remote Procedure Call(远程方法调用),是Openstack中一种用来实现跨进程(或者跨机器)的通信机制。Openstack中同项目内(如nova, neutron, cinder...)各服务(service)及通过RPC实现彼此间通信。Openstack中还有另外两种跨进程的通信方式:数据库和Rest API。
Openstack中服务主要以进程的形式实现。也可以以线程的形式实现,但是Python中的线程是协作模型,无法发挥系统中多CPU(或多CPU核心)的能力。
RCP只定义了一个通信接口,其底层的实现可以各不相同。目前Openstack中的主要采用AMQP来实现。AMQP(
Advanced Message Queuing Protocol)是一种基于队列的可靠消息服务协议,具体可参考
http://en.wikipedia.org/wiki/Advanced_Message_Queuing_Protocol。作为一种通信协议,AMQP同样存在多个实现,如Apache Qpid, RabbitMQ等。
AMQP概念
publisher:消息发布者
receiver:消息接收者
queue:
用来保存消息的存储空间,消息没有被receiver前,保存在队列中。
exchange:
exchange是一个很重要的概念。用来接收publisher发出的消息,并决定消息后续处理。后续处理取决于消息的路由算法,而路由算法又是由exchange type决定的。
AMQP中定义的类型包括:direct, topic, headers and fanout。