負載均衡算法知識總結

負載均衡之隨機算法(Random)

第1個情況:

假定有10個性能相同的服務器,隨機生成隨機數(1-10),來選擇去使用哪一個服務器。

第2個情況:

假定有10個服務器,每個服務器都有權重(表示服務器的性能),10個服務器的總權重之和假設爲100。

將這10個服務器根據權重放在x座標軸上,權重越大,服務器在座標軸上的範圍越大,剛好組成了x1-x100,比如第五個服務器的範圍是x36-x77。

生成1-100的隨機數,如果隨機數是55,就使用第五個服務器。

ps:還可以對這種算法優化---->如果這10個服務器權重一樣,就執行第1種情況,如果不一樣,就執行第2種情況。

負載均衡之輪詢算法(RoundRobin)

1)服務器輪着被使用,第一個請求交給第一個服務器,下一個請求交給第二個服務器。。。。以此類推

2)針對上一個算法優化。根據服務器的性能給服務器加上權重,類似於隨機算法的第2種情況,比如第一個服務器的範圍是x1-x3,第二個服務器的範圍是x4-x10。此時,前三個請求都會交給第一個服務器,第四個請求才會交給第二個服務器。。。以此類推。

3)針對2)的算法,有一個問題。比如有三個服務器A(w=5)B(w=1)C(w=1),假設有7個請求,根據上一個算法,服務器的使用順序是AAAAABC。如果能讓服務器的使用順序改成AABACAA,從結果上來看後一個順序肯定比前一個順序效果要好。這就是針對2)算法做的優化----->

平滑加權輪詢算法

假設有三個服務器A(w=5)B(w=1)C(w=1),服務器的屬性有三個(ip,weight,currentweight)。相較於3)的輪詢算法,多了一個動態權重的屬性。

上圖是平滑加權輪詢算法的過程。

1、計算出動態權重(動態權重+靜態權重)。

2、在動態權重中找到權重最大的ip,即選中該服務器處理請求。

3、更新動態權重(動態權重中最大的權重-總權重),如果動態權重爲(0,0,0),就結束,否則重複1,2,3的操作。

一致性哈希負載均衡算法

問題:假設有三個服務器ABC,現在有一個用戶發送一個登錄請求給了A服務器,A服務器記錄了這個用戶的session,如果按照輪詢算法,下一個請求給B服務器,但B服務器沒有用戶的session,就會要求用戶再次登錄。所有我們需要讓一個用戶的所有請求都交給一個服務器。一致性哈希負載均衡算法就是解決這個問題的。

讓每個用戶的ip計算出唯一的hashcode,而這個hashcode對應唯一的服務器。在每次代理服務器接到請求的時候,根據用戶ip計算出hashcode,如果當前的hashcode已經分配了服務器,就把請求給那個服務器;如果沒有,就給它分配一個服務器。

                                   

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章