轉載:http://blog.sina.com.cn/s/blog_3fe961ae0100yqzd.html Nova是OpenStack的云计算控制器,是Iaas系统的主要部分。 Nova中的调度模块scheduler文件夹下,其主要任务就是运用某种调度算法,选择出一个运算结点去执行VM instance。在nova版本2011.2中,scheduler模块下有以下几个文件: __init__.py: 介绍nova.scheduler模块,没有实质性功能。 api.py: 模块对外提供的接口,负责处理所有关于调度的请求。 driver.py: 定义了Scheduler类,这是所有调度类的父类。子类必须实现Scheduler的schedule(self, context, topic, *_args, **_kwargs)函数("Must override at least this method for scheduler to work."),然后才能实现自己的调度算法。 chance.py: 定义了ChanceScheduler类,是随机调度算法实现。下面是chance.py的部分源代码: class ChanceScheduler(driver.Scheduler): """Implements Scheduler as a random node selector.""" def schedule(self, context, topic, *_args, **_kwargs): """Picks a host that is up at random.""" #首先得到所有开启的主机的一个列表 hosts = self.hosts_up(context, topic) if not hosts: raise driver.NoValidHost(_("Scheduler was unable to locate a host" ...