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