負載均衡實現之隨機數

2022-07-05 08:09:12 字數 1692 閱讀 4697

負載均衡(loadbalance),它的職責是將網路請求,或者其他形式的負載「均攤」到不同的機器上。避免集群中部分伺服器壓力過大,而另一些伺服器比較空閒的情況。通過負載均衡,可以讓每台伺服器獲取到適合自己處理能力的請求。

​ 常見的負載均衡的實現方法有多種,如隨機、輪詢、hash一致性等。本文使用隨機法實現負載均衡。

​ 隨機數法就是幾個數中隨機獲取乙個數字,然後獲取這個資料對應的伺服器。

/**

* 伺服器類

*/public class server

public string getservername()

public void setservername(string servername)

@override

public string tostring() ";

}}

public class loadbalance_random 

public static void main(string args)

} /**

* 選擇伺服器

* @param serverlist

* @return

*/private static server doselect(listserverlist)

}

​ 執行main方法測試,結果如下:

​ 在每台伺服器的配置效能等各方面都一樣時,使用這種隨機方法也是可取的,因為每台伺服器獲取的要處理的請求的資料量的概率是一樣的。但是有時候,我們的伺服器不一定都是相同的配置,每一台伺服器的效能都有一定的差異性,導致伺服器提供服務的能力的差異,比如上邊我們有3臺伺服器,server1每秒可處理5個請求,server2每秒只能處理3個請求,server3每秒只能處理2個請求,此時如果我們有10個請求過來了,我們分別給3個server3個請求處理,由於server3只能處理2個請求,這時就會導致服務3不可用。

​ 對這種不同服務能力的服務實現負載均衡,我們可以使用加權隨機法。對每個服務標記權重,提高處理能力強的伺服器的權重,降低服務能力若的伺服器的權重,即根據能力的大小分配對應比例的請求數。

​ 修改上述**,給服務加權重

/**

* 伺服器類

*/public class server

@override

public string tostring() "; }

// 省略getter 和 setter方法

}

​ 初始化時指定伺服器的權重

//初始化   模擬集群中提供服務的伺服器

static

​ 根據權重值獲取服務

private static server doselectwithweight(listserverlist) 

}}

if(!issame)

}

測試結果如下

從測試結果圖中可以看到,權重大的獲取到的請求數多,相反權重小的獲取到的請求數越小。

實現隨機數

func seed seed int64 該函式設定隨機種子,若不呼叫此函式設定隨機種子,則預設的種子值為1,由於隨機演算法是固定的,如果每次都以1作為隨機種子開始產生隨機數,則結果都是一樣的,因此一般都需要呼叫此函式來設定隨機種子,通常的做法是以當前時間作為隨機種子,以保證每次隨機種子都不同,從而...

負載均衡之隨機法

負載均衡 loadbalance 它的職責是將網路請求,或者其他形式的負載 均攤 到不同的機器上。避免集群中部分伺服器壓力過大,而另一些伺服器比較空閒的情況。通過負載均衡,可以讓每台伺服器獲取到適合自己處理能力的請求。常見的負載均衡的實現方法有多種,如隨機 輪詢 hash一致性等。本文使用隨機法實現...

隨機數 偽隨機數

隨機數 偽隨機數 rand函式在產生隨機數前,需要系統提供的生成偽隨機數序列的種子,rand根據這個種子的值產生一系列隨機數。如果系統提供的種子沒有變化,每次呼叫rand函式生成的偽隨機數序列都是一樣的。srand unsigned seed 通過引數seed改變系統提供的種子值,從而可以使得每次呼...