應用負載均衡之LVS(五):加權調度演算法的規律

来源:https://www.cnblogs.com/f-ck-need-u/archive/2018/08/16/9490629.html
-Advertisement-
Play Games

返回 "LVS系列文章:http://www.cnblogs.com/f ck need u/p/7576137.html"   加權調度演算法是一種很常見的調度演算法。如果只有兩個後端,調度的順序很容易,但是如果後端多於2個,可能就不像想象中那樣的順序進行調度。 所以,本文揭秘加權調度演算法到 ...


返回LVS系列文章:http://www.cnblogs.com/f-ck-need-u/p/7576137.html

 

加權調度演算法是一種很常見的調度演算法。如果只有兩個後端,調度的順序很容易,但是如果後端多於2個,可能就不像想象中那樣的順序進行調度。

所以,本文揭秘加權調度演算法到底是怎麼進行調度的。

1.加權調度演算法公式

首先,給一個LVS官方手冊給的加權調度演算法公式:

假設有一組伺服器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;
}

比如,A、B、C三個後端的權重比是2:3:4,那麼一個調度迴圈內的調度順序是CBCABCABC。

如果你不想從演算法公式里找規律,那麼看下麵。

2.加權調度通俗規律

記住三個權重調度規則:
1.先約分
2.從最大權重開始調度
3.同權重的後端,從前向後調度

例如,三台後端A:B:C=2:3:4。這裡沒法約分。

  1. 調度C
    調度之後,比率變成A:B:C=2:3:3,B和C權重相同,從B開始調度
  2. 調度B
    調度之後,比率變成A:B:C=2:2:3,所以下次調度C
  3. 調度C
    調度之後,比率變成A:B:C=2:2:2,下次從A開始
    當權重全部調整到相同值時,就按照先後順序不斷迴圈,直到調度完所有權重
  4. 調度A,調度之後,比率變成A:B:C=1:2:2
  5. 調度B,調度之後,比率變成A:B:C=1:1:2
  6. 調度C,調度之後,比率變成A:B:C=1:1:1
  7. 調度A,調度之後,比率變成A:B:C=0:1:1
  8. 調度B,調度之後,比率變成A:B:C=0:0:1
  9. 調度C,調度之後,比率變成A:B:C=0:0:0
  10. 進入下一個調度迴圈,順序是:CBCABCABC

所以,每個調度迴圈的調度順序為:CBCABCABC

調度過程如下圖:

再給個示例,A:B:C:D=2:4:6:8

首先約分,得到A:B:C:D=1:2:3:4

  1. 調度D
  2. 調度C
  3. 調度D
  4. 調度B
  5. 調度C
  6. 調度D
  7. 調度A
  8. 調度B
  9. 調度C
  10. 調度D

所以,調度順序是DCDBCDABCD。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 系統計劃任務 大部分系統管理工作都是通過定期自動執行某個腳本來完成的,那麼如何定期執行某個腳本,從而實現運維的自動化,這就要藉助Linux的cron功能了. 計劃任務分為一次性計劃任務和周期性計劃任務. 一次性計劃任務 每晚11店30分開啟網站服務. 周期性計劃任務 每周一的凌晨3點30分把/var ...
  • ROBOCOPY 命令: // 描述: 相比較 xcopy、copy 來說,複製的功能就強大很多, xcopy、copy 是單線程的,robocopy是多線程的,但是和一些專業的複製軟體相比速度還是要差一些。 當然其參數也是最多的,想記都記不住 --_-- ~ // 語法: robocopy <so ...
  • vim是linux下功能非常強大的文本編輯器,因為是命令操作,所以學習來比較累,下麵總結一下常用的幾點操作。 1.使用方法 在終端下直接輸入:vim test.txt,即可打開test.txt文件進行編輯,若不存在test.txt文件,則表示即將新建此文件。 2.新建或編輯文件 vim new.tx ...
  • 一、Nginx簡介 Nginx是一款開源代碼的高性能HTTP伺服器和反向代理伺服器,同時支持IMAP/POP3/SMTP代理服務 1.Nginx工作原理 Nginx由內核和模塊組成,完成工作是通過查找配置文件將客戶端請求映射到一個location block(location是用於URL匹配的命令) ...
  • 將PDF轉換成Word的操作,大家在日常學習工作中都會接觸到;一般這個時候,我們第一反應就是度娘好幾款轉換軟體試一試。用過一輪後,你會發現效果好的轉換器鳳毛麟角,明明就幾頁的文檔,卻出現大量的空格、亂碼、回車符,不得不進行繁瑣的二次編輯。想想白花了那麼多時間下載一堆軟體,還沒達到轉換的目的,內心著實 ...
  • 請看題! 題目1: Int64 a = 300000000; Int64 b = 248201000; Int64 c = a - b; 請問 c =? 題目2: int a = 300000000; int b = 248201000; int c = a - b; 請問 c =? 請各位大牛們踴 ...
  • 原文轉載http://man.linuxde.net/ftp ftp命令用來設置文件系統相關功能。ftp伺服器在網上較為常見,Linux ftp命令的功能是用命令的方式來控制在本地機和遠程機之間傳送文件,這裡詳細介紹Linux ftp命令的一些經常使用的命令,相信掌握了這些使用Linux進行ftp操... ...
  • COPY 命令: // 描述: 將一個或多個文件從一個位置複製到另一個位置。 ### 註意:如果想複製文件夾,請使用 XCOPY 。 // 語法: copy [/a] [/b] [/d] [/v] [/n] [/z] [/y | /-y] <source> [/a] [/b] [<source> [ ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...