【摘 要】針對高校進行網(wǎng)上選課時Web應(yīng)用服務(wù)器延遲比較大甚至宕機的現(xiàn)象,采用為Web應(yīng)用服務(wù)器構(gòu)建分布式多級緩存的辦法,可以有效解決Web服務(wù)器吞吐量不夠和響應(yīng)時間比較長的問題。
【關(guān)鍵詞】分布式 多級緩存技術(shù) 選課系統(tǒng)
【中圖分類號】 G 【文獻標識碼】A
【文章編號】0450-9889(2014)02C-0183-03
一、高校選課系統(tǒng)現(xiàn)狀分析
高校選課系統(tǒng)大部分都采用B/S三層結(jié)構(gòu),瀏覽器、Web應(yīng)用服務(wù)器和數(shù)據(jù)庫服務(wù)器,同時為了保證數(shù)據(jù)的一致性和完整性,數(shù)據(jù)庫服務(wù)器一般只有一個,而應(yīng)用服務(wù)器可以設(shè)置多個,邏輯結(jié)構(gòu)描述如圖1所示。當(dāng)多個Web應(yīng)用服務(wù)器在大量用戶并發(fā)提出的請求時,因為操作數(shù)據(jù)庫是串行執(zhí)行,那么勢必導(dǎo)致用戶請求很久都得不到回應(yīng),延遲時間比較長,甚至出現(xiàn)瀏覽器頁面超時等現(xiàn)象。
圖1 高校教務(wù)系統(tǒng)的典型邏輯架構(gòu)
針對選課系統(tǒng)現(xiàn)有的狀況,必須進行相應(yīng)的改進,以提高Web應(yīng)用服務(wù)器的服務(wù)質(zhì)量。緩存技術(shù)是其中比較熱點的解決辦法,它可以緩存數(shù)據(jù)庫中的數(shù)據(jù)對象,也可以緩存中間處理對象和結(jié)果對象。搭建一個緩存服務(wù)器顯然作用不大,在本文中將采用分布式緩存服務(wù)器集群的方式,也就是采用Web應(yīng)用服務(wù)器分布式緩存技術(shù),這樣可以極大改善現(xiàn)有服務(wù)器所面臨的高負載問題,提高Web應(yīng)用服務(wù)器的吞吐量,降低響應(yīng)時間,解決數(shù)據(jù)庫的伸縮性等問題。
二、選課系統(tǒng)緩存對象分析與設(shè)計
在設(shè)置緩存之前,首先要弄清楚選課的整個流程,里面所涉及的對象,分析出其中的數(shù)據(jù)對象、過程對象和結(jié)果對象,之后考慮如何對這些對象進行緩存。
(一)選課系統(tǒng)流程分析。在學(xué)生進行搶選課的時候,首先進入課程頁面找到自己喜歡的課程,如果該課程沒有達到限定的選課人數(shù),那么學(xué)生選擇該課程成功,否則只能選擇其他課程;然后當(dāng)選擇的課程通過后,便會進入該課程對應(yīng)的教師頁面,學(xué)生搶選自己喜歡的任課教師,如果該任課教師沒有達到限定人數(shù),那么該學(xué)生選教師成功,也就意味著該課程整體搶選成功,否則該學(xué)生只能再選擇其他教師。在選課過程中或選課結(jié)束后,學(xué)生可以隨時通過結(jié)果頁面查看自己選課的總體情況,以便作出調(diào)整。通過以上分析,可以得到如圖2選課系統(tǒng)流程圖。
圖2 選課子系統(tǒng)流程圖
(二)緩存對象分析。經(jīng)過分析,在高校選課系統(tǒng)中可以進行緩存的對象包括以下對象:課程信息對象,可以是數(shù)據(jù)對象,也可以是課程信息所形成的頁面對象;課程人數(shù)限制信息,這個屬于數(shù)據(jù)對象;課程已選人數(shù)信息,這個屬于數(shù)據(jù)對象;教師信息對象,這個可以是數(shù)據(jù)對象,也可以是教師信息所形成的頁面對象;教師人數(shù)限制信息,這個屬于數(shù)據(jù)對象;教師已選人數(shù)信息,這個屬于數(shù)據(jù)對象;選課結(jié)果信息,可以是數(shù)據(jù)對象,也可以是結(jié)果形成的頁面對象。因此得出結(jié)論,這些信息都可以以數(shù)據(jù)對象的形式存儲。
(三)緩存對象分類。選課系統(tǒng)可緩存的數(shù)據(jù)對象各有其特點,因此這些數(shù)據(jù)對象不能全部以統(tǒng)一的方式進行緩存,按照這些數(shù)據(jù)對象的特點,把這些數(shù)據(jù)對象分為參考數(shù)據(jù)對象、活動數(shù)據(jù)對象和資源數(shù)據(jù)對象。參考數(shù)據(jù)對象是指主要用于讀取的數(shù)據(jù)對象,雖然這些數(shù)據(jù)對象很少有寫入操作,卻因為讀取數(shù)據(jù)對象的用戶數(shù)量較大,數(shù)據(jù)對象檢索和列表也會產(chǎn)生巨大的數(shù)據(jù)對象條目?;顒訑?shù)據(jù)對象是指進行讀取和寫入的數(shù)據(jù),這些數(shù)據(jù)對象是可以調(diào)整變化的,而且存在是短暫的。資源數(shù)據(jù)指的是同時進行讀寫的數(shù)據(jù)對象。
按照以上分析,選課系統(tǒng)中的參考數(shù)據(jù)對象包括課程數(shù)據(jù)對象、課程人數(shù)限制數(shù)據(jù)對象、教師數(shù)據(jù)對象和教師人數(shù)限制數(shù)據(jù)對象;活動數(shù)據(jù)對象包括選課結(jié)果數(shù)據(jù)對象、課程已選人數(shù)數(shù)據(jù)對象和教師已選人數(shù)數(shù)據(jù)對象。
(四)緩存邏輯模型設(shè)計。根據(jù)選課子系統(tǒng)可緩存對象的分析結(jié)果,分為三種不同的數(shù)據(jù)對象,那么在緩存這些數(shù)據(jù)對象的時候,需要在內(nèi)存中建立對應(yīng)獨立的存儲結(jié)構(gòu)單元,稱之為命名緩存。這些命名緩存之間完全互相隔離,互不干擾,當(dāng)有多個應(yīng)用程序共享同一個緩存集群時,可以為每個應(yīng)用程序分別建立命名緩存。在同一個命名緩存中,對同類型的數(shù)據(jù)對象,但是內(nèi)容不通的,需要對命名緩存進行分區(qū),這樣即可以解決數(shù)據(jù)沖突的問題,極大地提高檢索效率。這樣就得出一種新的緩存服務(wù)中數(shù)據(jù)對象新的邏輯模型,如圖3所示。
圖3 緩存邏輯模型設(shè)計
在本文的選課系統(tǒng)中,將參考數(shù)據(jù)對象類型命名為MyBasicData,并根據(jù)內(nèi)容不同進行分區(qū),分為課程數(shù)據(jù)對象分區(qū)、課程限制人數(shù)數(shù)據(jù)對象分區(qū)、教師數(shù)據(jù)對象分區(qū)和教師人數(shù)限制數(shù)據(jù)對象分區(qū)等;活動數(shù)據(jù)對象類型命名為MyActiveData,劃分為選課結(jié)果數(shù)據(jù)對象分區(qū)、課程已選人數(shù)分區(qū)和教師已選人數(shù)分區(qū)等;資源數(shù)據(jù)對象類型命名為MySourceData。
三、構(gòu)建基于JBoss Cache3.0分布式多級緩存
(一)分布式多級緩存邏輯架構(gòu)設(shè)計。根據(jù)選課系統(tǒng)的特點,這些可被緩存對象基本上都是數(shù)據(jù)對象,因此可以在構(gòu)建分布式緩存的時候,把緩存加到數(shù)據(jù)庫服務(wù)器和Web應(yīng)用服務(wù)器之間,用緩存服務(wù)器緩存數(shù)據(jù)庫服務(wù)器中的數(shù)據(jù)對象,這樣可以有效解決數(shù)據(jù)庫服務(wù)器的伸縮性問題,極大緩解數(shù)據(jù)庫服務(wù)器的壓力。圖4展示的便是構(gòu)建的Web應(yīng)用服務(wù)器分布式緩存架構(gòu),主要分為數(shù)據(jù)層、緩存層、應(yīng)用服務(wù)層和用戶層。
當(dāng)用戶訪問應(yīng)用服務(wù)內(nèi)容的時候,Web應(yīng)用服務(wù)器的應(yīng)用程序查看數(shù)據(jù)對象是否可以在其對應(yīng)的緩存服務(wù)器中獲取,如果該數(shù)據(jù)對象在該緩存服務(wù)器中不存在,則查看分布式緩存其他結(jié)點緩存服務(wù)器中是否存在,直到找到所需的數(shù)據(jù)對象為止。如果整個分布式緩存中都不存在,便去操作數(shù)據(jù)庫,獲取到所需的數(shù)據(jù)對象,并嘗試將該對象加載到分布式緩存中。
除建立服務(wù)器端緩存外,還需要建立應(yīng)用服務(wù)層和本地緩存,以加快用戶檢索數(shù)據(jù)。同時保障應(yīng)用服務(wù)層和本地緩存要與服務(wù)端對象具有一致性,對象從數(shù)據(jù)庫服務(wù)器檢索到分布式緩存,緩存再把對象存儲到應(yīng)用服務(wù)層和客戶端,這樣便形成了Web應(yīng)用服務(wù)器分布式多級緩存。當(dāng)用戶發(fā)出請求時,服務(wù)首先查看本地緩存中是否存在相應(yīng)對象,如果沒有,則到服務(wù)端即緩存層查找,如果有則返回對象并同時更新應(yīng)用服務(wù)層和客戶端緩存。沒有則到數(shù)據(jù)庫查找到數(shù)據(jù)對象緩存到服務(wù)端并同時緩存到應(yīng)用服務(wù)層和客戶端。
圖4 分布式緩存架構(gòu)
(二)構(gòu)建基于JBoss Cache3.0的Web應(yīng)用服務(wù)器分布式多級緩存解決方案。JBoss Cache3.0是一個復(fù)制的事務(wù)處理緩存,它允緩存企業(yè)級應(yīng)用數(shù)據(jù)來更好的改善應(yīng)用服務(wù)器的性能。緩存服務(wù)器結(jié)點構(gòu)成樹形邏輯結(jié)構(gòu),節(jié)點間利用JGroup進行多播通信,節(jié)點間緩存數(shù)據(jù)將被自動復(fù)制,形成分布是緩存集群。因此利用JBoss Cache3.0在Web應(yīng)用服務(wù)器和數(shù)據(jù)數(shù)據(jù)庫之間建立分布式緩存,形成緩存層(如圖5所示)以分解數(shù)據(jù)庫服務(wù)器的壓力是一個可行的解決方案。
圖5 基于JBoss Cache3.0分布式緩存配置
1.替換策略設(shè)計。JBoss Cache3.0的緩存參數(shù)配置。配置是基于XML文檔的,其中有兩個關(guān)鍵參數(shù)是必須進行配置的。WakeUpIntervalSeconds參數(shù)定義替換線程多少時間運行一次,PolicyClass參數(shù)定義所采用哪種替換策略,如果不進行配置,將采用基于LRU算法的替換策略,也可以替換成其他替換策略。
命名緩存和緩存分區(qū)。在建立JBoss Cache3.0分布式緩存的時候,按照2節(jié)中的對象類型分析,需要命名多個不同的緩存和分區(qū),分別緩存不同類型的數(shù)據(jù),即命名MyBasicData用來存儲參考數(shù)據(jù),命名MyActiveData用來存儲活動數(shù)據(jù)和命名MySourceData用來存儲資源數(shù)據(jù)等。
2.構(gòu)建分布式多級緩存。JBoss Cache3.0支持多級緩存,即支持服務(wù)層緩存和本地緩存。本地緩存不參與集群,并且也不與集群中其他緩存通信,通過串行化,用戶在任意時間修改緩存模式。服務(wù)層緩存采用樹形結(jié)構(gòu)形成集群,集群節(jié)點之間利用JGroup建立可靠的組播通信,緩存更新采用同步或異步模式進行復(fù)制。在本案例中,建立一個名為TreeCache.xml的配置文件,在里面設(shè)置集群名稱、設(shè)置緩存復(fù)制模式和JGroup通信配置等,然后部署到JBoss應(yīng)用服務(wù)器中。
在基于JBoss Cache3.0分布式緩存中,緩存當(dāng)用戶發(fā)出請求時,服務(wù)首先查看本地和應(yīng)用服務(wù)緩存中是否存在相應(yīng)數(shù)據(jù),如果沒有,則到JBoss Cache3.0服務(wù)端即緩存層查找,如果有則返回數(shù)據(jù)并同時更新應(yīng)用服務(wù)器和客戶端緩存。沒有則到數(shù)據(jù)庫查找到數(shù)據(jù)緩存到JBoss Cache3.0服務(wù)端并同時更新應(yīng)用服務(wù)器和客戶端緩存。
在以上集成架構(gòu)中,通過利用部署在中間層的JBoss Cache3.0,應(yīng)用服務(wù)的可伸縮性、性能水平和可用性都得到了相當(dāng)大的提高,更具體地說,提高了服務(wù)架構(gòu)的可擴展性,實現(xiàn)了盡可能減少對數(shù)據(jù)庫資源的爭奪,注入更多的靈活性??蓴U展性的架構(gòu)可以根據(jù)不同服務(wù)節(jié)點的資源使用情況,進行動態(tài)調(diào)節(jié)用戶到不同的服務(wù)節(jié)點,從而提高響應(yīng)時間,降低了延遲。通過JBoss Cache3.0高可用性的集群,可以在某個節(jié)點發(fā)生故障的時候,降低數(shù)據(jù)損失。
四、分布式緩存技術(shù)在選課系統(tǒng)中的應(yīng)用實踐
廣西農(nóng)業(yè)職業(yè)技術(shù)學(xué)院選課系統(tǒng)應(yīng)用服務(wù)器為JBossAS 5.0,在實際應(yīng)用之前利用LoadRunner8.1針對建立JBoss Cache3.0分布式多級緩存前后進行壓力測試。首先利用LoadRunner的VuGen分別錄制在建立緩存之前與建立緩存之后兩種環(huán)境下網(wǎng)上選課系統(tǒng)的腳本,然后利用Controller模擬50虛擬用戶、100虛擬用戶、150虛擬用戶和200虛擬用戶、250用戶對該系統(tǒng)的訪問,然后生成結(jié)果分析比較,發(fā)現(xiàn)配置緩存后,服務(wù)的吞吐量(如圖6所示)和點擊率(如圖7所示)都得到很大提高。
圖6 有無緩存吞吐量比較圖
圖7 有無緩存點擊率比較圖
通過驗證之后,基于JBoss Cache3.0分布式緩存技術(shù)已經(jīng)被用在廣西農(nóng)業(yè)職業(yè)技術(shù)學(xué)院選課系統(tǒng)中得到應(yīng)用,有效解決了幾千人同時并發(fā)訪問Web應(yīng)用服務(wù)器宕機的問題。
因此,在Web應(yīng)用服務(wù)器中構(gòu)建分布式多級緩存,當(dāng)緩存層中緩存服務(wù)器數(shù)量足夠多的情況下,可以大大提高Web應(yīng)用服務(wù)器的服務(wù)質(zhì)量。所以Web應(yīng)用服務(wù)器分布式多級緩存是一個切實可行的提高Web應(yīng)用服務(wù)器性能的解決方案。
綜上所述,針對廣泛應(yīng)用的選課系統(tǒng)的所面臨的高負載問題,為其建立Web應(yīng)用服務(wù)器中構(gòu)建分布式多級緩存,通過實際應(yīng)用與模擬驗證發(fā)現(xiàn)對Web應(yīng)用服務(wù)器的性能有提高作用,為解決高校選課系統(tǒng)延遲大甚至宕機的問題提供了一種切實可行的辦法。
【參考文獻】
[1]王瑜,侯整風(fēng).緩存技術(shù)在在線考試系統(tǒng)中的應(yīng)用[J]. 山東理工大學(xué)學(xué)報(自然科學(xué)版),2011 (5)
[2]王鑫.緩存技術(shù)在Web應(yīng)用中的研究[J].濰坊學(xué)院學(xué)報,2011(4)
[3]劉妍,古志民.多重請求調(diào)度的分布式Web 緩存集群設(shè)計[J]. 裝備指揮技術(shù)學(xué)院學(xué)報,2006(12)
[4]鐘一青. 基于內(nèi)容分發(fā)的cache集群系統(tǒng)[J].電腦與信息技術(shù),2006(3)
[5]莫洪武.基于Velocity CTP3 分布式多級緩存的研究與應(yīng)用[J].軟件導(dǎo)刊.2010(10)
[6]韓英杰,石磊,基于最小延遲代價的Web 緩存替換算法研究[J]. 計算機工程與設(shè)計,2008(8)
【基金項目】2012年度廣西高等學(xué)校立項科研項目(201204LX620)
【作者簡介】莫洪武(1980- ),男,黑龍江拜泉人,廣西農(nóng)業(yè)職業(yè)技術(shù)學(xué)院講師,研究領(lǐng)域:軟件技術(shù)。
(責(zé)編 黎 原)