李 剛
(朝陽師范高等??茖W校信息技術中心,遼寧 朝陽122000)
教務系統(tǒng)是高校智慧校園板塊中的重要組成部分,選課、查詢等模塊是其中最為重要的幾個模塊.目前,高校教務系統(tǒng)多數(shù)仍采用傳統(tǒng)架構“Web服務器+數(shù)據(jù)庫服務器”,由于受經費所限購置的服務器性能較低,加之教務系統(tǒng)代碼臃腫、數(shù)據(jù)庫表結構未進行調優(yōu)等因素影響,每學期開學初和期末當學生選課或查詢成績的http并發(fā)訪問請求驟增時,經常出現(xiàn)學生網上選課失敗或響應不及時,學生對教務系統(tǒng)的使用體驗感覺很差.本研究中采用Nginx負載均衡技術來解決這些問題,并以朝陽師范高等??茖W校(以下簡稱“朝陽師專”)教務系統(tǒng)為例進行說明.
朝陽師專采用北京清遠優(yōu)軟公司開發(fā)的教務系統(tǒng),架構采用的是前端Resion+Oracle數(shù)據(jù)庫.為了減少選課高峰時段學生高并發(fā)、多請求和服務器性能不足帶來的影響,學校增加了多臺前端服務器,使學生可以選擇不同的前端服務器登錄教務系統(tǒng)進行選課.這種方式會造成服務器負載不均衡,依然不能解決選課高峰時段教務系統(tǒng)服務器卡頓和響應不及時等問題.
Nginx負載均衡技術是一種可以提高網絡靈活性和可用性的技術,它建立在現(xiàn)有網絡結構之上,利用其自身的調度算法提供一種廉價、有效和透明的方法,擴展網絡設備和服務器的帶寬,增加吞吐量,進而增強網絡數(shù)據(jù)處理能力[1].
負載均衡下的多服務器共同分擔用戶的請求,以此來提升服務器性能,達到快速響應并準確返回用戶訪問請求的目的.負載均衡技術就是解決如何合理地把大量并發(fā)請求分發(fā)給前端集群中的多個Web服務器,從而提升整個教務系統(tǒng)的吞吐量、資源利用率,以及降低請求響應時間等.負載均衡算法的選擇,對教務系統(tǒng)性能的提升起著決定性作用.
Nginx負載均衡技術主要通過采用內置的upstream模塊來實現(xiàn).本文中重點討論3種內置方案:輪詢方案、權重方案和ip_hash方案[2].朝陽師專教務系統(tǒng)采用B/S和C/S相結合的架構,教師和學生通過瀏覽器分別進行成績的錄入和查詢,管理人員通過客戶端管理和維護教學數(shù)據(jù),前端服務器運行Resion環(huán)境支撐前端Web服務運行,后端采用Oracle數(shù)據(jù)庫架構設計.以朝陽師專教務系統(tǒng)為例,對3種內置方案加以討論.
輪詢方案也是Nginx默認的負載均衡方案.
輪詢方案架構(每個請求按時間順序逐一分配到不同的前端Web服務器),如圖1所示,教務系統(tǒng)這邊增加了多臺Web前端服務器,用戶邊增加1臺Nginx負載均衡服務器.當用戶發(fā)出http請求時,Nginx服務器根據(jù)輪詢方式按時間順序將用戶的請求分配到每臺Web前端服務器;如果后端Web服務器down掉,輪詢方案Nginx會自動從系統(tǒng)中將其剔除,減輕了每臺Web前端服務器的負載,很好地解決了服務器負載問題,使學生獲得了更好的選課、查詢等體驗[2].處理http請求流程,如圖2所示.
Nginx配置文件中upstream模塊配置如下:
upstream backserver {
server WEB服務器1 IP;
server WEB服務器2 IP;
server WEB服務器3 IP;
server WEB服務器4 IP;
}
權重方案架構(指定輪詢幾率,weight和訪問比率成正比,用于后端服務器性能不均的情況),如圖3所示,教務系統(tǒng)這邊增加了多臺Web前端服務器,用戶邊增加1臺Nginx負載均衡服務器.當用戶發(fā)出http請求時,Nginx服務器會根據(jù)后端服務器權重情況將用戶的請求分配到每臺Web前端服務器,根據(jù)每臺Web前端服務器的權重來分配負載.如果后端Web服務器宕掉,Nginx會自動從系統(tǒng)中剔除.處理http請求的流程,如圖2所示.
Nginx配置文件中upstream模塊配置如下:
upstream backserver { #設定負載均衡服務器列表
server WEB服務器1 weight=8; #后端服務器權重規(guī)則
server WEB服務器2 weight=10; #后端服務器權重規(guī)則
server WEB服務器3 weight=8; #后端服務器權重規(guī)則
server WEB服務器4 weight=10; #后端服務器權重規(guī)則
}
ip_hash方案(按訪問url的hash結果來分配請求)用于實現(xiàn)http會話保持功能,將某個客戶端的多次請求定向到組內同一臺Web服務器上,保證在客戶端與服務器之間建立一條穩(wěn)定的會話(session),處理http請求的流程,如圖4所示.只有當Web服務器處于無效(down)狀態(tài)時,客戶端請求才會被Nginx服務器分配到下一個服務器去接收和處理,這樣每個訪客固定訪問一個后端Web服務器,既實現(xiàn)了前端服務器負載均衡的目標,又可以很好地解決客戶端訪問過程中的session問題.ip_hash方案架構,如圖5所示.
在Nginx負載均衡服務器中配置文件Nginx.conf的upstream模塊片段如下:
upstream backserver {
ip_hash;
server WEB服務器1:81;
server WEB服務器2:82;
server WEB服務器1:83;
server WEB服務器2:84;
}
同時,配置文件Nginx.conf中server段增加如下代碼片段:
location / {
proxy_pass http://app-proxy;http://jwserver;
proxy_next_upstream error timeout http_503 http_504;
proxy_next_upstream_tries 3;
proxy_pass http:// jwserver/;
upstream jwserver{
ip_hash; (采用的是IP哈希負載均衡方案)
server Web服務器ip:81 down max_fails=10 fail_timeout 60s;
(down 表示當前的server暫時不參與負載)
server Web服務器ip:82 weight=2 3 max_fails=10 fail_timeout 60s;
(weight 默認為1.weight越大,負載的權重就越大)
server Web服務器ip:83 max_fails=10 fail_timeout 60s;
server Web服務器ip:84 backup max_fails=10 fail_timeout 60s;;
(其他所有的非backup機器down或者忙的時候,請求backup機器)
}
代碼中關鍵字的詳細解釋如下:
max_fails :允許教務系統(tǒng)用戶請求失敗的次數(shù)默認為1.當超過最大失敗次數(shù)時,返回.
proxy_next_upstream:模塊定義的錯誤 .
fail_timeout:max_fails次失敗后,服務暫停的時間.
Nginx軟件具有高性能、輕量級和內存消耗低等優(yōu)勢,利用其解決了高校教務系統(tǒng)選課高峰時段網絡擁塞問題,為高校師生提供了更好的訪問體驗;另外,還提高了教務系統(tǒng)服務器響應速度,以及教務系統(tǒng)Web前端服務器和其他周邊資源的利用效率,因為服務就近提供,實現(xiàn)了地理位置無關性.Nginx服務器運行在朝陽師專自己的虛擬化平臺上,確保了服務器的高可用性.