我们在分析虚拟机的创建和Nova Scheduler调度算法中,其实已经涉及到了Nova Compute服务的一些内容,不过Nova Compute服务完成的工作要更多。这篇文章我们来详细的分析一下Nova Compute服务的一个重要内容——定时任务。
在前面分析Nova Scheduler调度算法中,大家是否还记得在HostManager对象中有两个重要的变量:
1. host_states变量:该变量保存了计算节点CPU、内存和硬盘等硬件资源的信息。host_states变量的数据是从数据库中获得,而Nova数据库中的节点状态信息由Nova Compute服务的update_available_resource定时任务更新。
2. service_states变量:该变量保存了计算节点Hypervisor的性能信息。service_states变量的数据是通过Nova Compute服务的_report_driver_status和publish_service_capabilities定时任务更新。
Service类的start方法定义了一个线程运行服务的定时任务,定时任务启动的代码如下
class Service(object):
def start(self):
...
#创建DynamicLoopingCall对象
periodic = utils.DynamicLoopingCall(self.periodic_tasks)
#调用DynamicLoopingCall对象的start方法,创建绿色线程
periodic.start(initial_delay=initial_delay,
periodic_interval_max=self.periodic_interval_max)