常用负载均衡策略分析
背景
一般生產(chǎn)環(huán)境單機所能承受的QPS壓力為2w左右,過大的壓力會導致服務器爆炸。即便是單機能夠撐住2w QPS,一般也不會這么做,生產(chǎn)環(huán)境一般會預留50%的冗余能力,防止QPS因為某個熱門的活動而爆炸。當QPS超過單機所能承受的壓力時,自然而然會想到引入分布式集群。那么,某一個請求會被哪臺服務器處理呢,這是隨機的,還是說按照一定的規(guī)則處理的?這就是負載均衡算法所要干的事。
負載均衡器
負載均衡器就是實現(xiàn)一種或者多種負載均衡算法的軟件或者硬件設備。負載均衡器根據(jù)協(xié)議層的不同,通常又分為兩種,第一種在四層傳輸層實現(xiàn),第二種就是在七層應用層實現(xiàn)。
很多專用的硬件負載均衡器都支持在TCP層實現(xiàn)負載均衡,效率高。當然TCP層實現(xiàn)負載均衡有它的缺點,如無法保存長連接等。所以一般類似于BAT這種大公司,都是多層負載均衡配合的。
一般純軟件實現(xiàn)的通常在應用層來實現(xiàn),這也是應用比較多的一種實現(xiàn)方式。目前比較流行的實現(xiàn)有Nginx、HAProxy、Keepalived等。當然Linux內核自帶的LVS(Linux Virtual Server)就是四層的實現(xiàn)。
輪詢(Round Robin)
輪詢是一種很簡單的實現(xiàn),依次將請求分配給后端服務器。
- 優(yōu)點:實現(xiàn)簡單,請求均勻分配。
- 缺點:請求均勻分配,因為后端服務器通常性能會有差異,所以希望性能好的服務器能夠多承擔一部分。也不適合對長連接和命中率有要求的場景。
加權輪詢(Weighted Round Robin)
加權本質是一種帶優(yōu)先級的方式,加權輪詢就是一種改進的輪詢算法,輪詢算法是權值相同的加權輪詢。需要給后端每個服務器設置不同的權值,決定分配的請求數(shù)比例。這個算法應用就相當廣泛了,對于無狀態(tài)的負載場景,非常適合。
- 優(yōu)點:解決了服務器性能不一的情況
- 缺點:權值需要靜態(tài)配置,無法自動調節(jié)。也不適合對長連接和命中率有要求的場景。
隨機Random
隨機把請求分配給后端服務器。請求分配的均勻程度依賴于隨機算法了,因為實現(xiàn)簡單,常常用于配合處理一些極端的情況,如出現(xiàn)熱點請求,這個時候就可以random到任意一臺后端,以分散熱點。當然缺點也不言而喻。
哈希Hash
哈希算法想必大家并不陌生,應用最為廣泛。根據(jù)Source IP、 Destination IP、URL、或者其它,算hash值或者md5,再采用取模。比如有N臺服務器: S1、S2、S3……Sn
hash值 % N
顯然,相同的請求會被映射到相同的后端。這非常適合維護長連接和提高命中率。
但是它天生也有一些缺點。比如說,現(xiàn)在某個請求通過哈希被映射到S3上去了,如果S3宕機了,就不得不二次Hash,重新計算路由時會剔除宕機的后端。
這樣會導致幾乎所有請求路由產(chǎn)生變化。由此導致命中率的急劇下降。當然一般生產(chǎn)環(huán)境通過提供S3的備機來解決這種問題,但是主備之間切換也是需要時間,它們之間的數(shù)據(jù)同步也是有延時的。所以需要根據(jù)業(yè)務場景來權衡了。
擴容也會有類似的問題,計算路由公式變?yōu)?#xff1a;
為了解決這種問題,一般生產(chǎn)環(huán)境可能采用成倍擴容的方式。N -> 2N,這樣求路由可以做到與原來保持一致。當然必不可少的造成機器資源的浪費。請各位看官自行權衡。
對于熱點請求,這種Hash算法也可能成在雪崩效應,取決于采用何種Hash,基于URL還是基于IP等。總之,不能把熱點請求路由到單機上,否則單機撐不住,會逐個逐個被打爆,也就是雪崩效應。
最小連接數(shù)LC
最小連接數(shù)(Least Connection),把請求分配給活動連接數(shù)最小的后端服務器。它通過活動來估計服務器的負載。比較智能,但需要維護后端服務器的連接列表。
加權最小連接數(shù)WLC
加權最小連接數(shù)(Weighted Least Connection),在后端服務器性能差異較大的情況下,可以優(yōu)化LC的性能,高權值的服務可以承受更多的連接負載。
最短響應時間LRT
最短響應時間(Least Response Time),把請求分配給平均響應時間最短的后端服務器。平均響應時間可以通過ping探測請求或者正常請求響應時間獲取。
RT(Response Time)是衡量服務器負載的一個非常重要的指標。對于響應很慢的服務器,說明其負載一般很高了,應該降低它的QPS。
之前有人說使用CPU占用率作為負載均衡的指標,只能說沒理解CPU占用率的實質。理論上CPU占用率是越高越好,說明服務充分利用了CPU資源。但對于設計不合理的程序導致的CPU占用過高這是程序的設計問題,并不違背這條理論。
?
常用「負載均衡」策略優(yōu)缺點和適用場景
?
參考文獻
- 深入一致性哈希(Consistent Hashing)算法原理,并附100行代碼實現(xiàn)
?
轉載于:https://www.cnblogs.com/kaleidoscope/p/9754489.html
總結
以上是生活随笔為你收集整理的常用负载均衡策略分析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 02.生成、打包、部署和管理应用程序及类
- 下一篇: WampServer修改端口及菜单Loc