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