常用負載均衡策略分析


背景

一般生產環境單機所能承受的QPS壓力為2w左右,過大的壓力會導致服務器爆炸。即便是單機能夠撐住2w QPS,一般也不會這么做,生產環境一般會預留50%的冗余能力,防止QPS因為某個熱門的活動而爆炸。當QPS超過單機所能承受的壓力時,自然而然會想到引入分布式集群。那么,某一個請求會被哪台服務器處理呢,這是隨機的,還是說按照一定的規則處理的?這就是負載均衡算法所要干的事。

負載均衡器

負載均衡器就是實現一種或者多種負載均衡算法的軟件或者硬件設備。負載均衡器根據協議層的不同,通常又分為兩種,第一種在四層傳輸層實現,第二種就是在七層應用層實現。


很多專用的硬件負載均衡器都支持在TCP層實現負載均衡,效率高。當然TCP層實現負載均衡有它的缺點,如無法保存長連接等。所以一般類似於BAT這種大公司,都是多層負載均衡配合的。


一般純軟件實現的通常在應用層來實現,這也是應用比較多的一種實現方式。目前比較流行的實現有Nginx、HAProxy、Keepalived等。當然Linux內核自帶的LVS(Linux Virtual Server)就是四層的實現。

輪詢(Round Robin)

輪詢是一種很簡單的實現,依次將請求分配給后端服務器。

  • 優點:實現簡單,請求均勻分配。
  • 缺點:請求均勻分配,因為后端服務器通常性能會有差異,所以希望性能好的服務器能夠多承擔一部分。也不適合對長連接和命中率有要求的場景。

加權輪詢(Weighted Round Robin)

加權本質是一種帶優先級的方式,加權輪詢就是一種改進的輪詢算法,輪詢算法是權值相同的加權輪詢。需要給后端每個服務器設置不同的權值,決定分配的請求數比例。這個算法應用就相當廣泛了,對於無狀態的負載場景,非常適合。

  • 優點:解決了服務器性能不一的情況
  • 缺點:權值需要靜態配置,無法自動調節。也不適合對長連接和命中率有要求的場景。

隨機Random

隨機把請求分配給后端服務器。請求分配的均勻程度依賴於隨機算法了,因為實現簡單,常常用於配合處理一些極端的情況,如出現熱點請求,這個時候就可以random到任意一台后端,以分散熱點。當然缺點也不言而喻。

哈希Hash

哈希算法想必大家並不陌生,應用最為廣泛。根據Source IP、 Destination IP、URL、或者其它,算hash值或者md5,再采用取模。比如有N台服務器: S1、S2、S3……Sn

hash值 % N 

哈希
顯然,相同的請求會被映射到相同的后端。這非常適合維護長連接和提高命中率。
但是它天生也有一些缺點。比如說,現在某個請求通過哈希被映射到S3上去了,如果S3宕機了,就不得不二次Hash,重新計算路由時會剔除宕機的后端。

hash值 % (N - 1)

這樣會導致幾乎所有請求路由產生變化。由此導致命中率的急劇下降。當然一般生產環境通過提供S3的備機來解決這種問題,但是主備之間切換也是需要時間,它們之間的數據同步也是有延時的。所以需要根據業務場景來權衡了。
擴容也會有類似的問題,計算路由公式變為:

hash值 % (N + 1) 

為了解決這種問題,一般生產環境可能采用成倍擴容的方式。N -> 2N,這樣求路由可以做到與原來保持一致。當然必不可少的造成機器資源的浪費。請各位看官自行權衡。
對於熱點請求,這種Hash算法也可能成在雪崩效應,取決於采用何種Hash,基於URL還是基於IP等。總之,不能把熱點請求路由到單機上,否則單機撐不住,會逐個逐個被打爆,也就是雪崩效應。

最小連接數LC

最小連接數(Least Connection),把請求分配給活動連接數最小的后端服務器。它通過活動來估計服務器的負載。比較智能,但需要維護后端服務器的連接列表。

加權最小連接數WLC

加權最小連接數(Weighted Least Connection),在后端服務器性能差異較大的情況下,可以優化LC的性能,高權值的服務可以承受更多的連接負載。

最短響應時間LRT

最短響應時間(Least Response Time),把請求分配給平均響應時間最短的后端服務器。平均響應時間可以通過ping探測請求或者正常請求響應時間獲取。
RT(Response Time)是衡量服務器負載的一個非常重要的指標。對於響應很慢的服務器,說明其負載一般很高了,應該降低它的QPS。

之前有人說使用CPU占用率作為負載均衡的指標,只能說沒理解CPU占用率的實質。理論上CPU占用率是越高越好,說明服務充分利用了CPU資源。但對於設計不合理的程序導致的CPU占用過高這是程序的設計問題,並不違背這條理論。

 

常用「負載均衡」策略優缺點和適用場景

 

參考文獻

 


免責聲明!

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



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