openstack中的服务主要有两种:一种是rest服务,提供Rest API;一种RPC服务,提供RPC API。本文讨论RPC服务的实现。Rest服务的实现在《openstack学习之各种API》有所涉及。
RPC服务其实就是一个RPC server,client(客户)可以通过RPC API进行调用。以nova为例,nova中的多数服务(service)都是一个RPC server。比如nova-conductor,nova-compute,nova-consoleauth,nova-scheduler...等
实现一个rpc server需要几个部分:
1)启动命令代码
2)Service定义
3)Manager定义
4)功能实现代码
其中1)2)3)属于框架性代码,每个rpc server的实现都差不多;4)和rpc server要实现的功能相关。
其中1)2)3)属于框架性代码,每个rpc server的实现都差不多;4)和rpc server要实现的功能相关。
以nova为例,来分析这些部分的实现。
nova.cmd package中定义了所有服务的启动代码,包括rpc server和rest api服务。api.py,api_ec2.py,api_metadata.py,api_os_compute.py是rest api服务。这个目录中还包含了一些命令工具(utility command),如manage.py。读者可自行查看。
rpc server的启动代码基本类似:
1)定义main
2) 加载配置文件
3) 配置log
4) 创建server对象
5)启动service.
步骤4的代码compute:
server = service.Service.create(binary='nova-compute',