天天看點

RoundRobin

RoundRobin LoadBalance

Round-Robin既是輪詢算法,是按照公約後的權重設定輪詢比率,即權重輪詢算法(Weighted Round-Robin) ,它是基于輪詢算法改進而來的。這裡之是以寫RoundRobin是為了跟Dubbo中的内容保持一緻。

輪詢排程算法的原理是:每一次把來自使用者的請求輪流配置設定給内部中的伺服器。如:從1開始,一直到N(其中,N是内部伺服器的總個數),然後重新開始循環。

該算法的優點:

其簡潔性,它無需記錄目前所有連接配接的狀态,是以它是一種無狀态排程。

該算法的缺點:

輪詢排程算法假設所有伺服器的處理性能都相同,不關心每台伺服器的目前連接配接數和響應速度。當請求服務間隔時間變化比較大時,輪詢排程算法容易導緻伺服器間的負載不平衡。

是以此種均衡算法适合于伺服器組中的所有伺服器都有相同的軟硬體配置并且平均服務請求相對均衡的情況。但是,在實際情況中,可能并不是這種情況。由于每台伺服器的配置、安裝的業務應用等不同,其處理能力會不一樣。是以,我們根據伺服器的不同處理能力,給每個伺服器配置設定不同的權值,使其能夠接受相應權值數的服務請求。

權重輪詢排程算法流程

假設有一組伺服器S = {S0, S1, …, Sn-1},W(Si)表示伺服器Si的權值,一個訓示變量i表示上一次選擇的伺服器,訓示變量cw表示目前排程的權值,max(S)表示集合S中所有伺服器的最大權值,gcd(S)表示集合S中所有伺服器權值的最大公約數。變量i初始化為-1,cw初始化為零。其算法如下:

while (true) {
  i = (i + 1) mod n;
  if (i == 0) {
    cw = cw - gcd(S);
  if (cw <= 0) {
    cw = max(S);
  if (cw == 0)
    return NULL;
  }
}
if (W(Si) >= cw)
  return Si;
}      
RoundRobin

由于權重輪詢排程算法考慮到了不同伺服器的處理能力,是以這種均衡算法能確定高性能的伺服器得到更多的使用率,避免低性能的伺服器負載過重。是以,在實際應用中比較常見。

繼續閱讀