文舉
【摘 要】本文主要就上海外語教育出版社的“新理念外語網(wǎng)絡教學平臺”的服務器負載均衡技術方案進行討論,以此解決在高負載、高并發(fā)、大流量網(wǎng)絡環(huán)境下出現(xiàn)的性能瓶頸問題。本研究具有一定的推廣價值,具有成本投入少、可靠性高、易于操作維護的特點,特別適合高校核心信息管理系統(tǒng)的技術改造。
【關鍵詞】網(wǎng)絡學習 負載均衡 英語教學 新理念外語網(wǎng)絡教學平臺
一、新理念外語網(wǎng)絡教學平臺
“新理念外語網(wǎng)絡教學平臺”(以下稱教學平臺)是上海外語教育出版社根據(jù)教育部頒布的《大學英語課程教學要求》,配套《全新版大學英語綜合教程》等教材而設計開發(fā)的網(wǎng)絡教學系統(tǒng)。在嚴格遵循現(xiàn)代外語教學理念、充分運用先進信息技術的基礎上,教學平臺注重為學生營造全方位、自主式、個性化學習環(huán)境,全面培養(yǎng)學生的英語綜合應用能力。
教學平臺基于微軟的.Net 2.0技術和SQL Server 2005數(shù)據(jù)庫,由三個相互獨立而又相互聯(lián)系的模塊組成:1.系統(tǒng)管理員模塊;2.教師管理模塊;3.學生網(wǎng)絡學習模塊。其中管理員和教師管理模塊采用B/S(Browser/Server,瀏覽器/服務器)架構,學生學習模塊采用B/S和C/S(Client/Server,客戶端/服務器)結合的架構。學生可以通過瀏覽器進行在線學習和測試,由于系統(tǒng)功能的更新,新發(fā)布的5.5版中必須使用客戶端才能參加在線測試。
二、現(xiàn)有問題及解決方案
現(xiàn)有大多數(shù)高校均采用單臺服務器來運行本系統(tǒng),集數(shù)據(jù)庫、Web、文件服務器于一身。這是一種低成本的方式,適合并發(fā)訪問壓力較小的環(huán)境使用。但其缺點也是顯而易見的:系統(tǒng)性能會隨著并發(fā)訪問的增加出現(xiàn)直線的下滑,所有重要數(shù)據(jù)在同一個地方有安全隱患。簡單直接的解決方法是增加服務器,分別用于Web、Database、NFS,如圖一所示:
圖1
這種方案解決了數(shù)據(jù)安全和用戶上傳文件獨立存儲的問題,但在高并發(fā)的環(huán)境下,Web服務器和數(shù)據(jù)庫服務器將會成為系統(tǒng)的瓶頸。在硬件配置確定的前提下,通過增加Web服務器的數(shù)量,可以明顯緩解高并發(fā)帶來的服務器壓力。然而,這樣的結構卻帶來了新的問題:多臺web服務器對于訪問者而言相互獨立,造成沒有統(tǒng)一的網(wǎng)絡訪問入口,且各臺服務器所承受的訪問量可能存在巨大差異,缺乏統(tǒng)一協(xié)調(diào)和分配訪問的機制。
因此,問題的解決需要引入新的方案,實現(xiàn)程序自動根據(jù)服務器負責分配、引導訪問者到負載最低的服務器,并且要做到對用戶透明,即系統(tǒng)邏輯上對用戶而言就是一臺服務器,從而保證其獲得最佳訪問體驗(圖二)。要實現(xiàn)上述功能,可以購買如F5 BIG-IP、Citrix NetScaler等專業(yè)負載均衡設備,優(yōu)點是可以支持動態(tài)智能分配用戶訪問,缺點是價格昂貴。在高性價比的解決方案中,由俄羅斯軟件工程師Igor Sysoev開發(fā)的開源高性能HTTP和反向代理服務器Nginx可以滿足這樣的需求,該軟件可以運行于Linux和Windows操作系統(tǒng)之上,但在生產(chǎn)環(huán)境中,建議采用Linux作為Nginx運行的平臺。
圖2
現(xiàn)有的教學平臺使用ViewState來保存訪問者的狀態(tài)信息,啟用Nginx負載均衡后,可以實現(xiàn)動態(tài)智能分配用戶訪問,但是會出現(xiàn)用戶狀態(tài)無法保存,從而導致用戶無法登陸訪問的問題。在Nignx中啟用IP_hash后,程序根據(jù)用戶的IP進行hash計算,生成唯一的訪問標識,確保同一IP地址用戶始終對應同一臺Web服務器,可以保存用戶的狀態(tài),但此時的負載均衡在很大程度上就失去了作用,無法實時動態(tài)調(diào)節(jié)資源。解決方法是使用微軟提供的ASP.Net State Service(aspnet_state.exe)方案,SessionState中可實現(xiàn)ViewState共享的方式有StateServer和SQL Server兩種模式,本文主要討論基于SQL Server數(shù)據(jù)庫的方式。
方案的具體實施主要將會涉及Web服務器、Nginx反向代理服務器、SQL Server數(shù)據(jù)庫服務器的配置,關鍵步驟包括首先需要啟用nginx中的upstream:
upstream webServers
{ server 192.168.0.14;
server 192.168.0.15;
server 192.168.0.16;
server 192.168.0.17;}
在SQL Server中創(chuàng)建用于保存用戶狀態(tài)信息的數(shù)據(jù)庫,可以通過執(zhí)行WinDir\Microsoft.Net\Framework\Version文件夾中的InstallSqlState.sql腳本實現(xiàn)。在加入集群的各臺web服務器根目錄中找到web.config,修改sessionState節(jié)點的模式為SQLServer,完成數(shù)據(jù)庫連接信息等相應的配置后,同步各臺服務器中web.config配置文件。
需要注意的是,在同步各web.config配置文件前,需要設置統(tǒng)一的MachineKey,以保證集群中各個web服務器擁有共同的密鑰,使得系統(tǒng)對ViewState數(shù)據(jù)加密解密的結果一致,從而實現(xiàn)ViewState的共享。
此外,還需要在數(shù)據(jù)庫集群里配置好數(shù)據(jù)的同步,以及對Web集群服務器的單一訪問接口。如有必要,可以啟用NFS或是分布式存儲方案,來應對日益增加的用戶上傳文件。
三、結論及思考
以上方案經(jīng)過實際應用的檢驗,在不增加投入或投入很小的情況下,很好地滿足了高負載、高并發(fā)、大流量的網(wǎng)絡環(huán)境。此方案可以應用于所有基于.Net技術的信息管理系統(tǒng),比如高校教務管理系統(tǒng)、在線辦公自動化OA系統(tǒng)、圖書情報檢索系統(tǒng)、網(wǎng)絡教學平臺等。與此同時,也需要注意幾個存在的問題:1.ViewState數(shù)據(jù)安全問題,由于ViewState信息以hidden的方式直接嵌入在網(wǎng)頁中,雖然已經(jīng)加密,但依然存在泄漏用戶信息的隱患。2.在高負荷情況下ASP.net State服務器和Nginx服務器有可能成為瓶頸,從而使這個方案的性能受到影響,應根據(jù)訪問壓力及時優(yōu)化、調(diào)整系統(tǒng)的軟、硬件配置,保證用戶的訪問體驗。
【參考文獻】
[1]教育部. 大學英語課程教學要求[ M ]. 上海:上海外語教育出版社, 2004.
[2]Microsoft. Session-State Modes [EB/OL].
[3]Nginx. Module ngx_http_upstream_module [EB/OL].
[4]外教社. 新理念外語網(wǎng)絡教學平臺 [ CP ]. 上海:上海外語教育出版社, 2012.