Round Robin(中文翻译为轮询调度)是一种以轮询的方式依次将一个域名解析到多个IP地址的调度不同服务器的计算方法。

在系统实现时,我们引入了一个额外条件,当服务器的权值为零时,表示该服务器不可用而不被调度。这样做的目的是将服务器切出服务(如屏蔽服务器故障和系统维护),同时与其他加权算法保持一致。所以,算法要作相应的改动,它的算法流程如下:

轮询调度算法流程

假设有一组服务器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;

return Si;

}

} while (j != i);

return NULL;

轮询调度算法假设所有服务器处理性能均相同,不管服务器的当前连接数和响应速度。该算法相对简单,不适用于服务器组中处理性能不一的情况,而且当请求服务时间变化比较大时,轮询调度算法容易导致服务器间的负载不平衡。

虽然Round-Robin DNS方法也是以轮询调度的方式将一个域名解析到多个IP地址,但轮询DNS方法的调度粒度是基于每个域名服务器的,域名服务器对域名解析的缓存会妨碍轮询解析域名生效,这会导致服务器间负载的严重不平衡。这里,IPVS轮询调度算法的粒度是基于每个连接的,同一用户的不同连接都会被调度到不同的服务器上,所以这种细粒度的轮询调度要比DNS的轮询调度优越很多。