負載均衡算法的幾種常用方案


總結下負載均衡的常用方案及適用場景

輪詢調度

以輪詢的方式依次請求調度不同的服務器;實現時,一般為服務器帶上權重;這樣有兩個好處:

  1. 針對服務器的性能差異可分配不同的負載;
  2. 當需要將某個結點剔除時,只需要將其權重設置為0即可;

優點:實現簡單、高效;易水平擴展;

缺點:請求到目的結點的不確定,造成其無法適用於有寫的場景(緩存,數據庫寫)

應用場景:數據庫或應用服務層中只有讀的場景;

隨機方式

請求隨機分布到各個結點;在數據足夠大的場景能達到一個均衡分布;

優點:實現簡單、易水平擴展;

缺點:同Round Robin,無法用於有寫的場景;

應用場景:數據庫負載均衡,也是只有讀的場景;

哈希:

根據key來計算需要落在的結點上,可以保證一個同一個鍵一定落在相同的服務器上;

優點:相同key一定落在同一個結點上,這樣就可用於有寫有讀的緩存場景;

缺點:在某個結點故障后,會導致哈希鍵重新分布,造成命中率大幅度下降;

解決:一致性哈希 or 使用keepalived保證任何一個結點的高可用性,故障后會有其它結點頂上來;

應用場景:緩存,有讀有寫;

一致性哈希:

在服務器一個結點出現故障時,受影響的只有這個結點上的key,最大程度的保證命中率;

如twemproxy中的ketama方案;

生產實現中還可以規划指定子key哈希,從而保證局部相似特征的鍵能分布在同一個服務器上;

優點:結點故障后命中率下降有限;

應用場景:緩存;

根據鍵的范圍來負載:

根據鍵的范圍來負載,前1億個鍵都存放到第一個服務器,1~2億在第二個結點;

優點:水平擴展容易,存儲不夠用時,加服務器存放后續新增數據;

缺點:負載不均;數據庫的分布不均衡;(數據有冷熱區分,一般最近注冊的用戶更加活躍,這樣造成后續的服務器非常繁忙,而前期的結點空閑很多)

適用場景:數據庫分片負載均衡;

根據鍵對服務器結點數取模來負載:

根據鍵對服務器結點數取模來負載;比如有4台服務器,key取模為0的落在第一個結點,1落在第二個結點上。

優點:數據冷熱分布均衡,數據庫結點負載均衡分布;

缺點:水平擴展較難;

適用場景:數據庫分片負載均衡;

純動態結點負載均衡:

根據CPU、IO、網絡的處理能力來決策接下來的請求如何調度;

優點:充分利用服務器的資源,保證個結點上負載處理均衡;

缺點:實現起來復雜,真實使用較少;

不用主動負載均衡:

使用消息隊列轉為異步模型,將負載均衡的問題消滅

負載均衡是一種推模型,一直向你發數據,那么,將所有的用戶請求發到消息隊列中,所有的下游結點誰空閑,誰上來取數據處理;轉為拉模型之后,消息了負載的問題;

優點:通過消息隊列的緩沖,保護后端系統,請求劇增時不會沖垮后端服務器;

水平擴展容易,加入新結點后,直接取queue即可;

缺點:不具有實時性;

應用場景:不需要實時返回的場景;

比如,12036下訂單后,立刻返回提示信息:您的訂單進去排隊了…等處理完畢后,再異步通知;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM