Apache HTTP Server 2.4 版
說明 | 用於 mod_proxy_balancer 的依據要求數目計算的負載平衡排程演算法 |
---|---|
狀態 | 擴充 |
模組識別碼 | lbmethod_byrequests_module |
原始檔案 | mod_lbmethod_byrequests.c |
相容性 | 在 2.3 版中從 mod_proxy_balancer 分離 |
這個模組不提供任何的設定指令。它需要 mod_proxy_balancer
的服務,並提供 byrequests
的負載平衡方法。
可透過 lbmethod=byrequests
來啟用,這個排程器的概念基本上是,我們依序將要求分派到各個工作模組,以確保每個模組都能依據設定的比例取得一定數目的要求。其運作方式如下
lbfactor 是我們預期這個工作模組會處理的量,或稱工作模組的工作配額。這是一個正規化的數值,代表工作模組所分配的工作量「比例」。
lbstatus 是這個工作模組為了完成其工作配額,必須處理的急迫程度。
工作模組 是負載平衡器的成員,通常是一個遠端主機,使用某一支援的通訊協定運作。
我們分派工作配額到每個工作模組,然後再確認哪一個工作模組的工作急迫程度最高(最大的 lbstatus)。這個工作模組隨即被選定來進行工作,而它的 lbstatus 也會減少,減去的量是我們分派給所有工作模組的工作配額總和。因此,所有 lbstatus 的總和不會改變(*),而且我們也會依據需求來分派要求。
如果某些工作模組停用,其他工作模組仍然會受到正確的排程。
for each worker in workers
worker lbstatus += worker lbfactor
total factor += worker lbfactor
if worker lbstatus > candidate lbstatus
candidate = worker
candidate lbstatus -= total factor
如果負載平衡器的設定如下
工作模組 | a | b | c | d |
---|---|---|---|---|
lbfactor | 25 | 25 | 25 | 25 |
lbstatus | 0 | 0 | 0 | 0 |
並且 b 停用,就會產生下列排程
工作模組 | a | b | c | d |
---|---|---|---|---|
lbstatus | -50 | 0 | 25 | 25 |
lbstatus | -25 | 0 | -25 | 50 |
lbstatus | 0 | 0 | 0 | 0 |
(重複) |
這是它的排程:a c d a c d a c d ... 請注意
工作模組 | a | b | c | d |
---|---|---|---|---|
lbfactor | 25 | 25 | 25 | 25 |
具有與以下相同的行為
工作模組 | a | b | c | d |
---|---|---|---|---|
lbfactor | 1 | 1 | 1 | 1 |
這是因為所有 lbfactor 值會針對其他值進行正規化。對於
工作模組 | a | b | c |
---|---|---|---|
lbfactor | 1 | 4 | 1 |
b 工作器平均來說將收到 a 和 c 的 4 倍要求
以下非對稱設定會如預期運作
工作模組 | a | b |
---|---|---|
lbfactor | 70 | 30 |
lbstatus | -30 | 30 |
lbstatus | 40 | -40 |
lbstatus | 10 | -10 |
lbstatus | -20 | 20 |
lbstatus | -50 | 50 |
lbstatus | 20 | -20 |
lbstatus | -10 | 10 |
lbstatus | -40 | 40 |
lbstatus | 30 | -30 |
lbstatus | 0 | 0 |
(重複) |
在經過 10 次排程後,排程會重複,7 個 a 會被選取,3 個 b 會穿插在其中