一種伺服器的負載均衡選取演算法

2021-08-27 16:50:31 字數 1411 閱讀 4818

演算法描述如下

假設有n個服務單元,(服務單元的負載是1 ~ 100,100是滿負荷運轉)。他們的負載分別是l1 l2 l3 .... ln。

第i臺服務的選中的權值 ti = 100 - li;

那麼整個掉落區間就為 mn= t1 + t2 + t3 + ... + tn;

t0 = 0;

隨進產生乙個0 ~ mn之間的數v,如果 v < t0 + t1 +...ti 並且v > t0 + t1 + ... +t(i - 1),那麼就 選取第i臺服務作為處理新業務的服務單元。

**實現:

節點負載結構:

typedef struct nodeloadinfo

;}nodeloadinfo;

選取區間結構:

typedef struct noderange

;}noderange;

負載選取器的實現介面:

class cnodeloadmanager

;

在上面的介面當中,select_node是核心函式,一下是select_node的偽**實現:

uint32_t select_node()

} if(region_ > 0) //隨機概率選取

ret = locate_server(region_);

return ret;

}

在上面的**中,實現了區間的計算。

locate_server函式查詢對應的服務節點,偽**:

uint32_t locate_server(int32_t region)

if(pos < 0)

if(node_ranges_[pos].max_value >= seed && node_ranges_[pos].min_value <= seed)

else if(node_ranges_[pos].max_value < seed)

else if(node_ranges_[pos].min_value > seed)

} while (true);

return ret;

}

完全的**在revolver的base_nodes_load.hbase_nodes_load.cpp之中。

測試結果:

我們模擬了10個節點,隨機指定10 ~ 100的負載值,然後選取1000次業務處理的節點,結果如下圖:

從結果看來是比較均衡的選取,比較理想。

一種負載均衡的演算法

今天晚上搞 走讀,一夥人在一起就一段 糾結了半天 大概是下面這個樣子 for int i 0 i urls.size i 這樣的每個使用者有乙個userid,當使用者點播節目的時候,需要去鑑權伺服器進行鑑權,一台鑒權伺服器可能無法應付過多的使用者,這裡布置了多台伺服器,伺服器的位址存放在urls這個...

伺服器負載均衡演算法

3.1 伺服器負載均衡演算法 big ip是一台對流量和內容進行管理分配的裝置。它提供10種靈活的演算法將資料流有效地 到它所連線的伺服器群。而面對使用者,只是一台虛擬伺服器。使用者此時只須記住一台伺服器,即虛擬伺服器。但他們的資料流卻被big ip靈活地均衡到所有的伺服器。這10種演算法包括 輪詢...

負載均衡伺服器採用的八種排程演算法

針對各種性質的網路服務和實際伺服器配置,負載均衡伺服器負載排程器採用了如下八種負載排程演算法 輪叫 round robin 負載均衡伺服器通過 輪叫 排程演算法將外部請求按順序輪流分配到集群中的實際伺服器上,它均等地對待每一台伺服器,而不管伺服器上實際的連線數和系統負載。加權輪叫 weighted ...