米麗萍 陳旭清
摘 要: 對于高訪問量網(wǎng)站,Web服務器端經(jīng)常面臨大并發(fā)量和海量數(shù)據(jù)流請求的問題,導致用戶訪問延時,利用負載均衡和內(nèi)存緩存相結(jié)合技術(shù)可以解決這一問題。在服務器端采用集群下的負載均衡策略,將工作任務相對均衡地分配到各個節(jié)點上執(zhí)行;采用內(nèi)存緩存機制,通過優(yōu)先讀取內(nèi)存中的緩存數(shù)據(jù)以減少對數(shù)據(jù)庫的訪問次數(shù),進而減輕數(shù)據(jù)庫負載。性能測試結(jié)果和用戶體驗反饋信息顯示,該方法在大并發(fā)量訪問時能極大地提高系統(tǒng)的吞吐量。
關鍵詞: Web服務器; 大并發(fā)量; 海量數(shù)據(jù)流; 負載均衡; 內(nèi)存緩存; 吞吐量
中圖分類號:TP393.09 文獻標志碼:A 文章編號:1006-8228(2014)01-17-03
0 引言
為了響應中共中央提出的大規(guī)模培訓干部和大幅度提高干部隊伍素質(zhì)的要求,我省組織部利用信息化手段,推出了干部在線學習的新型培訓模式。該系統(tǒng)擁有注冊用戶20多萬人,并發(fā)量達到1-2萬人的規(guī)模,任何一個單點服務都不可能承受這種負載,如何解決服務器的高負載問題成為系統(tǒng)開發(fā)過程中首先要解決的問題。本系統(tǒng)硬件結(jié)構(gòu)采用服務器集群[1]的方式,軟件開發(fā)和部署采用分布式架構(gòu)與集群下的緩存技術(shù)[2]相結(jié)合的方式,服務器間相互配合,極大提升了系統(tǒng)的吞吐量。
1 服務器集群的負載平衡
集群是一種并行或分布式處理的系統(tǒng)[3]。服務器集群是指將多臺同構(gòu)或異構(gòu)服務器集中起來,對外提供透明的服務,協(xié)同完成特定的任務,從而獲得很高的計算速度,減少單點故障數(shù)量,實現(xiàn)群集資源的高可用性并提高性能。
將系統(tǒng)負載分配到不同的服務器上處理,籍此提供大量用戶并發(fā)訪問服務,實現(xiàn)并行處理的方法,就是負載平衡( LB,Load Balancing)思想[4]。
Windows下網(wǎng)絡負載平衡使得單個子網(wǎng)上的所有集群主機可以同時檢測集群IP地址的傳入網(wǎng)絡通信。在每個集群主機上,網(wǎng)絡負載平衡(NLB)作為Windows網(wǎng)絡驅(qū)動程序運行,充當集群適配器驅(qū)動程序和TCP/IP堆棧間的過濾器,以便在主機間分配通信,網(wǎng)絡負載平衡的操作對于TCP/IP網(wǎng)絡堆棧是透明的,因此作為運行于TCP/IP之上的操作系統(tǒng)內(nèi)核和服務器應用程序來說,它們根本不知道NLB的存在。
Windows網(wǎng)絡負載平衡(NLB)的局限性有:一個集群中最多支持32臺服務器;三層交換機必須為集群成員建立一個 VLAN,并且這個VLAN 必須配置為在二層模式下運行才能夠與NLB一起使用,但并不是所有三層交換機都支持此項功能;發(fā)往NLB集群的所有數(shù)據(jù)包會在交換機上的所有端口上廣播而造成數(shù)據(jù)“洪水”。
按照“干部在線”的業(yè)務需求,系統(tǒng)的服務器集群的硬件結(jié)構(gòu)如圖1所示,多個Web服務器組成一個Web服務集群,多個流媒體服務器組成流媒體服務集群,所有的課件資源均存放在NAS陣列上。
集群采用Windows 2008 R2的網(wǎng)絡負載平衡技術(shù)(NLB)。每個Web服務器都是Windows 2008R2+IIS,每個流媒體服務器采用Windows 2008R2+Windows Media Service。Web服務器集群和流媒體服務器集群分別有一個虛擬的IP地址稱為“集群IP地址”,集群IP地址是該集群中所有計算機共享的地址,且每臺服務器還有一個惟一專用的IP地址。
2 分布式架構(gòu)
.NET環(huán)境下的分層體系結(jié)構(gòu), 是指在原來的兩層結(jié)構(gòu)客戶端與數(shù)據(jù)服務器端之間加入了一個組件層,也稱為“中間層”,將應用程序的業(yè)務規(guī)則、數(shù)據(jù)訪問、合法性校驗等工作放到中間層進行處理。這樣系統(tǒng)將具有顯示操作層(客戶端)、業(yè)務邏輯層(服務器后臺代碼)和數(shù)據(jù)層(數(shù)據(jù)庫服務)等三個層次。三層架構(gòu)如圖2所示。
山西干部在線軟件系統(tǒng)采用三層(3-layer)架構(gòu)設計,該系統(tǒng)基于.net4.0用C#開發(fā),軟件解決方案如圖3所示,具體說明如表1所示。
軟件采用兩層(2-ties)物理部署,如圖4所示,即表示層(Web)和業(yè)務邏輯層(BLL)運行在Web服務器群中,數(shù)據(jù)層(DAL)和數(shù)據(jù)庫運行在數(shù)據(jù)服務器群中(不能被外網(wǎng)訪問),邏輯層(BLL)通過WCF技術(shù)跨物理邊界(服務器)訪問數(shù)據(jù)層(DAL),從而實現(xiàn)軟件層面上的分布式計算。
GbzxDataService、DAL、DBUtility、IDAL、Model以及數(shù)據(jù)庫系統(tǒng)SQL Server2005/2008部署在數(shù)據(jù)服務器上,完成數(shù)據(jù)的存取,對外公布WCF服務,邏輯層通過調(diào)用公布的WCF服務完成數(shù)據(jù)存取。Web、BLL、DALFactory、IDAL、Model部署在Web服務器上。按照業(yè)務需求,服務器組可以隨時增刪。
3 內(nèi)存緩存(Memory Cache)技術(shù)
本系統(tǒng)有二十多萬用戶,按5%的上線率就有一萬的并發(fā)量,這樣無論是Web服務器還是數(shù)據(jù)庫服務器,負荷都比較大。尤其是打開主頁的時候,速度會很慢。
首先來分析一下主頁數(shù)據(jù)構(gòu)成,主頁共分11個區(qū)域,這些區(qū)域的數(shù)據(jù)都從數(shù)據(jù)庫中讀取,經(jīng)過大量計算(在線數(shù)據(jù))獲得。即打開主頁時就要讀取并計算這些數(shù)據(jù),計算量很大,用時很長,尤其在大并發(fā)量的時候,打開主頁的速度會很慢,用戶體驗很不好。但這些數(shù)據(jù)大多有個共同點:更新頻率很低。因此采用內(nèi)存緩存技術(shù),可大大減輕服務器尤其是數(shù)據(jù)庫服務器的負荷,極大地提升性能,前端用戶體驗也很好。
內(nèi)存緩存(Memory Cache)是系統(tǒng)中的一塊特殊的內(nèi)存區(qū)域。其作用是在一個特定的時間段內(nèi)保存數(shù)據(jù),當指定的時限到期后,緩存會被釋放,成為“過期”。因此,在緩存有效時,無論前端有多少用戶,他們并發(fā)打開主頁時,數(shù)據(jù)直接從緩存獲取,根本不會讀數(shù)據(jù)庫。假設前端有1萬用戶,如果不采用緩存技術(shù),他們打開主頁需要訪問11萬次數(shù)據(jù)庫,數(shù)據(jù)庫服務器負擔很重。內(nèi)存緩存在指定的時限有效,當緩存過期后,用戶就需要訪問數(shù)據(jù)庫,但訪問的同時緩存被重新加載,在此之后的指定時限內(nèi)其他用戶就只會訪問緩存而不需訪問數(shù)據(jù)庫。
緩存技術(shù)在極大提升性能的同時減輕了數(shù)據(jù)庫的負擔,但同時也有很大弊端,即犧牲了實時性。比如,緩存的時限是10分鐘,在時限內(nèi),用戶看到的是10分鐘之前的情況,因為只有10分鐘到期后,緩存才被刷新。為了提升數(shù)據(jù)的實時性,我們的系統(tǒng)采用了多緩存不同時限的策略。“在線數(shù)據(jù)”設置為5分鐘,“導航欄”、“友情鏈接”和“其他欄目”等變化很小則緩存時限設為20分鐘,其他欄目設置為10分鐘。
4 性能分析
圖5是單Web服務器在800多人并發(fā)訪問的情況下的性能監(jiān)視圖,從圖5可以看出,處理器已經(jīng)超過80%,而剩余內(nèi)存小于10%,硬盤的使用率達到了60%。
圖6是900人在15臺Web服務器并發(fā)的情況下的性能監(jiān)視圖,從圖6可以看出處理器不超過10%,而內(nèi)存使用率也在10%左右,硬盤的使用率在1%左右。
5 結(jié)束語
為了解決多用戶并發(fā)所帶來的問題,提高系統(tǒng)性能,我們在干部在線系統(tǒng)中采用了在服務器集群下的負載均衡策略,將工作任務相對均衡地分配到各個節(jié)點上執(zhí)行;另外采用內(nèi)存緩存機制,通過優(yōu)先讀取內(nèi)存中的緩存數(shù)據(jù)以減少對數(shù)據(jù)庫的訪問次數(shù),以此減輕數(shù)據(jù)庫負載。軟件采用三層架構(gòu)來提高系統(tǒng)的吞吐量。目前該系統(tǒng)運行正常,用戶體驗良好。在服務器集群下的負載均衡策略和用內(nèi)存緩存機制相結(jié)合的技術(shù),對于并發(fā)量很大的同類型網(wǎng)站具有推廣和示范作用。但服務器集群的投入是需要充足的資金保障的,而緩存技術(shù)在極大提升性能的同時犧牲了實時性,因此如何取得高性價比,還需要我們今后在實踐中不斷地摸索。
參考文獻:
[1] 戴剛.服務器集群關鍵技術(shù)的研究與實現(xiàn)[D].國防科學技術(shù)大學圖書
館,2002.
[2] 葉萃,張松.一種終端服務器內(nèi)存優(yōu)化方法[J].微電子學與計算,
2007.3.
[3] 叢慶,沈夏炯.普招網(wǎng)報系統(tǒng)中服務器集群與緩存的研究[J].電腦知
識與技術(shù),2009.12.
[4] 周瑩蓮,劉甫.服務器負載均衡技術(shù)研究[J].計算機與數(shù)字工程,
2010.4.