互聯網架構里的負載均衡器

現實生活中,我們能經常聽到別人說,通過搭建機器集群來抗住大流量和大用戶量。如何組織機器集群和服務集群對大量流量請求進行高效服務是一個有挑戰(zhàn)的問題。負載均衡器就是用來解決針對流量請求分配機器集群和服務集群的利器。

一、什么是負載均衡?

我們從一個實際的工作需求開始講述負載均衡器吧。有一天,領導給你分配一個需求,你興高采烈地去寫代碼,當寫到一半時發(fā)現要依賴另一個模塊,而另一個模塊是部署在兩臺機器上,這時如何把你的請求合理地分配到這兩臺機器上呢?這時可以引入負載均衡器技術來調度請求流量。

負載均衡(Load Balance)的意思是將大量作業(yè)合理地分攤到多個操作單元上進行執(zhí)行。主要用于解決互聯網架構中的高并發(fā)和高可用的問題。

二、有哪些負載均衡技術?

負載均衡器主要分為硬件負載均衡和軟件負載均衡兩大類。

2.1 硬件負載均衡技術

直接在服務器和外部網絡間安裝負載均衡設備,這種設備我們通常稱之為負載均衡器。由于專門的設備完成專門的任務,獨立于操作系統(tǒng),整體性能得到大量提高,加上多樣化的負載均衡策略,智能化的流量管理,可達到最佳的負載均衡需求。 一般而言,硬件負載均衡在功能、性能上優(yōu)于軟件方式,不過成本昂貴,比如最常見的就是F5負載均衡器。

優(yōu)點: 能夠直接通過智能交換機實現,處理能力更強,而且與系統(tǒng)無關,負載性能強

缺點:成本高,除設備價格高昂,而且配置冗余.很難想象后面服務器做一個集群,但最關鍵的負載均衡設備卻是單點配置;無法有效掌握服務器及應用狀態(tài)。只是從網絡層面來判斷負載情況,有時網絡負載正常的情況下,應用層可能已經堵塞了。

2.2 軟件負載均衡技術

在互聯網架構設計中,應用率比較高的是軟件負載均衡技術。軟件負載均衡技術是基于系統(tǒng)與應用的負載均衡技術,能夠更好地根據系統(tǒng)與應用的狀況來分配負載情況。主流的軟件負載均衡器有LVS、Nginx和HAproxy。

優(yōu)點:復雜應用下,軟件負載均衡能夠根據系統(tǒng)與應用情況來分配業(yè)務負載,效率很高。性價比很高,對于一些只需要幾臺服務器就能支撐的業(yè)務,使用軟件負載均衡技術更加合適。

缺點:負載能力受服務器本身性能的影響,性能越好,負載能力越大。

LVS:內核態(tài)轉發(fā)型的高可用工具,是一種基于傳輸層的負載均衡器,主要原理就是對網絡數據報文做些更改,然后進行轉發(fā),支持的狀態(tài)檢測方法也比較完善,有端口檢測,url檢測和自定義腳本檢測。 抗負載能力強,性能高,穩(wěn)定性高,可靠性高,自身有完美的熱備方案(Keepalived+lvs)。

Nginx:工作在網絡層和應用層,主流的反向代理軟件,可以通過代理的功能實現負載均衡的功能,本身功能比較完善,既可以做靜態(tài)站點,緩存又可以做負載均衡器,配置上可以優(yōu)化的地方很多,有端口檢測和url的檢測,但是檢測的方式是被動式的,會對用戶的訪問造成一定的影響。

HAproxy:工作在TCP層和HTTP層,支持虛擬機,支持Session的保持,Cookie的引導,同時支持通過獲取指定的url來檢測后端服務器的狀態(tài)。單純從效率上來看,優(yōu)于Nginx。

三、常用負載均衡算法?

具體的負載均衡算法通常有以下幾種:

輪詢(Round Robin,RR)

所有請求被一次分發(fā)到每臺應用服務器上,即每臺服務器需要處理的請求數目都相同,適合于素有服務器硬件都相同的場景。

加權輪詢(Weighted Round Robin,WRR)

根據應用服務器硬件性能的 情況,在 輪詢的基礎上,按照配置的權重將請求分發(fā)到每個服務器,高性能的服務器能分配更多請求。

隨機(Random)

請求被隨機分配到各個應用服務器,在 許多場合下,這種方案都很簡單實用,因為好的隨機數本身就很均衡。即使應用服務器硬件配置不同,也可以使用加權隨機算法。

最少連接(Least Connections)

記錄每個應用服務器正在處理額連接數(請求數),將新到的請求分發(fā)到最少連接的服務器上,應該說,這是最符合負載均衡定義的算法。同樣,最少連接算法也可以實現加權最少連接。

源地址散列(Source hashing)

根據請求來源的IP地址進行Hash計算,得到應用服務器,這樣來自同一個IP地址的請求總在同一個服務器上處理,該請求的上下文信息可以存儲在這臺服務器上,在一個會話周期內重復使用,從而實現會話黏滯。

四、負載均衡器在互聯網架構中應用

互聯網架構對負載均衡器應用主要采用的是軟件負載均衡技術。下面以經典三層架構模型來說明負載均衡技術的應用和選型。

圖片發(fā)自簡書App

1)用戶請求選擇接入層(Nginx)是通過DNS輪詢來實現的,DNS會通過輪詢算法返回一個Nginx進行負載均衡。

2)用戶請求到達接入層(Nginx)后,Nginx通過權重算法或者隨機算法選擇邏輯層的一個節(jié)點轉發(fā)請求。

3)用戶請求到過邏輯層后,邏輯層通過與存儲層的所有節(jié)點建立連接池,或者保存所有存儲層節(jié)點的地址信息,因為數據的存儲是固定在一個節(jié)點上的,所以要求同一個用戶的請求能夠路由到同一個存儲節(jié)點上去。最簡單的負載均衡實現可以依據用戶賬號進行HASH選擇。

當然,基于HASH選擇會給數據遷移和擴縮容帶來一定的麻煩,這個問題的解決我們以后再詳細討論。

轉自原文鏈接:
https://zhuanlan.zhihu.com/p/27829584
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容