1. 程式人生 > >輪詢演算法的一種簡單實現

輪詢演算法的一種簡單實現

輪詢演算法(Round-Robin)

輪詢演算法是最簡單的一種負載均衡演算法。它的原理是把來自使用者的請求輪流分配給內部的伺服器:從伺服器1開始,直到伺服器N,然後重新開始迴圈。

演算法的優點是其簡潔性,它無需記錄當前所有連線的狀態,所以它是一種無狀態排程。
  假設有N臺伺服器:S = {S1, S2, …, Sn},一個指示變數i表示上一次選擇的伺服器ID。變數i被初始化為N-1。該演算法的虛擬碼如下:

j = i;  
do  
{  
    j = (j + 1) mod n;  
    i = j;  
    return Si;  
} while (j != i);  
return NULL; 

輪詢演算法假設所有伺服器的處理效能都相同,不關心每臺伺服器的當前連線數和響應速度。當請求服務間隔時間變化比較大時,輪詢演算法容易導致伺服器間的負載不平衡。所以此種均衡演算法適合於伺服器組中的所有伺服器都有相同的軟硬體配置並且平均服務請求相對均衡的情況。

package com.markor.lunxun;

/**
 * @describe:
 * @author: caichangmeng <[email protected]>
 * @since: 2018/10/22
 */
public class Demo {

    /**
     * @Date:     2018/10/22
     * @describe: 簡單的輪訓演算法...
     *              簡介: 1. 將目標放置一容器內.
     *                    2. 定義一標識, 記錄上次訪問的該目標物件(標識應該是索引等, 需要有規律性)
     *                    3. (該標識 + 1) 取模, 然後獲取到該目標物件. 同時更新該目標標識
     * @return : null
     * @throws:
     */
    public static void main(String[] args) {
        int i = 0;
        int[] arr = {10,9,8,7,6,5,4,3,2,1,0};
        int index = 0;
        for (; i < 11; i++) {
            int nextIndex = (index+1) % arr.length;
            index = nextIndex;
            System.out.println(arr[index]);
        }
    }
}