許雯
(西安航空學院計算機學院,陜西西安710077)
基于Web的選課系統(tǒng)的設計與性能優(yōu)化
許雯
(西安航空學院計算機學院,陜西西安710077)
設計了基于Web系統(tǒng)的學生選課系統(tǒng),分析了當前一般院校采用的選課系統(tǒng)大都存在著在選課時期出現(xiàn)系統(tǒng)響應過慢甚至服務器宕機的問題,并分析出引起這種問題的主要因素在于大量請求時并發(fā)的內(nèi)存壓力,以及磁盤IO壓力。針對該問題提出了采用排隊機制,以及引入緩存服務的架構(gòu)方案來解決。最后通過仿真實驗可以看出,所提出的方案是可行并且有效的。
選課系統(tǒng);Web;排隊模塊;Redis
通過網(wǎng)絡進行選課是教學管理現(xiàn)代化建設的重要標志和應用之一[1]。很多高校都在開展促進教務體制改革,一些重點高校都在開發(fā)自己的教務系統(tǒng)[2]。選課系統(tǒng)是教務系統(tǒng)重要的一部分,文獻[3-4]都討論了針對自己高校的選課系統(tǒng)的設計與實現(xiàn)。
選課系統(tǒng)由于其特殊性,往往在短時間內(nèi)產(chǎn)生大量的并發(fā)業(yè)務,過多的并發(fā)會對正常的業(yè)務造成影響沖擊。為了解決高校選課系統(tǒng)在選課時階段性高負載造成的“峰值堵塞”問題,眾多高校都開始研發(fā)自己的選課系統(tǒng)。文獻[5]從選課規(guī)則和選課算法、應用程序和數(shù)據(jù)庫設計以及引入服務器集群技術(shù)等方面對高校選課系統(tǒng)進行優(yōu)化,但是對于選課系統(tǒng)而言,服務器集群技術(shù)成本過高;文獻[6]提出了使用專用工具量化系統(tǒng)性能,并通過分析數(shù)據(jù)制訂相應的優(yōu)化策略,取得一定的效果,但是這個系統(tǒng)本身邏輯較為復雜,并且引入的第三方組件較多。本文完成了一種簡單的選課系統(tǒng)的設計方案,在不引入過多第三方組件,以及不增加硬件設備的條件下,通過使用Redis內(nèi)存數(shù)據(jù)庫及軟件設計出排隊模塊,以保證選課系統(tǒng)的正常運行。
選課系統(tǒng)由用戶管理模塊、課程管理模塊、學生選課模塊和排隊模塊構(gòu)成。
用戶管理模塊的作用包含負責學生、管理員用戶的創(chuàng)建與維護,負責Web系統(tǒng)中所有用戶的登錄管理2個方面。管理員用戶由超級用戶來指定,學生用戶由管理員用戶創(chuàng)建維護。所有用戶登錄,都由該模塊進行登錄權(quán)限校驗。
課程管理模塊只是開發(fā)給管理員,由管理員進行課程的增刪改查。
學生選課包括以下功能:查詢當前所有課程的詳細情況,查詢指定課程的具體選擇情況,對指定一門課程進行選取,對自己所選課程進行增刪改查。
排隊模塊用于解決在選課時由于大量學生同時發(fā)出選課請求造成系統(tǒng)癱瘓的問題。該模塊將用戶的每個請求放在一個隊列里面排隊,并給用戶返回一個估算的排隊時間。等到該用戶排到的時候,才進行真正的選課動作。
一個Web站點的性能瓶頸大都是在用戶大量請求同時發(fā)出時產(chǎn)生的,大量的請求導致Web后臺工作繁忙,因此用戶發(fā)出請求的響應時間會大大延長。而用戶在感受到請求響應延遲過長時,往往會多次刷新頁面,重新發(fā)出請求,這樣一來,再一次增加Web服務器的壓力。這種壓力初期會造成響應過慢,而嚴重時會導致服務器宕機。Web服務器的壓力,實際就是CPU、網(wǎng)絡IO、內(nèi)存及硬盤IO的壓力。對于校園選課系統(tǒng)來講,由于其業(yè)務主要為對所選課程的增刪改查,并沒有大量的數(shù)據(jù)運算,對CPU的性能影響并不會太大,而一般情況下,Web系統(tǒng)的CPU都是處于欠飽和狀態(tài)。同時,由于校園網(wǎng)內(nèi)網(wǎng)因素,千兆網(wǎng)卡及學生規(guī)模,網(wǎng)絡IO也不會很容易出現(xiàn)問題。但是由于選課業(yè)務會頻繁觸發(fā),每一個請求實際上都是一次與數(shù)據(jù)庫的交互,進一步講就是磁盤的IO操作,磁盤IO實際上也往往是大多數(shù)應用場景的瓶頸所在。另外,每一次請求都會消耗內(nèi)存,大量的請求同時發(fā)出,內(nèi)存已經(jīng)不堪重負,而磁盤IO的瓶頸,所有處理被延時,導致內(nèi)存出現(xiàn)更大的壓力直至內(nèi)存溢出。因此,本文設計的系統(tǒng)主要解決以下2個問題。
大量的并發(fā)請求單機服務器本身并不能完全處理。對于選課系統(tǒng)的特殊性,每年只有2個選課峰值時段,其他時段并沒有多少流量,因此也沒有必要通過擴張硬件來解決。因此,通過設計一個軟件模塊來解決該問題是最好的方案。對于選課業(yè)務來講,本身業(yè)務請求的總量并不多,按照1萬個學生,每人10次PV(Page View)來算,總共是10萬次PV,請求總量并不大,但是這10萬次PV要是發(fā)生在1 min內(nèi),每秒1 666次PV,對于單機服務器來講自然是一個很大的規(guī)模。但是考慮到將這些請求放在10 min內(nèi)完成,那么每秒166次PV,完全是可行的。因此,設計出排隊模塊,每個用戶發(fā)出請求后會返回之前排隊的請求個數(shù)及等待時間,排隊期間不允許刷新頁面,否則會重新排隊。這樣一來,把1 min的請求峰值平均到10 min或者更久來解決這類問題。
磁盤IO在高負荷下運作時,會導致數(shù)據(jù)庫的工作性能急劇下降。因此,考慮如何減少選課業(yè)務本身造成的數(shù)據(jù)庫讀寫,將是解決問題的關(guān)鍵。對于每一個學生來講,其所關(guān)心的就是可選的課程有哪些,每一門課程的老師是誰,以及當前選了多少人。實際上,對于每一個學生來講,在查看公共課程選取狀態(tài)時,在沒有人確定觸發(fā)選課前,每個人得到的結(jié)果都是一樣的,如果我們將這部分信息放在內(nèi)存中,不進行磁盤IO操作,那么必然會大大提高性能。另外,學生發(fā)出的請求主要是反復讀取課程數(shù)據(jù)及選課數(shù)據(jù),并不會頻繁寫入,寫入操作我們交給關(guān)系型數(shù)據(jù)庫Mysql。我們引入Redis高性能內(nèi)存數(shù)據(jù)庫,它是一個key-value存儲系統(tǒng),我們設計每個課程名字作為key,課程選擇的結(jié)果作為value。用戶發(fā)出讀寫的請求都經(jīng)過Redis,并且由Redis自身的機制來保證線程安全。
本文設計的選課系統(tǒng)結(jié)構(gòu)為Html+Tomcat+Servlet+ Mysql+Redis,運行在4核CPU、16G內(nèi)存的服務器上,用apache-ab工具來進行壓力測試,用命令ab-n 10000-c 300 http://localhost/index.html,總共訪問http://localhost/index.html這個頁面10 000次,300次并發(fā)同時執(zhí)行,請求通過率為98.2%.可見,本文提出的方法是可行并且有效的。
本文設計了一個高校學生選課的Web系統(tǒng),詳細分析了該系統(tǒng)當前存在的問題,并提出了通過排隊系統(tǒng)來解決單位時間內(nèi)大量請求可能出現(xiàn)的并發(fā)問題,通過延長請求處理周期,保證了服務器能夠正常、穩(wěn)定運行。同時,引入Redis緩存服務技術(shù),用來減少磁盤的IO操作,從而大大縮減請求時間,提高了用戶體驗。通過仿真可見,該設計方案是十分有效的,并且這種通過增加軟件模塊,而不增加硬件設備成本的設計方案是非常值得推薦的。
[1]葉飛.Internet網(wǎng)絡選課系統(tǒng)設計與實現(xiàn)[J].沈陽師范大學學報(自然科學版),2004,22(4).
[2]宣華,王映雪.清華大學綜合教務系統(tǒng)在教務管理中的應用[J].計算機工程與應用,2002,38(12).
[3]李帥,黃克敏,楊義,等.高校學生選課系統(tǒng)的研究與設計[J].電腦知識與技術(shù),2017(9).
[4]范會聯(lián),張玉芳.基于JSF+Spring+Hibernate集成架構(gòu)的Web信息系統(tǒng)設計[J].計算機技術(shù)與發(fā)展,2007,17(3).
[5]潘旭武,陳啟華,張建勇.高校選課系統(tǒng)性能優(yōu)化研究[J].中國教育信息化,2013(5).
[6]文捷,吳慶杰,陳翼,等.復旦大學選課系統(tǒng)的性能優(yōu)化策略研究和實踐[J].中山大學學報(自然科學版),2009,48(s1).
〔編輯:劉曉芳〕
G647;TP311.52
:A
10.15913/j.cnki.kjycx.2017.16.127
2095-6835(2017)16-0127-02
許雯(1988—),女,陜西乾縣人,碩士,研究方向為計算機圖形學。