



摘? 要:隨著Web技術的飛速發展,考試方式逐漸向在線考試方向傾斜,其間所面臨的高并發處理情況越來越多。文章研究了常見的高并發處理技術,探索采用Node.js技術處理高并發請求的在線考試系統。該系統采用B/S架構,融合了Node.js、Redis、mongodb等技術,可以滿足高并發請求。其已成功應用于近幾年廣西教育廳的高校網絡知識競賽中,滿足了面向全區高校學生開展網絡知識競賽的需求,提高了主管部門和學校統計分析的效率,得到主管部門和參賽學校的一致好評。
關鍵詞:在線考試系統;Node.js;高并發處理模式
中圖分類號:TP311? ? ? ?文獻標識碼:A文章編號:2096-4706(2022)03-0018-04
Design and Implementation of Online Exam System Based on High-Concurrency Processing Mode
WANG Ling
(School of Artificial Intelligence, Nanning College for Vocational Technology, Nanning? 530008, China)
Abstract: With the rapid development of the Web technology, the examination method has gradually turned to the direction of online examination, and there are more and more situations of high-concurrency processing. This paper studies common high-concurrency processing technologies, and explores an online exam system that uses Node.js technology to process high-concurrency requests. The system uses B/S architecture and integrates technologies such as Node.js, Redis, and mongodb to meet high-concurrency requests. It has been successfully applied in the college network knowledge competition held by the Guangxi Department of Education in recent years, which meets the needs of network knowledge competition for college students in the whole region, improves the efficiency of statistical analysis of competent departments and schools, and has been highly praised by the competent departments and participating schools.
Keyword: online exam system; Node.js; high-concurrency processing mode
0? 引? 言
隨著Web技術的迅速發展,多媒體資源、互聯網、5G、融媒體技術等新興科技陸續應用于教育教學之中,隨之涌現出不少新的教學應用。
在教育教學中,考試是評估教學質量的重要手段,考試結果可以反映學生對知識的掌握程度,方便學生查漏補缺。同時也能幫助教師了解學生情況,以便及時調整教學進度。采用紙質考試,教師需要耗費大量的時間對試卷進行批改,統計成績。特別是大型考試的時候,人力資源的消耗就越發明顯。因此,開發一個可在互聯網上開展在線考試的系統是一個極富價值的研究課題。
隨著5G等新一代通信技術的不斷發展,Web應用系統服務的用戶也越來越多,其面臨著高用戶并發量的問題,同時要求其能安全存儲大量的用戶數據。本文的應用場景是面向全區高校在校生開展的在線知識競賽,有近70萬的考生,會面臨高并發的用戶請求。因此在面臨高并發用戶訪問量的情況下,如何確保在線考試平臺能夠穩定高效運行是一個值得深入研究和探討的課題。
1? Node.js技術基礎
Node.js是當下最流行的服務器端技術之一。Node.js是一個基于Chrome V8引擎的JavaScript運行環境。Node.js運用了一個事件驅動、異步I/O的模型,使其輕量又高效。相較于常見的Apache等HTTP服務器,異步I/O模式可以極大地提高并發性能。
1.1? 異步非阻塞I/O模型
消息通信機制是異步I/O與同步I/O最主要的區別。在同步模型下,消息的發送方等待消息的接受方進行處理。而異步模型是指由消息發送方通知消息接受方,然后“調用”就返回了,待消息接受方處理完后會通知消息發送方。通常,Web服務器采用的是同步調用模式,在大量用戶并發訪問下,Web服務器需要啟動大量線程,由于線程會搶占資源,造成線程阻塞。阻塞線程的頻繁切換會給CPU造成極大的資源浪費。因此,Node.js的異步非阻塞模式能夠有效實現多用戶的并發,有效避免線程阻塞和線程切換的開銷。
1.2? 事件驅動模型
Node.js采用的是事件驅動模型,Node.js所實現的庫函數API都是采用事件異步調用的方式。服務器的磁盤I/O、數據庫查詢、網絡通信、客戶端的請求均采用非阻塞的方法,提交的請求會被壓入事件處理隊列,返回的結果由事件處理隊列循環處理。Node.js在某一時刻只處理一個事件,完成該事件后再進入事件處理隊列處理后續的事件。這樣可以保證CPU和內存每次都集中處理一個事件,而耗時的磁盤I/O操作沒有進行阻塞,就可以盡可能地并行操作。
1.3? 單線程模型
Node.js采用單線程模型,單線程可以避免多線程編程需要處理事件狀態之間的同步問題,所有的狀態變化都在單一線程中處理,不會出現狀態死鎖,同時也避免了不同線程之間切換帶來的資源消耗。但是單線程模式也存在著缺點:首先,單線程每次只能使用多核CPU中的一個獨立核心,不能發揮多核CPU的優勢;其次,單線程在產生異常而程序未能捕獲這個異常的情況下,會導致整個應用程序的退出。因此,我們要在系統設計上,實現Node多核服務器,要做好線程的調度和健壯性處理。
2? Web高并發處理模式研究
本文研究的在線考試系統,主要是滿足在某個時間段面向全區高校近70萬在校生開展在線考試的需求。這就存在用戶訪問量巨大的問題,峰值可能達到3000在線人數。為此需要設計能夠應對高用戶負載量的高并發處理機制,同時具有良好的擴展性,方便維護,從而應對在線考試系統實現的難點問題。
2.1? 高并發處理的策略
根據系統遇到的高并發處理的問題關鍵點,從服務器規劃、系統設計、數據庫選擇、緩存設計等方面進行規劃:
(1)搭建服務器集群。使用負載均衡服務器,設計資源均衡分配的算法,將用戶請求分配至服務器集群中不同的服務器,保證集群中的每一個服務器都能得到最大限度的利用,實現最佳性能。
(2)前后端分離。核心處理模塊遵循前后端完全分離的原則,前后端均使用JavaScript實現,將JavaScript語言的異步回調等優勢與nodsjs服務器的優勢完美結合。
(3)采用MongoDB數據庫。MongoDB數據庫采用靈活的設計思路,有助于數據庫的設計實現,同時讀寫速度快。
(4)增加Redis緩存。通過設置緩存層,將訪問率高、實時變化不大的數據放入Redis緩存層,提高系統的響應速度。
2.2? 高并發處理的思路
本文提出的基于Node.js的高并發處理模式,主要目的是解決在線考試系統的高并發問題。針對使用系統的用戶越來越多,如何有效提高系統的響應以及保證系統的擴展便捷是我們亟須解決的關鍵問題。
根據之前高并發處理的策略,系統將從服務器規劃、系統設計、數據庫選擇、緩存設計等方面提出解決方案:
(1)建立Nginx負載均衡服務器,將用戶請求按照負載均衡的模式分配至服務器集群中的服務器,保證服務器集群中服務器的平均利用率得到提升。目前Nginx支持6種方式的負載均衡策略:輪詢(默認方式)、ip_hash(根據IP分配方式)、weight(根據權重方式)、fair(根據第三方的響應時間方式)、url_hash(根據第三方的依據URL分配方式)、least_conn(最少連接方式)。本文采用根據IP分配方式,讓負載均衡器按照請求端的IP進行服務器分配。session不能存儲在不同的服務器上,因此采用根據IP分配方式保證同一的客戶端請求都發送到同一的服務器,這樣每個訪客都固定訪問一個后端服務器,可以使session會話能夠在同一服務器上留存。
(2)在服務器處理端,通過Node多核服務器高效利用多核CPU的性能,提高系統CPU利用率,提升系統應對高并發的能力。目前常見的Node多核服務器有搶占式、主從式、輪詢式等解決方案。本文采用輪詢式的解決方案,通過輪詢的方式使得每個核心都能得到有效的利用。
(3)在服務器處理前端增加Redis緩存,將訪問率高的數據存放在Redis緩存,定時更新緩存區的內容,讓請求優先從緩存中讀取數據,提高用戶的訪問速度。常用的數據緩存技術有Redis和Memcached,Redis基于內存采用key-value的方式進行存儲,是非關系型數據庫。本文采用Redis內存數據庫來解決數據緩存的問題。
(4)數據存儲選用面向文檔型數據庫MongoDB(不采用傳統的MySQL關系型數據庫)。系統建立MongoDB的RepSet(副本集),開展實時熱備份,可以提高數據的可靠性和容錯能力,使得在線考試系統更加穩定可靠。軟件開發中用到的數據庫主要有關系型數據庫sqlserver、MySQL和非關系型數據庫MongoDB。本文之所以采用MongoDB,是因為它易于擴展,在高并發情況下讀寫速度優于MySQL。
(5)在系統的核心處理模塊部分,基于前后端完全分離的原則,以提高系統的可維護性。將前端UI界面與后端服務數據分離,可以將后端服務接口獨立出來,服務于不同的前端UI(比如傳統PC桌面、移動端H5、APP等),提高了后端服務的可復用性和可維護性,同時也有利于向分布式微服務架構演變。
通過上述解決方案,使各個模塊協同合作,能有效提升在線考試系統的高并發處理能力,保證系統高效可靠地運轉。
3? 系統設計與實現
3.1? 系統結構總體設計
系統采用主動MVC架構前后端分離,前端使用MVVM架構的Vue,服務端包括Node.js和MongoDB數據庫,整體遵循MVC模式。
在線考試系統包括試題管理、試卷管理、成績統計、學生管理、教師信息管理等模塊。在線考試系統擁有學生、教師、學校和管理員參與者。在線考試系統具體的功能用例如圖1所示。學生部分包括學生登錄、進行考試、成績查詢等功能。學校部分包括學生信息管理、成績信息統計等功能。管理員部分包括系統環境配置、用戶信息管理、試卷管理、考試管理、試題管理等模塊。
3.2? 系統需求分析
根據系統功能和用戶權限,在線考試系統的用戶分為管理員、學校和考生三種角色。根據需求分析,在線考試系統需要實現以下功能。
(1)試題管理功能。表現為題庫的基本管理,包括增加、刪除、查詢和修改試題,以及試題導入功能,能夠將試題以Excel格式導入系統。
(2)組卷功能。提供試卷自動生成功能,能夠以組卷策略的方式為考生提供試卷,系統可根據題量、題型、難度級別以及總分等組卷相關約束條件,自動生成若干試卷供學生隨機抽取測試。
(3)在線考試功能。包括根據場次提供考試服務、考生登錄、顯示考試狀態、存儲答案、提交試卷和自動評定成績等功能。
(4)學校統計功能。學校統計考試人數、未考試人數,各二級學院、專業考試情況、成績情況等,提供成績導出功能,能夠將指定條件的成績以Excel格式導出。
3.3? 系統實現
3.3.1? 負載均衡實現
本平臺采用Nginx進行負載均衡。Nginx是由俄羅斯人開發的Web服務器,但也常用來做反向代理服務器。我們在做負載均衡策略分析時,為了保存session信息,采用基于IP路由負載的方式。具體的Nginx配置代碼為:
upstream? ServerPolling{
ip_hash;
server 1; //后端服務器1
server 2; //后端服務器2
server 3; //后端服務器3
}
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://ServerPolling;
index index.html index.htm;
}
}
3.3.2? Redis緩存層實現
根據在線考試系統的具體需求,我們將試卷表和考生考試信息表放入Redis緩存層。例如,我們將考生考試信息中的考生id、考生答題數據、開始考試時間等放入Redis緩存層。考生的id對應key,考生答題數據和開始考試時間等存儲在key對應的value中。考生在開始考試時,在Redis中創建新的key-value對。考生在選擇每一個考題答案的時候,系統就根據對應考生id修改value里的考題答案,答題過程數據均存儲在緩存層,提高了系統的處理速度。value還存儲考生開始考試時間,用于校驗考試到達時間直接交卷的處理。考試結束后,系統將緩存層的數據寫入后端數據庫,從緩存層中刪除key-value對。Redis緩存層處理過程如圖2所示。
4? 系統測試
本文選用性能測試工具LoadRunner對在線考試系統進行性能測試,模擬學生登錄、提交答案等場景,測試環境為搭建的三臺服務器集群,按照3 000人的并發量進行性能測試。系統測試環境配置如表1所示。
從表2的測試結果可以看出,常見的操作均在毫秒級以下,CPU負載、吞吐量也有不錯的表現,考試系統平臺具有較好的承載高并發的能力,可以達到預期的效果。由此可見,Node.js的異步非阻塞I/O、事件驅動模式的特點,可以有效解決高并發問題。結合傳統解決高并發的方法,構建nginx的服務器集群,設計Node.js的高并發處理模式,并在此基礎上實現在線考試系統平臺,經過實踐證明這種方式的效果很明顯。
5? 結? 論
本文采用Node.js、Redis、mongodb等技術構建了可處理高并發請求的在線考試系統,在實際使用中取得良好的效果。隨著5G等移動互聯網技術的發展,在后續的研究中,可開展在移動互聯網環境下提升在線考試系統的高并發處理的研究,確保滿足在線考試的未來需求。
參考文獻:
[1] 徐浪.基于Node.js的Web應用框架研究與實現 [D].馬鞍山:安徽工業大學,2019.
[2] 邢宇明,陳勇,吳勃英.高校在線考試系統的優化方案設計 [J].大學數學,2020,36(3):35-39.
[3] 陳海郎.基于SSM框架的試題庫與考試系統設計與實現 [J].電子技術與軟件工程,2019(16):50-51.
[4] 陳榮鑫.基于NodeJS+Express框架的學院會議室預定系統設計與開發 [J].信息與電腦(理論版),2021,33(2):95-97.
[5] 張貴強,王美玲.基于NodeJS的企業網站的設計與實現 [J].信息技術與信息化,2019(12):58-60.
作者簡介:王玲(1980.12—),女,漢族,黑龍江肇州人,信息系統項目管理師,本科,研究方向:計算機網絡。