2021-02-07 分類: 網(wǎng)站建設(shè)
在互聯(lián)網(wǎng)大行其道的今天,隨著業(yè)務(wù)的迅猛增長,技術(shù)上我們常常要面對高并發(fā),大流量。
接入層,代理層,應(yīng)服務(wù)器示意圖
我們知道了負載均衡分為“硬件負載均衡”和“軟件負載均衡”,那么來逐一看看他們是如何工作的吧。
硬件負載均衡
既然前面提到了負載均衡器的分類,那么我們就來聊聊他們的特點。硬件負載均衡技術(shù)只專注網(wǎng)絡(luò)判斷,不考慮業(yè)務(wù)系統(tǒng)與應(yīng)用使用的情況。
看上去它對處理網(wǎng)絡(luò)請求是非常專業(yè)的,但有趣的是,如果應(yīng)用服務(wù)出現(xiàn)了流量瓶頸,而“接入層”的硬件負載均衡沒有發(fā)現(xiàn)異常,還是讓流量繼續(xù)進入到應(yīng)用服務(wù)器,并沒有阻止,就會造成應(yīng)用服務(wù)器流量過大。
所以,為了保證高可用,可以在“接入層”和“代理層”同時考慮限流的問題。
作為硬件負載均衡器,常在大企業(yè)使用。下面我們以 F5 公司的“F5 BIG-IP”產(chǎn)品為藍本給大家介紹(下面簡稱 F5)。
實際上它是一個集成的解決方案,對于研發(fā)的同學來說,主要理解其原理。
硬件負載均衡器三大功能
上面談到硬件負載均衡器的作用和特點,它具備哪三大功能?實現(xiàn)原理又是怎樣的?
①多鏈路負載均衡
關(guān)鍵業(yè)務(wù)都需要安排和配置多條 ISP(網(wǎng)絡(luò)服務(wù)供應(yīng)商)接入鏈路來保證網(wǎng)絡(luò)服務(wù)的可靠性。
如果某個 ISP 停止服務(wù)或者服務(wù)異常了,那么可以利用另一個 ISP 替代服務(wù),提高了網(wǎng)絡(luò)的可用性。
不同的 ISP 有不同自治域,因此需要考慮兩種情況:
INBOUND,來自網(wǎng)絡(luò)的請求信息。F5 分別綁定兩個 ISP 服務(wù)商的公網(wǎng)地址,解析來自兩個 ISP 服務(wù)商的 DNS 解析請求。
F5 可以根據(jù)服務(wù)器狀況和響應(yīng)情況對 DNS 進行發(fā)送,也可以通過多條鏈路分別建立 DNS 連接。
OUTBOUND,返回給請求者的應(yīng)答信息。F5 可以將流量分配到不同的網(wǎng)絡(luò)接口,并做源地址的 NAT(網(wǎng)絡(luò)地址轉(zhuǎn)換),即通過 IP 地址轉(zhuǎn)換為源請求地址。
也可以用接口地址自動映射,保證數(shù)據(jù)包返回時能夠被源頭正確接收。
多路負載的方式增強了網(wǎng)絡(luò)接入層的可靠性
②防火墻負載均衡
針對大量網(wǎng)絡(luò)請求的情況,單一防火墻的能力就有限了,而且防火墻本身要求數(shù)據(jù)同進同出,為了解決多防火墻負載均衡的問題,F(xiàn)5 提出了防火墻負載均衡的“防火墻三明治"方案。
防火墻會對用戶會話的雙向數(shù)據(jù)流進行監(jiān)控,從而確定數(shù)據(jù)的合法性。如果采取多臺防火墻進行負載均衡,有可能會造成同一個用戶會話的雙向數(shù)據(jù)在多臺防火墻上都進行處理。
而單個防火墻上看不到完成用戶會話的信息,就會認為數(shù)據(jù)非法因此拋棄數(shù)據(jù)。
所以在每個防火墻的兩端要架設(shè)四層交換機,可以在作流量分發(fā)的同時,維持用戶會話的完整性,使同一用戶的會話由一個防火墻來處理。而這種場景就需要 F5 負載均衡器協(xié)助才能完成轉(zhuǎn)發(fā)。
有趣的是,F(xiàn)5 協(xié)調(diào)上述方案的配置和實現(xiàn)后,會把“交換機”,“防火墻”,“交換機”夾在了一起好像三明治一樣。
防火墻“三明治”
③服務(wù)器負載均衡
在硬件負載均衡器掛接多個應(yīng)用服務(wù)器時,需要為這些服務(wù)做負載均衡,根據(jù)規(guī)則,讓請求發(fā)送到服務(wù)器上去:
優(yōu)缺點總結(jié)
聊完了硬件負載均衡器的特點和功能以后,讓我們來總結(jié)一下它的優(yōu)缺點:
軟件負載均衡
說完硬件負載均衡,再來談?wù)勡浖撦d均衡。軟件負載均衡是指在一臺或多臺服務(wù)器的操作系統(tǒng)上安裝一個或多個軟件來實現(xiàn)負載均衡。
它的優(yōu)點是基于特定環(huán)境,配置簡單,使用靈活,成本低廉,可以滿足一般的負載均衡需求。
代理層通常起到承上啟下的作用,上連“接入層”,下接應(yīng)用服務(wù)器(上游服務(wù)器),可以做反向代理,緩存,數(shù)據(jù)驗證,限流。本文會一一為各位介紹。
目前市面上比較流行的軟件負載均衡有 LVS,HAProxy,Ngnix。由于篇幅有限我們通過應(yīng)用廣泛的 Nginx 為切入點,給大家講解,之后會把上面三類軟件進行一個對比。
功能描述和原理分析
對于程序員來說,接觸最多的就是軟件負載均衡。不僅要知道如何使用,同時也要了解背后的原理,下面列舉了其最常用到的 4 大功能。
①反向代理與負載均衡
第一個功能是反向代理與負載均衡,如下圖:
客戶端是如何把請求發(fā)送到應(yīng)用服務(wù)器的
客戶端把請求發(fā)送到應(yīng)用服務(wù)器有如下幾個步驟:
負載均衡的算法/策略
實際上負載均衡的算法是很多的,這里以 Nginx 為例,介紹五種算法:
所以對每個請求都設(shè)置 Hash Key,這樣就算服務(wù)器發(fā)生了變化,Key 的值沒有變,也可以找到對應(yīng)的服務(wù)器。
②動態(tài)負載均衡
一般上游服務(wù)器都采用微服務(wù)的架構(gòu),那么負載均衡會把數(shù)據(jù)報發(fā)給哪個服務(wù)呢?如果服務(wù)出現(xiàn)了問題如何通知負載均衡器呢?有新的服務(wù)注冊怎么辦呢?
動態(tài)負載均衡流程
微服務(wù)首先會注冊到“服務(wù)注冊發(fā)現(xiàn)”中心(Consul,Eureka)。注冊中心包含微服務(wù)的信息,Nginx 會定期從這里拉取服務(wù)信息(Lua)。
獲取微服務(wù)信息以后,Nginx 收到數(shù)據(jù)報的時候,就可以從注冊中心獲取的服務(wù)地址,把信息傳遞給服務(wù)了。
③限流
限流的工作可以在接入層用硬件負載均衡器來完成,也可以在代理層來完成。
限流實際上就是限制流入請求的數(shù)量,其算法不少,有令牌桶算法,漏桶算法,連接數(shù)限制等等。這里我們就介紹三個常用的。一般通過 Nignx+Lua 來實現(xiàn)。
連接數(shù)限流:通過 ngx_http_limit_conn_module 模塊實現(xiàn)。設(shè)置大的連接數(shù)以及共享內(nèi)存的區(qū)域大小,請求的時候判斷是否超過了大連接數(shù)。
如果超過大連接數(shù)就被限流,否則針對連接數(shù)就 +1,請求結(jié)束以后會將連接數(shù) -1。
漏桶算法:通過 ngx_http_limit_req_module 模塊實現(xiàn)。一個固定容量的桶,數(shù)據(jù)報按照固定的速度流出。
數(shù)據(jù)報可以按照任意的速度流入桶中,如果數(shù)據(jù)報的容量超過了桶的容量,再流入的數(shù)據(jù)報將會被丟棄。
按照這個規(guī)則,需要設(shè)置限流的區(qū)域以及桶的容量,以及是否延遲。
漏桶策略
令牌桶算法,桶的大小是固定的,以固定的速度往桶里丟令牌。桶滿了后,后面添加的令牌無法添加。
數(shù)據(jù)報到來時從桶中取令牌,如果桶中有令牌,憑借令牌處理請求,處理完畢令牌銷毀;數(shù)據(jù)報到來時發(fā)現(xiàn)桶中沒令牌,該請求將被拒絕。
請求在發(fā)往令牌桶之前需要經(jīng)過過濾/分類器,可以對報文進行分類,例如:某類報文可以直接發(fā)往應(yīng)用服務(wù)器,某類報文需要經(jīng)過令牌桶獲取令牌以后才能發(fā)。
又例如:VIP 就可以直接把請求發(fā)往服務(wù)器,用不著經(jīng)過令牌桶。
令牌桶示意圖
④緩存
Nginx 本地緩存機制
接入層發(fā)送請求,如果能夠在 Nginx 本地緩存命中,直接返回緩存數(shù)據(jù),如果沒有命中回源到應(yīng)用服務(wù)器。
緩存更新服務(wù)器定時更新 Nginx 本地緩存信息。這些需要考慮數(shù)據(jù)的一致性,何時更新以及何時失效等情況。
Nginx 緩存可以大大提高請求響應(yīng)時間,可以把不經(jīng)常更改的信息,例如:用戶信息,提前放入緩存中,每次請求就不用再去請求應(yīng)用服務(wù)器了。一旦用戶信息更新,可以按照一定時鐘頻率寫入緩存中。
另外,一般 HTTPHEAD 中都帶有一些信息更新的信息。Nginx 也可以通過 expires,etag,if-modified-since 來實現(xiàn)瀏覽器緩存的控制。
其他的幾個功能如下:
流行的軟件負載均衡器
目前比較流行的有 LVS,Nginx 和 HAProxy,逐個看看他們的特點。
LVS
LVS(Linux Virtual Server) 是使用 Linux 內(nèi)核集群實現(xiàn)的一個高性能、高可用的負載均衡服務(wù)器,它具有很好的可伸縮性(Scalability)、可靠性(Reliability)和可管理性(Manageability)。
LVS 特點是:
HAProxy
HAProxy 實現(xiàn)了一種事件驅(qū)動,單一進程模型,此模型支持非常大的并發(fā)連接數(shù)。
多進程或多線程模型受內(nèi)存限制 、系統(tǒng)調(diào)度器限制以及無處不在的鎖限制,很少能處理數(shù)千并發(fā)連接。
HAProxy 特點是:
Nginx
Nginx 是一款輕量級的 Web 服務(wù)器/反向代理服務(wù)器及電子郵件(IMAP/POP3)代理服務(wù)器,并在一個 BSD-like 協(xié)議下發(fā)行。
Nginx 特點是:
網(wǎng)絡(luò)負載均衡的技術(shù)選型
既然上面對軟/硬件負載均衡有了總體的了解,那么按照“技術(shù)服務(wù)業(yè)務(wù)”的原則,在業(yè)務(wù)發(fā)展的不同階段,如何使用這兩類負載均衡技術(shù)呢?
發(fā)展階段
企業(yè)業(yè)務(wù)從 0 到 1,從無到有,數(shù)據(jù)量和訪問量都不大。Nginx 或 HAProxy 進行單點的負載均衡就已經(jīng)足夠了。
這階段剛剛采用多臺應(yīng)用服務(wù)器、數(shù)據(jù)庫,需要一定的負載均衡做支撐。由于業(yè)務(wù)量不大,所以沒有專業(yè)的維護團隊來維護,也沒有大規(guī)模的網(wǎng)站部署的需求。
因此 Nginx 或 HAproxy 是第一選擇,因為其上手快, 配置容易,在七層之上利用 HTTP 協(xié)議就能滿足要求了。
擴張階段
隨著業(yè)務(wù)量增大,用戶訪問和交易量也在逐步增加,這時單點的 Nginx 或 HAProxy 已經(jīng)無法滿足之前的需求了。
使用 LVS 或者硬件負載均衡(F5/Array)就是架構(gòu)師需要考慮的問題了,Nginx 此時就作為 LVS 或者硬件負載均衡(F5/Array)的節(jié)點來處理。
軟件負載均衡+硬件負載均衡的架構(gòu)配置在這個階段就需要考慮了,也是對架構(gòu)設(shè)計者的挑戰(zhàn)。
成熟階段
隨著公司業(yè)務(wù)擴張到達頂峰,之前的網(wǎng)絡(luò)服務(wù)已經(jīng)升級成主流服務(wù)產(chǎn)品,需要考慮在開源產(chǎn)品上進行業(yè)務(wù)定制,所以開源的 LVS,已經(jīng)成為選。其在深度定制之后依舊會和硬件負載均衡器配合完成業(yè)務(wù)服務(wù)。
總結(jié)
今天內(nèi)容比較多,總結(jié)下來,三句話:
網(wǎng)站題目:想實現(xiàn)高可用?先搞定負載均衡原理
URL標題:http://jinyejixie.com/news20/99570.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站建設(shè)、網(wǎng)站排名、搜索引擎優(yōu)化、商城網(wǎng)站、用戶體驗、定制開發(fā)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容