摘要:為解決在某些場景中前端CDN、局域網(wǎng)、客戶端集中NAT出口IP等多人來訪時,出現(xiàn)IP訪問傾斜、丟失和負(fù)載不均衡等問題,通過研究Nginx系統(tǒng)的原理與實(shí)現(xiàn)方法,結(jié)合Web應(yīng)用中的Cookie保持會話機(jī)制,提出了基于Nginx和sticky模塊實(shí)現(xiàn)的cookie負(fù)載均衡方案。實(shí)驗(yàn)結(jié)果表明,基于sticky cookie實(shí)現(xiàn)可有效解決IP傾斜、丟失和負(fù)載不均衡等問題,同時在多人來訪、用戶量高并發(fā)的情況下,能夠維持每個會話持久性、一致性和服務(wù)器壓力均衡性。特別是在應(yīng)用類集群環(huán)境共享狀態(tài)信息下,Sticky cookie會話保持算法仍有助于提高性能。
關(guān)鍵詞:Nginx;負(fù)載均衡; Cookie;Session;Sticky
中圖分類號:TP308;TP333 文獻(xiàn)標(biāo)識碼:A
文章編號:1009-3044(2024)19-0097-04
0 引言
隨著校園網(wǎng)內(nèi)用戶數(shù)量和業(yè)務(wù)量呈指數(shù)級的不斷增長,特別是Web應(yīng)用類,面臨著訪問者數(shù)量快速增加的挑戰(zhàn)。即便使用高性能的硬件配比,當(dāng)遇到請求具有突發(fā)性時,網(wǎng)絡(luò)、CPU、I/O等處理能力會急劇上升達(dá)到一定的瓶頸。單臺服務(wù)器的整體性能總是有限的,一臺服務(wù)器所能提供的并發(fā)訪問處理能力大約為1 000~5 000個。
目前在Web應(yīng)用類環(huán)境中,client與server建立鏈接有幾種狀態(tài):服務(wù)請求無狀態(tài)保持、服務(wù)請求有狀態(tài)保持、保持用戶會話一致性、保持連接一致性。實(shí)際校園Web應(yīng)用環(huán)境中,大多數(shù)是基于有狀態(tài)、保持用戶會話一致性的鏈接,比如:學(xué)生選課、評教、錄取、成績查詢等Web業(yè)務(wù)。為了滿足這種高并發(fā)[1]、突發(fā)性的需求,同時徹底解決在某些場景中出現(xiàn)IP訪問傾斜、丟失、負(fù)載不均衡問題,本文提出了基于Nginx+sticky實(shí)現(xiàn)cookie負(fù)載均衡的建設(shè)方案,選用多臺服務(wù)器(節(jié)點(diǎn))共同處理用戶請求,并采取一系列策略和技術(shù)來應(yīng)對,以提高系統(tǒng)的高流量、可用性、可擴(kuò)展性和容錯性。
1 Nginx 介紹及負(fù)載均衡方式
1.1 Nginx 介紹
Nginx[2]是一款高性能的開源Web服務(wù)器和反向代理服務(wù)器。它在處理靜態(tài)資源、負(fù)載均衡、反向代理、HTTPS等方面表現(xiàn)出色。Nginx的設(shè)計(jì)目標(biāo)是提供高性能、穩(wěn)定性、熱部署、模塊化設(shè)計(jì)、低資源消耗和靈活性,以適應(yīng)于現(xiàn)代網(wǎng)絡(luò)環(huán)境中構(gòu)建大規(guī)模訪問、可伸縮性強(qiáng)的Web應(yīng)用和負(fù)載的需求。綜合來說,其強(qiáng)大的特性和靈活性被廣泛用于互聯(lián)網(wǎng)、企業(yè)、高校等不同的場景中。同時,持續(xù)對Nginx綜合的性能、日志、配置、安全性、負(fù)載均衡等方面進(jìn)行分析,也有助于優(yōu)化系統(tǒng)的運(yùn)行和提高服務(wù)的可用性。
1.2 負(fù)載均衡方式
Nginx為 HTTP、TCP 和 UDP 提供多種負(fù)載均衡方式[3],所有這些方式都能夠選1525d41453faed8488ed5991ec53a2579f52b40cd75dc069466a476d6dd60040擇分配到每個上游服務(wù)器的流量權(quán)重。選擇適當(dāng)?shù)呢?fù)載均衡方式取決于應(yīng)用需求。一些常見的負(fù)載均衡方式包括:
1) Round Robin(輪詢,默認(rèn)使用)——可按順序在上游服務(wù)器之間分發(fā)請求。
2) 最少連接——向活躍連接數(shù)最少的服務(wù)器轉(zhuǎn)發(fā)請求。
3) 最少時間——基于響應(yīng)時間和活躍連接數(shù)進(jìn)行綜合計(jì)算,將請求轉(zhuǎn)發(fā)到負(fù)載最小的服務(wù)器;這是Nginx可提供的獨(dú)特功能。
4) Hash(哈希)——根據(jù)特定的鍵值分發(fā)請求(如客戶端IP地址或請求URL) 。若上游服務(wù)器集群發(fā)生變化,Nginx可以通過應(yīng)用一致的哈希值來盡量減少負(fù)載的重新分配。
5) IP Hash(僅限 HTTP) ——根據(jù)客戶端IP地址的前三個八位字節(jié)進(jìn)行請求分配。
6) Random with Two Choices—— 隨機(jī)選擇兩臺服務(wù)器并將請求轉(zhuǎn)發(fā)到活動連接數(shù)較少的服務(wù)器,即“最少連接”算法。通過使用Nginx還可以通過“最少時間”算法優(yōu)化使用效果。
2 基于Nginx+sticky實(shí)現(xiàn)cookie負(fù)載均衡的建設(shè)
2.1 基于Nginx+sticky 實(shí)現(xiàn)cookie負(fù)載均衡的建設(shè)方案
負(fù)載均衡是在大規(guī)模網(wǎng)絡(luò)和應(yīng)用環(huán)境中,用于多臺服務(wù)器之間分配請求,以確保提高性能、流量、擴(kuò)展以及有效資源利用率的關(guān)鍵工具。在不同場景中,客戶與Web應(yīng)用端建立鏈接時,大多數(shù)是基于服務(wù)請求有狀態(tài)保持、保持用戶會話一致性(用戶登錄狀態(tài))的會話方式[4],例如教務(wù)、學(xué)工、請銷假、實(shí)訓(xùn)等Web業(yè)務(wù)。為了徹底解決在某些場景中出現(xiàn)的IP訪問傾斜、丟失、負(fù)載不均衡、session不能跨服務(wù)器等問題,并根據(jù)應(yīng)用中的實(shí)際情況,本文提出基于Nginx+sticky實(shí)現(xiàn)cookie負(fù)載均衡的建設(shè)方案,可以根據(jù)具體需求選擇合適的負(fù)載均衡機(jī)制,來實(shí)現(xiàn)負(fù)載均衡策略[5]。