(一)靜態輪循排程演算法實現

2021-09-03 08:20:02 字數 2123 閱讀 4503

有一堆組,每組成員不定時進出組,且組內成員會有狀態,要求實現請求過來時,輪詢分配給特定狀態的成員。於是想到了經典的round-robin演算法,根據業務寫了個demo,如下:

<?php

/** * class roundrobin

* 不公平迴圈分配實現演算法

* 原理:

* 通過取模實現輪循排程

* 資料結構:

* * 許可權人員集合 [1,2,3,4,5]

* 初始輪循指標位置:4

* * 測試操作:

* 1.人員狀態變更

* 2.組內人員變更 (不公平)

*/class roundrobin

//人員上/下線

private function checkstatus()

//todo 加減組內成員 如果能實現動態輪尋就完美了 靜態有漏洞 會掠過部分客服

public function changegroupmembers()

//獲取當前組成員列表

public function getmembers()

public function choose() //未找到

continue;

}else}}

}//測試引數

$a = new roundrobin([1,2,3,4,5]);

echo '----第一輪排程-----'.php_eol;

for($i = 1;$i<10;$i++)

echo '----結束-----'.php_eol;

echo '----修改組內客服-----'.php_eol;

$a->changegroupmembers();

echo '----第二輪循排程-----'.php_eol;

for($i = 1;$i<10;$i++)

執行結果:

macbook-2:desktop lemon$ php roundrobin.php

當前組內成員: [1,2,3,4,5]

----第一輪排程-----

選中目標: 1

選中目標: 2

選中目標: 3

選中目標: 4

選中目標: 5

選中目標: 1

選中目標: 2

選中目標: 3

選中目標: 4

選中目標: 5

選中目標: 1

選中目標: 2

選中目標: 3

選中目標: 4

選中目標: 5

選中目標: 1

選中目標: 2

選中目標: 3

選中目標: 4

選中目標: 5

選中目標: 1

選中目標: 2

選中目標: 3

選中目標: 4

選中目標: 5

----結束-----

----修改組內客服-----

準備刪除成員: 4

----第二輪循排程-----

選中目標: 2 //******第二輪排程跳過了1*******

選中目標: 3

選中目標: 5

選中目標: 1

選中目標: 2

選中目標: 3

選中目標: 5

選中目標: 1

選中目標: 2

選中目標: 3

選中目標: 5

選中目標: 1

選中目標: 2

選中目標: 3

選中目標: 5

選中目標: 1

選中目標: 2

選中目標: 3

選中目標: 5

選中目標: 1

選中目標: 2

選中目標: 3

選中目標: 5

選中目標: 1

結果顯示,在模數變更之後,迴圈的指標沒有跟著變更,導致的新一輪的排程中,有的成員被略過,還有可能被重複排程,具體得看剔除的位置。所以單單靠取模來輪詢排程,有一定的缺陷,這種演算法適合靜態目標的輪詢,但是如果要實現動態計算指標位置,也不是乙個簡單的演算法,有違初衷。感興趣的朋友可以研究下,我還沒想到如何動態平衡指標,(ノへ ̄、)捂臉。。。但是有另一種演算法也可以實現動態平衡,那就是——引用計數,請看下篇文章——動態輪循排程演算法實現

(二)動態輪循排程演算法實現

想看上篇的童鞋請移步靜態輪循排程演算法實現 上篇說到,使用取模方式,沒有辦法實現公平輪詢排程,於是有了這篇,採用引用計數的方式實現動態輪詢排程。如下 class roundcounter 動態公平迴圈分配實現演算法 原理 通過整體迴圈計數和成員迴圈計數實現輪循排程 資料結構 許可權人員集合 1,2,...

LVS排程演算法(上) 靜態排程演算法

lvs的排程方法有十幾中,每種方法的排程標準和適用場景不同。大體有兩大類,分別為固定排程方法或稱為靜態排程方法,另一類是動態排程方法。常用的具體演算法有十種。1 輪詢排程 rr 將所有請求平均的分發到每個集群節點上,即輪流排程。2 加權輪詢排程 wrr 由於不同的伺服器效能不同,因此要考慮讓效能高的...

python3實現DNS網域名稱輪循業務監控

大部分的dns解析都是乙個網域名稱對應乙個ip位址,但是通過dns輪循技術可以做到乙個網域名稱對應多個ip,從而實現最簡單且高效的負載平衡,不過此方案最大的弊端是目標主機不可用時無法被自動剔除,因此做好業務主機的服務可用監控至關重要。本示例通過分析當前網域名稱的解析ip,再結合服務埠探測來實現自動監...