• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      基于高并發(fā)處理模式的在線考試系統(tǒng)設(shè)計與實現(xiàn)

      2022-07-06 14:23:41王玲
      現(xiàn)代信息科技 2022年3期

      摘? 要:隨著Web技術(shù)的飛速發(fā)展,考試方式逐漸向在線考試方向傾斜,其間所面臨的高并發(fā)處理情況越來越多。文章研究了常見的高并發(fā)處理技術(shù),探索采用Node.js技術(shù)處理高并發(fā)請求的在線考試系統(tǒng)。該系統(tǒng)采用B/S架構(gòu),融合了Node.js、Redis、mongodb等技術(shù),可以滿足高并發(fā)請求。其已成功應(yīng)用于近幾年廣西教育廳的高校網(wǎng)絡(luò)知識競賽中,滿足了面向全區(qū)高校學(xué)生開展網(wǎng)絡(luò)知識競賽的需求,提高了主管部門和學(xué)校統(tǒng)計分析的效率,得到主管部門和參賽學(xué)校的一致好評。

      關(guān)鍵詞:在線考試系統(tǒng);Node.js;高并發(fā)處理模式

      中圖分類號:TP311? ? ? ?文獻(xiàn)標(biāo)識碼: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技術(shù)的迅速發(fā)展,多媒體資源、互聯(lián)網(wǎng)、5G、融媒體技術(shù)等新興科技陸續(xù)應(yīng)用于教育教學(xué)之中,隨之涌現(xiàn)出不少新的教學(xué)應(yīng)用。

      在教育教學(xué)中,考試是評估教學(xué)質(zhì)量的重要手段,考試結(jié)果可以反映學(xué)生對知識的掌握程度,方便學(xué)生查漏補(bǔ)缺。同時也能幫助教師了解學(xué)生情況,以便及時調(diào)整教學(xué)進(jìn)度。采用紙質(zhì)考試,教師需要耗費大量的時間對試卷進(jìn)行批改,統(tǒng)計成績。特別是大型考試的時候,人力資源的消耗就越發(fā)明顯。因此,開發(fā)一個可在互聯(lián)網(wǎng)上開展在線考試的系統(tǒng)是一個極富價值的研究課題。

      隨著5G等新一代通信技術(shù)的不斷發(fā)展,Web應(yīng)用系統(tǒng)服務(wù)的用戶也越來越多,其面臨著高用戶并發(fā)量的問題,同時要求其能安全存儲大量的用戶數(shù)據(jù)。本文的應(yīng)用場景是面向全區(qū)高校在校生開展的在線知識競賽,有近70萬的考生,會面臨高并發(fā)的用戶請求。因此在面臨高并發(fā)用戶訪問量的情況下,如何確保在線考試平臺能夠穩(wěn)定高效運行是一個值得深入研究和探討的課題。

      1? Node.js技術(shù)基礎(chǔ)

      Node.js是當(dāng)下最流行的服務(wù)器端技術(shù)之一。Node.js是一個基于Chrome V8引擎的JavaScript運行環(huán)境。Node.js運用了一個事件驅(qū)動、異步I/O的模型,使其輕量又高效。相較于常見的Apache等HTTP服務(wù)器,異步I/O模式可以極大地提高并發(fā)性能。

      1.1? 異步非阻塞I/O模型

      消息通信機(jī)制是異步I/O與同步I/O最主要的區(qū)別。在同步模型下,消息的發(fā)送方等待消息的接受方進(jìn)行處理。而異步模型是指由消息發(fā)送方通知消息接受方,然后“調(diào)用”就返回了,待消息接受方處理完后會通知消息發(fā)送方。通常,Web服務(wù)器采用的是同步調(diào)用模式,在大量用戶并發(fā)訪問下,Web服務(wù)器需要啟動大量線程,由于線程會搶占資源,造成線程阻塞。阻塞線程的頻繁切換會給CPU造成極大的資源浪費。因此,Node.js的異步非阻塞模式能夠有效實現(xiàn)多用戶的并發(fā),有效避免線程阻塞和線程切換的開銷。

      1.2? 事件驅(qū)動模型

      Node.js采用的是事件驅(qū)動模型,Node.js所實現(xiàn)的庫函數(shù)API都是采用事件異步調(diào)用的方式。服務(wù)器的磁盤I/O、數(shù)據(jù)庫查詢、網(wǎng)絡(luò)通信、客戶端的請求均采用非阻塞的方法,提交的請求會被壓入事件處理隊列,返回的結(jié)果由事件處理隊列循環(huán)處理。Node.js在某一時刻只處理一個事件,完成該事件后再進(jìn)入事件處理隊列處理后續(xù)的事件。這樣可以保證CPU和內(nèi)存每次都集中處理一個事件,而耗時的磁盤I/O操作沒有進(jìn)行阻塞,就可以盡可能地并行操作。

      1.3? 單線程模型

      Node.js采用單線程模型,單線程可以避免多線程編程需要處理事件狀態(tài)之間的同步問題,所有的狀態(tài)變化都在單一線程中處理,不會出現(xiàn)狀態(tài)死鎖,同時也避免了不同線程之間切換帶來的資源消耗。但是單線程模式也存在著缺點:首先,單線程每次只能使用多核CPU中的一個獨立核心,不能發(fā)揮多核CPU的優(yōu)勢;其次,單線程在產(chǎn)生異常而程序未能捕獲這個異常的情況下,會導(dǎo)致整個應(yīng)用程序的退出。因此,我們要在系統(tǒng)設(shè)計上,實現(xiàn)Node多核服務(wù)器,要做好線程的調(diào)度和健壯性處理。

      2? Web高并發(fā)處理模式研究

      本文研究的在線考試系統(tǒng),主要是滿足在某個時間段面向全區(qū)高校近70萬在校生開展在線考試的需求。這就存在用戶訪問量巨大的問題,峰值可能達(dá)到3000在線人數(shù)。為此需要設(shè)計能夠應(yīng)對高用戶負(fù)載量的高并發(fā)處理機(jī)制,同時具有良好的擴(kuò)展性,方便維護(hù),從而應(yīng)對在線考試系統(tǒng)實現(xiàn)的難點問題。

      2.1? 高并發(fā)處理的策略

      根據(jù)系統(tǒng)遇到的高并發(fā)處理的問題關(guān)鍵點,從服務(wù)器規(guī)劃、系統(tǒng)設(shè)計、數(shù)據(jù)庫選擇、緩存設(shè)計等方面進(jìn)行規(guī)劃:

      (1)搭建服務(wù)器集群。使用負(fù)載均衡服務(wù)器,設(shè)計資源均衡分配的算法,將用戶請求分配至服務(wù)器集群中不同的服務(wù)器,保證集群中的每一個服務(wù)器都能得到最大限度的利用,實現(xiàn)最佳性能。

      (2)前后端分離。核心處理模塊遵循前后端完全分離的原則,前后端均使用JavaScript實現(xiàn),將JavaScript語言的異步回調(diào)等優(yōu)勢與nodsjs服務(wù)器的優(yōu)勢完美結(jié)合。

      (3)采用MongoDB數(shù)據(jù)庫。MongoDB數(shù)據(jù)庫采用靈活的設(shè)計思路,有助于數(shù)據(jù)庫的設(shè)計實現(xiàn),同時讀寫速度快。

      (4)增加Redis緩存。通過設(shè)置緩存層,將訪問率高、實時變化不大的數(shù)據(jù)放入Redis緩存層,提高系統(tǒng)的響應(yīng)速度。

      2.2? 高并發(fā)處理的思路

      本文提出的基于Node.js的高并發(fā)處理模式,主要目的是解決在線考試系統(tǒng)的高并發(fā)問題。針對使用系統(tǒng)的用戶越來越多,如何有效提高系統(tǒng)的響應(yīng)以及保證系統(tǒng)的擴(kuò)展便捷是我們亟須解決的關(guān)鍵問題。

      根據(jù)之前高并發(fā)處理的策略,系統(tǒng)將從服務(wù)器規(guī)劃、系統(tǒng)設(shè)計、數(shù)據(jù)庫選擇、緩存設(shè)計等方面提出解決方案:

      (1)建立Nginx負(fù)載均衡服務(wù)器,將用戶請求按照負(fù)載均衡的模式分配至服務(wù)器集群中的服務(wù)器,保證服務(wù)器集群中服務(wù)器的平均利用率得到提升。目前Nginx支持6種方式的負(fù)載均衡策略:輪詢(默認(rèn)方式)、ip_hash(根據(jù)IP分配方式)、weight(根據(jù)權(quán)重方式)、fair(根據(jù)第三方的響應(yīng)時間方式)、url_hash(根據(jù)第三方的依據(jù)URL分配方式)、least_conn(最少連接方式)。本文采用根據(jù)IP分配方式,讓負(fù)載均衡器按照請求端的IP進(jìn)行服務(wù)器分配。session不能存儲在不同的服務(wù)器上,因此采用根據(jù)IP分配方式保證同一的客戶端請求都發(fā)送到同一的服務(wù)器,這樣每個訪客都固定訪問一個后端服務(wù)器,可以使session會話能夠在同一服務(wù)器上留存。

      (2)在服務(wù)器處理端,通過Node多核服務(wù)器高效利用多核CPU的性能,提高系統(tǒng)CPU利用率,提升系統(tǒng)應(yīng)對高并發(fā)的能力。目前常見的Node多核服務(wù)器有搶占式、主從式、輪詢式等解決方案。本文采用輪詢式的解決方案,通過輪詢的方式使得每個核心都能得到有效的利用。

      (3)在服務(wù)器處理前端增加Redis緩存,將訪問率高的數(shù)據(jù)存放在Redis緩存,定時更新緩存區(qū)的內(nèi)容,讓請求優(yōu)先從緩存中讀取數(shù)據(jù),提高用戶的訪問速度。常用的數(shù)據(jù)緩存技術(shù)有Redis和Memcached,Redis基于內(nèi)存采用key-value的方式進(jìn)行存儲,是非關(guān)系型數(shù)據(jù)庫。本文采用Redis內(nèi)存數(shù)據(jù)庫來解決數(shù)據(jù)緩存的問題。

      (4)數(shù)據(jù)存儲選用面向文檔型數(shù)據(jù)庫MongoDB(不采用傳統(tǒng)的MySQL關(guān)系型數(shù)據(jù)庫)。系統(tǒng)建立MongoDB的RepSet(副本集),開展實時熱備份,可以提高數(shù)據(jù)的可靠性和容錯能力,使得在線考試系統(tǒng)更加穩(wěn)定可靠。軟件開發(fā)中用到的數(shù)據(jù)庫主要有關(guān)系型數(shù)據(jù)庫sqlserver、MySQL和非關(guān)系型數(shù)據(jù)庫MongoDB。本文之所以采用MongoDB,是因為它易于擴(kuò)展,在高并發(fā)情況下讀寫速度優(yōu)于MySQL。

      (5)在系統(tǒng)的核心處理模塊部分,基于前后端完全分離的原則,以提高系統(tǒng)的可維護(hù)性。將前端UI界面與后端服務(wù)數(shù)據(jù)分離,可以將后端服務(wù)接口獨立出來,服務(wù)于不同的前端UI(比如傳統(tǒng)PC桌面、移動端H5、APP等),提高了后端服務(wù)的可復(fù)用性和可維護(hù)性,同時也有利于向分布式微服務(wù)架構(gòu)演變。

      通過上述解決方案,使各個模塊協(xié)同合作,能有效提升在線考試系統(tǒng)的高并發(fā)處理能力,保證系統(tǒng)高效可靠地運轉(zhuǎn)。

      3? 系統(tǒng)設(shè)計與實現(xiàn)

      3.1? 系統(tǒng)結(jié)構(gòu)總體設(shè)計

      系統(tǒng)采用主動MVC架構(gòu)前后端分離,前端使用MVVM架構(gòu)的Vue,服務(wù)端包括Node.js和MongoDB數(shù)據(jù)庫,整體遵循MVC模式。

      在線考試系統(tǒng)包括試題管理、試卷管理、成績統(tǒng)計、學(xué)生管理、教師信息管理等模塊。在線考試系統(tǒng)擁有學(xué)生、教師、學(xué)校和管理員參與者。在線考試系統(tǒng)具體的功能用例如圖1所示。學(xué)生部分包括學(xué)生登錄、進(jìn)行考試、成績查詢等功能。學(xué)校部分包括學(xué)生信息管理、成績信息統(tǒng)計等功能。管理員部分包括系統(tǒng)環(huán)境配置、用戶信息管理、試卷管理、考試管理、試題管理等模塊。

      3.2? 系統(tǒng)需求分析

      根據(jù)系統(tǒng)功能和用戶權(quán)限,在線考試系統(tǒng)的用戶分為管理員、學(xué)校和考生三種角色。根據(jù)需求分析,在線考試系統(tǒng)需要實現(xiàn)以下功能。

      (1)試題管理功能。表現(xiàn)為題庫的基本管理,包括增加、刪除、查詢和修改試題,以及試題導(dǎo)入功能,能夠?qū)⒃囶}以Excel格式導(dǎo)入系統(tǒng)。

      (2)組卷功能。提供試卷自動生成功能,能夠以組卷策略的方式為考生提供試卷,系統(tǒng)可根據(jù)題量、題型、難度級別以及總分等組卷相關(guān)約束條件,自動生成若干試卷供學(xué)生隨機(jī)抽取測試。

      (3)在線考試功能。包括根據(jù)場次提供考試服務(wù)、考生登錄、顯示考試狀態(tài)、存儲答案、提交試卷和自動評定成績等功能。

      (4)學(xué)校統(tǒng)計功能。學(xué)校統(tǒng)計考試人數(shù)、未考試人數(shù),各二級學(xué)院、專業(yè)考試情況、成績情況等,提供成績導(dǎo)出功能,能夠?qū)⒅付l件的成績以Excel格式導(dǎo)出。

      3.3? 系統(tǒng)實現(xiàn)

      3.3.1? 負(fù)載均衡實現(xiàn)

      本平臺采用Nginx進(jìn)行負(fù)載均衡。Nginx是由俄羅斯人開發(fā)的Web服務(wù)器,但也常用來做反向代理服務(wù)器。我們在做負(fù)載均衡策略分析時,為了保存session信息,采用基于IP路由負(fù)載的方式。具體的Nginx配置代碼為:

      upstream? ServerPolling{

      ip_hash;

      server 1; //后端服務(wù)器1

      server 2; //后端服務(wù)器2

      server 3; //后端服務(wù)器3

      }

      server {

      listen 80;

      server_name localhost;

      location / {

      proxy_pass http://ServerPolling;

      index index.html index.htm;

      }

      }

      3.3.2? Redis緩存層實現(xiàn)

      根據(jù)在線考試系統(tǒng)的具體需求,我們將試卷表和考生考試信息表放入Redis緩存層。例如,我們將考生考試信息中的考生id、考生答題數(shù)據(jù)、開始考試時間等放入Redis緩存層??忌膇d對應(yīng)key,考生答題數(shù)據(jù)和開始考試時間等存儲在key對應(yīng)的value中。考生在開始考試時,在Redis中創(chuàng)建新的key-value對??忌谶x擇每一個考題答案的時候,系統(tǒng)就根據(jù)對應(yīng)考生id修改value里的考題答案,答題過程數(shù)據(jù)均存儲在緩存層,提高了系統(tǒng)的處理速度。value還存儲考生開始考試時間,用于校驗考試到達(dá)時間直接交卷的處理??荚嚱Y(jié)束后,系統(tǒng)將緩存層的數(shù)據(jù)寫入后端數(shù)據(jù)庫,從緩存層中刪除key-value對。Redis緩存層處理過程如圖2所示。

      4? 系統(tǒng)測試

      本文選用性能測試工具LoadRunner對在線考試系統(tǒng)進(jìn)行性能測試,模擬學(xué)生登錄、提交答案等場景,測試環(huán)境為搭建的三臺服務(wù)器集群,按照3 000人的并發(fā)量進(jìn)行性能測試。系統(tǒng)測試環(huán)境配置如表1所示。

      從表2的測試結(jié)果可以看出,常見的操作均在毫秒級以下,CPU負(fù)載、吞吐量也有不錯的表現(xiàn),考試系統(tǒng)平臺具有較好的承載高并發(fā)的能力,可以達(dá)到預(yù)期的效果。由此可見,Node.js的異步非阻塞I/O、事件驅(qū)動模式的特點,可以有效解決高并發(fā)問題。結(jié)合傳統(tǒng)解決高并發(fā)的方法,構(gòu)建nginx的服務(wù)器集群,設(shè)計Node.js的高并發(fā)處理模式,并在此基礎(chǔ)上實現(xiàn)在線考試系統(tǒng)平臺,經(jīng)過實踐證明這種方式的效果很明顯。

      5? 結(jié)? 論

      本文采用Node.js、Redis、mongodb等技術(shù)構(gòu)建了可處理高并發(fā)請求的在線考試系統(tǒng),在實際使用中取得良好的效果。隨著5G等移動互聯(lián)網(wǎng)技術(shù)的發(fā)展,在后續(xù)的研究中,可開展在移動互聯(lián)網(wǎng)環(huán)境下提升在線考試系統(tǒng)的高并發(fā)處理的研究,確保滿足在線考試的未來需求。

      參考文獻(xiàn):

      [1] 徐浪.基于Node.js的Web應(yīng)用框架研究與實現(xiàn) [D].馬鞍山:安徽工業(yè)大學(xué),2019.

      [2] 邢宇明,陳勇,吳勃英.高校在線考試系統(tǒng)的優(yōu)化方案設(shè)計 [J].大學(xué)數(shù)學(xué),2020,36(3):35-39.

      [3] 陳海郎.基于SSM框架的試題庫與考試系統(tǒng)設(shè)計與實現(xiàn) [J].電子技術(shù)與軟件工程,2019(16):50-51.

      [4] 陳榮鑫.基于NodeJS+Express框架的學(xué)院會議室預(yù)定系統(tǒng)設(shè)計與開發(fā) [J].信息與電腦(理論版),2021,33(2):95-97.

      [5] 張貴強(qiáng),王美玲.基于NodeJS的企業(yè)網(wǎng)站的設(shè)計與實現(xiàn) [J].信息技術(shù)與信息化,2019(12):58-60.

      作者簡介:王玲(1980.12—),女,漢族,黑龍江肇州人,信息系統(tǒng)項目管理師,本科,研究方向:計算機(jī)網(wǎng)絡(luò)。

      闽清县| 广宁县| 新巴尔虎右旗| 抚松县| 彭山县| 乐陵市| 苏尼特右旗| 平陆县| 绥阳县| 兴仁县| 周口市| 平乡县| 丹巴县| 浦江县| 香格里拉县| 平和县| 日土县| 平定县| 化州市| 门源| 富川| 浦城县| 芦山县| 山丹县| 宁武县| 即墨市| 布拖县| 商洛市| 磴口县| 巴东县| 小金县| 合水县| 汽车| 左权县| 汾西县| 舒兰市| 七台河市| 榆中县| 盐池县| 山阳县| 南皮县|