負載均衡(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改變系統提供的種子值,從而可以使得每次呼...