1、MaxMin与MinMin算法
Condor系统是面向高吞吐率计算计算而设计的,它的主要目的就是利用网络中工作站的空闲时间来为用户服务。针对这种应用,Condor使用的调度方法就相对简单一些。它定义了一套半结构化的数据模型用于描述资源的特性和表达用户的需求。它的调度分为两部分:匹配和声明,在匹配阶段,Matchmaker在可获得资源中找到最适合任务的资源,然后通知用户和服务提供者,随后用户和服务提供者再进行声明,以此确立两者之间消费与服务的关系。Condor采用集中式调度模式,且不能保障用户服务质量。
最小完成时间算法MCT(Minimum CompletionTime)是以任意的顺序将任务映射到具有最早完成时间的主机上,它并不保证任务被指派到执行它最快的主机上,而仅关心如何最小化任务完成时间,因而可能导致任务在资源上的运行时间过长,从而潜在地增加了调度跨度。
Min-Min算法是一种经典的启发式算法,其总是执行具有最短完成时间的任务,具有实现简单、执行快速的特点。该算法计算每个任务在各个机器上的期望完成时间,获得每个任务的最早完成时间机器计算资源,再将具有最小最早完成时间的任务分配给获得它的计算资源,分配完成后更新计算资源的就绪时间,并将已分配的任务从任务集合中删除。如此重复,直到所有任务被分配完毕。Min—Min算法的详细执行过程如下:
设有m个相互独立的任务和n台机器,则
对集合U中每个待分配的任务Ti分别计算出分配该任务到n台机器上的最小完成时间,形成MCT矩阵。当U为非空时,反复执行如下操作直至为空;
利用MCT矩阵,首先分别找到能够最短完成该任务的机器及最短完成时间,然后在所有的最短完成时间中找出最小的最短完成时间对应的任务(假设为a),设其对应的主机(假设为b),把任务a分配到机器b上;
从U中把任务a删除,并更新MCT矩阵。
大量实验表明Min-Min算法存在着一个很大的缺点,就是算法的资源负载均衡性能(Load Balancing)不高。
Max-Min算法与Min-Min算法相似,都是将任务指派给具有最小预测完成时间的主机,不同的是Max-Min算法从所有任务的最小完成时间中选取一个最大值,然后进行相应任务。主机映射,之后重复此过程直至待调度任务集合为空。
轮叫调度(Round Robin Scheduling)算法就是以轮叫的方式依次将请求调度不同的服务器,即每次调度执行i = (i + 1) mod n,并选出第i台服务器。算法的优点是其简洁性,它无需记录当前所有连接的状态,所以它是一种无状态调度。
在系统实现时,我们引入了一个额外条件,当服务器的权值为零时,表示该服务器不可用而不被调度。这样做的目的是将服务器切出服务(如屏蔽服务器故障和系统维护),同时与其他加权算法保持一致。所以,算法要作相应的改动,它的算法流程如下:
轮叫调度算法流程
假设有一组服务器S= {S0, S1, …, Sn-1},一个指示变量i表示上一次选择的服务器,W(Si)表示服务器Si的权值。变量i被初始化为n-1,其中n > 0。
j = i;
do {
j = (j+ 1) mod n;
if(W(Sj) > 0) {
i = j;
returnSi;
}
} while(j != i);
returnNULL;
轮叫调度算法假设所有服务器处理性能均相同,不管服务器的当前连接数和响应速度。该算法相对简单,不适用于服务器组中处理性能不一的情况,而且当请求服务时间变化比较大时,轮叫调度算法容易导致服务器间的负载不平衡。