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