新聞中心
一、負(fù)載均衡
集群中的應(yīng)用服務(wù)器(節(jié)點)通常被設(shè)計成無狀態(tài),用戶可以請求任何一個節(jié)點。

10年積累的做網(wǎng)站、成都網(wǎng)站制作經(jīng)驗,可以快速應(yīng)對客戶對網(wǎng)站的新想法和需求。提供各種問題對應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識你,你也不認(rèn)識我。但先網(wǎng)站設(shè)計制作后付款的網(wǎng)站建設(shè)流程,更有鼓樓免費網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。
負(fù)載均衡器會根據(jù)集群中每個節(jié)點的負(fù)載情況,將用戶請求轉(zhuǎn)發(fā)到合適的節(jié)點上。
負(fù)載均衡器可以用來實現(xiàn)高可用以及伸縮性:
- 高可用:當(dāng)某個節(jié)點故障時,負(fù)載均衡器會將用戶請求轉(zhuǎn)發(fā)到另外的節(jié)點上,從而保證所有服務(wù)持續(xù)可用;
- 伸縮性:根據(jù)系統(tǒng)整體負(fù)載情況,可以很容易地添加或移除節(jié)點。
負(fù)載均衡器運(yùn)行過程包含兩個部分:
- 根據(jù)負(fù)載均衡算法得到轉(zhuǎn)發(fā)的節(jié)點;
- 進(jìn)行轉(zhuǎn)發(fā)。
負(fù)載均衡算法
1. 輪詢(Round Robin)
輪詢算法把每個請求輪流發(fā)送到每個服務(wù)器上。
下圖中,一共有 6 個客戶端產(chǎn)生了 6 個請求,這 6 個請求按 (1, 2, 3, 4, 5, 6) 的順序發(fā)送。(1, 3, 5) 的請求會被發(fā)送到服務(wù)器 1,(2, 4, 6) 的請求會被發(fā)送到服務(wù)器 2。
該算法比較適合每個服務(wù)器的性能差不多的場景,如果有性能存在差異的情況下,那么性能較差的服務(wù)器可能無法承擔(dān)過大的負(fù)載(下圖的 Server 2)。
2. 加權(quán)輪詢(Weighted Round Robbin)
加權(quán)輪詢是在輪詢的基礎(chǔ)上,根據(jù)服務(wù)器的性能差異,為服務(wù)器賦予一定的權(quán)值,性能高的服務(wù)器分配更高的權(quán)值。
例如下圖中,服務(wù)器 1 被賦予的權(quán)值為 5,服務(wù)器 2 被賦予的權(quán)值為 1,那么 (1, 2, 3, 4, 5) 請求會被發(fā)送到服務(wù)器 1,(6) 請求會被發(fā)送到服務(wù)器 2。
3. 最少連接(least Connections)
由于每個請求的連接時間不一樣,使用輪詢或者加權(quán)輪詢算法的話,可能會讓一臺服務(wù)器當(dāng)前連接數(shù)過大,而另一臺服務(wù)器的連接過小,造成負(fù)載不均衡。
例如下圖中,(1, 3, 5) 請求會被發(fā)送到服務(wù)器 1,但是 (1, 3) 很快就斷開連接,此時只有 (5) 請求連接服務(wù)器 1;(2, 4, 6) 請求被發(fā)送到服務(wù)器 2,只有 (2) 的連接斷開,此時 (6, 4) 請求連接服務(wù)器 2。該系統(tǒng)繼續(xù)運(yùn)行時,服務(wù)器 2 會承擔(dān)過大的負(fù)載。
最少連接算法就是將請求發(fā)送給當(dāng)前最少連接數(shù)的服務(wù)器上。
例如下圖中,服務(wù)器 1 當(dāng)前連接數(shù)最小,那么新到來的請求 6 就會被發(fā)送到服務(wù)器 1 上。
4. 加權(quán)最少連接(Weighted Least Connection)
在最少連接的基礎(chǔ)上,根據(jù)服務(wù)器的性能為每臺服務(wù)器分配權(quán)重,再根據(jù)權(quán)重計算出每臺服務(wù)器能處理的連接數(shù)。
5. 隨機(jī)算法(Random)
把請求隨機(jī)發(fā)送到服務(wù)器上。
和輪詢算法類似,該算法比較適合服務(wù)器性能差不多的場景。
6. 源地址哈希法 (IP Hash)
源地址哈希通過對客戶端 IP 計算哈希值之后,再對服務(wù)器數(shù)量取模得到目標(biāo)服務(wù)器的序號。
可以保證同一 IP 的客戶端的請求會轉(zhuǎn)發(fā)到同一臺服務(wù)器上,用來實現(xiàn)會話粘滯(Sticky Session)
轉(zhuǎn)發(fā)實現(xiàn)
1. HTTP 重定向
HTTP 重定向負(fù)載均衡服務(wù)器使用某種負(fù)載均衡算法計算得到服務(wù)器的 IP 地址之后,將該地址寫入 HTTP 重定向報文中,狀態(tài)碼為 302??蛻舳耸盏街囟ㄏ驁笪闹?,需要重新向服務(wù)器發(fā)起請求。
缺點:
- 需要兩次請求,因此訪問延遲比較高;
- HTTP 負(fù)載均衡器處理能力有限,會限制集群的規(guī)模。
該負(fù)載均衡轉(zhuǎn)發(fā)的缺點比較明顯,實際場景中很少使用它。
2. DNS 域名解析
在 DNS 解析域名的同時使用負(fù)載均衡算法計算服務(wù)器 IP 地址。
優(yōu)點:
- DNS 能夠根據(jù)地理位置進(jìn)行域名解析,返回離用戶最近的服務(wù)器 IP 地址。
缺點:
- 由于 DNS 具有多級結(jié)構(gòu),每一級的域名記錄都可能被緩存,當(dāng)下線一臺服務(wù)器需要修改 DNS 記錄時,需要過很長一段時間才能生效。
大型網(wǎng)站基本使用了 DNS 做為第一級負(fù)載均衡手段,然后在內(nèi)部使用其它方式做第二級負(fù)載均衡。也就是說,域名解析的結(jié)果為內(nèi)部的負(fù)載均衡服務(wù)器 IP 地址。
3. 反向代理服務(wù)器
反向代理服務(wù)器位于源服務(wù)器前面,用戶的請求需要先經(jīng)過反向代理服務(wù)器才能到達(dá)源服務(wù)器。反向代理可以用來進(jìn)行緩存、日志記錄等,同時也可以用來做為負(fù)載均衡服務(wù)器。
在這種負(fù)載均衡轉(zhuǎn)發(fā)方式下,客戶端不直接請求源服務(wù)器,因此源服務(wù)器不需要外部 IP 地址,而反向代理需要配置內(nèi)部和外部兩套 IP 地址。
優(yōu)點:
- 與其它功能集成在一起,部署簡單。
缺點:
- 所有請求和響應(yīng)都需要經(jīng)過反向代理服務(wù)器,它可能會成為性能瓶頸。
4. 網(wǎng)絡(luò)層
在操作系統(tǒng)內(nèi)核進(jìn)程獲取網(wǎng)絡(luò)數(shù)據(jù)包,根據(jù)負(fù)載均衡算法計算源服務(wù)器的 IP 地址,并修改請求數(shù)據(jù)包的目的 IP 地址,最后進(jìn)行轉(zhuǎn)發(fā)。
源服務(wù)器返回的響應(yīng)也需要經(jīng)過負(fù)載均衡服務(wù)器,通常是讓負(fù)載均衡服務(wù)器同時作為集群的網(wǎng)關(guān)服務(wù)器來實現(xiàn)。
優(yōu)點:
- 在內(nèi)核進(jìn)程中進(jìn)行處理,性能比較高。
缺點:
- 和反向代理一樣,所有的請求和響應(yīng)都經(jīng)過負(fù)載均衡服務(wù)器,會成為性能瓶頸。
5. 鏈路層
在鏈路層根據(jù)負(fù)載均衡算法計算源服務(wù)器的 MAC 地址,并修改請求數(shù)據(jù)包的目的 MAC 地址,并進(jìn)行轉(zhuǎn)發(fā)。
通過配置源服務(wù)器的虛擬 IP 地址和負(fù)載均衡服務(wù)器的 IP 地址一致,從而不需要修改 IP 地址就可以進(jìn)行轉(zhuǎn)發(fā)。也正因為 IP 地址一樣,所以源服務(wù)器的響應(yīng)不需要轉(zhuǎn)發(fā)回負(fù)載均衡服務(wù)器,可以直接轉(zhuǎn)發(fā)給客戶端,避免了負(fù)載均衡服務(wù)器的成為瓶頸。
這是一種三角傳輸模式,被稱為直接路由。對于提供下載和視頻服務(wù)的網(wǎng)站來說,直接路由避免了大量的網(wǎng)絡(luò)傳輸數(shù)據(jù)經(jīng)過負(fù)載均衡服務(wù)器。
這是目前大型網(wǎng)站使用最廣負(fù)載均衡轉(zhuǎn)發(fā)方式,在 Linux 平臺可以使用的負(fù)載均衡服務(wù)器為 LVS(Linux Virtual Server)。
參考:
- Comparing Load Balancing Algorithms
- Redirection and Load Balancing
二、集群下的 Session 管理
一個用戶的 Session 信息如果存儲在一個服務(wù)器上,那么當(dāng)負(fù)載均衡器把用戶的下一個請求轉(zhuǎn)發(fā)到另一個服務(wù)器,由于服務(wù)器沒有用戶的 Session 信息,那么該用戶就需要重新進(jìn)行登錄等操作。
Sticky Session
需要配置負(fù)載均衡器,使得一個用戶的所有請求都路由到同一個服務(wù)器,這樣就可以把用戶的 Session 存放在該服務(wù)器中。
缺點:
- 當(dāng)服務(wù)器宕機(jī)時,將丟失該服務(wù)器上的所有 Session。
Session Replication
在服務(wù)器之間進(jìn)行 Session 同步操作,每個服務(wù)器都有所有用戶的 Session 信息,因此用戶可以向任何一個服務(wù)器進(jìn)行請求。
缺點:
- 占用過多內(nèi)存;
- 同步過程占用網(wǎng)絡(luò)帶寬以及服務(wù)器處理器時間。
Session Server
使用一個單獨的服務(wù)器存儲 Session 數(shù)據(jù),可以使用傳統(tǒng)的 MySQL,也使用 Redis 或者 Memcached 這種內(nèi)存型數(shù)據(jù)庫。
優(yōu)點:
- 為了使得大型網(wǎng)站具有伸縮性,集群中的應(yīng)用服務(wù)器通常需要保持無狀態(tài),那么應(yīng)用服務(wù)器不能存儲用戶的會話信息。Session Server 將用戶的會話信息單獨進(jìn)行存儲,從而保證了應(yīng)用服務(wù)器的無狀態(tài)。
缺點:
- 需要去實現(xiàn)存取 Session 的代碼。
分享名稱:千萬級流量架構(gòu)下的負(fù)載均衡解析
本文網(wǎng)址:http://www.dlmjj.cn/article/djispoh.html


咨詢
建站咨詢
