徐曉鶴(山東鋼鐵股份有限公司萊蕪分公司自動化部,山東 萊蕪 271104)
基于B/S的網(wǎng)上考試系統(tǒng)高并發(fā)性能優(yōu)化研究與應(yīng)用
徐曉鶴
(山東鋼鐵股份有限公司萊蕪分公司自動化部,山東 萊蕪 271104)
摘 要:網(wǎng)上考試系統(tǒng)隨著網(wǎng)絡(luò)信息技術(shù)的發(fā)展不斷得到推廣應(yīng)用。隨著應(yīng)用對象、考試規(guī)模的不斷擴大,高并發(fā)高數(shù)據(jù)量成為網(wǎng)上考試系統(tǒng)性能提升的瓶頸。該文結(jié)合萊鋼網(wǎng)上考試系統(tǒng)的系統(tǒng)設(shè)計與應(yīng)用實踐,分析了系統(tǒng)在高并發(fā)應(yīng)用條件下的瓶頸,并給出了解決方案。
關(guān)鍵詞:network exam;high—concurrency;研究應(yīng)
網(wǎng)上考試是延伸了傳統(tǒng)考試考場的涵義,它利用網(wǎng)絡(luò)的無限廣闊空間,把考場從學(xué)校延伸到了家中、計算機房、辦公室及其它任何網(wǎng)絡(luò)所覆蓋的區(qū)域,并可隨時對考生進行考試,加上數(shù)據(jù)庫技術(shù)的利用,使考試變得更公平公正、更具權(quán)威性和可靠性。與傳統(tǒng)考試方式相比,計算機網(wǎng)絡(luò)考試可以突破地域限制、實現(xiàn)自動控制、自動閱卷評分等特性,大大節(jié)約人力、財務(wù)、物力。由丁B/S模式具有客戶端無需配置、開發(fā)效率高、易于管理和維護等特點,基于B/S模式的網(wǎng)絡(luò)考試系統(tǒng)正在逐漸成為主流應(yīng)用。但每個客戶端用戶的訪問,都會占用服務(wù)器一定的資源。因此,在硬件設(shè)備和軟件算法復(fù)雜度不變的情況下,每臺應(yīng)用服務(wù)器一般都存在一個最高用戶并發(fā)數(shù),一旦并發(fā)訪問的用戶數(shù)量超過這個數(shù)量,就會引起系統(tǒng)性能急劇下降,甚至出現(xiàn)用戶訪問無響應(yīng)等服務(wù)器拒絕服務(wù)的情況。
萊鋼網(wǎng)上考試系統(tǒng)主要用于業(yè)務(wù)技能競賽.需要保持各參賽人員試卷內(nèi)容一致,試題隨機排序,下載、上傳必要的附列資料文檔,一般同時參加考試人數(shù)在六千人左右,甚至多達上萬人,經(jīng)常出現(xiàn)并發(fā)訪問和提交大量數(shù)據(jù),因此,如何優(yōu)化網(wǎng)上考試系統(tǒng)設(shè)計策略,提升服務(wù)器性能,使之能滿足高并發(fā)大數(shù)據(jù)量的應(yīng)用,是必須解決的問題。
根據(jù)網(wǎng)絡(luò)七層協(xié)議定義,在服務(wù)器端,可以在傳輸層或應(yīng)用層對系統(tǒng)的介入層進行負載均衡考慮??荚囅到y(tǒng)為B/S架構(gòu),目前使用基于應(yīng)用層HTTP協(xié)議的負載均衡技術(shù)較為成熟,且應(yīng)用廣泛,使用既有的開源技術(shù)即可達到接入層的網(wǎng)絡(luò)負載均衡的目的。雖然在越底層做負載均衡效率越高,資源利用率越小,但是基于傳輸層TCP協(xié)議的LVS(Linux Virtual Server)維護難度較大,因此在應(yīng)用層做負載均衡是最佳選擇,在本系統(tǒng)中LVS作為輔助方案。
NGINX是開源的基于HTTP的反向代理,除了具有HTTP包轉(zhuǎn)發(fā)的功能外,還能通過配置實現(xiàn)HTTP協(xié)議的負載均衡。在服務(wù)器上部署多套考試系統(tǒng)Server端程序后,在NGINX的配置文件nginx. conf中,添加負載均衡配置項,并根據(jù)各自服務(wù)器的性能及部署情況設(shè)置各自的權(quán)重,即可達到按需負載均衡的目的。
下面的配置表示,每6個對考試系統(tǒng)的HTTP請求中,3個請求會被轉(zhuǎn)發(fā)到10.10.10.110服務(wù)器,2個被轉(zhuǎn)發(fā)到10.10.10.111服務(wù)器,1個被轉(zhuǎn)發(fā)到10.10.10.112服務(wù)器。
upstream exameServer { server 10.10.10.110:8080 weight=3; server 10.10.10.111:8080 weight=2; server 10.10.10.112:8080; }
考試系統(tǒng)的核心業(yè)務(wù)為考試功能,除此外還包含了非核心業(yè)務(wù)如試卷生成、評分、查分、統(tǒng)計、通告等。一般情況下,考試功能是考試系統(tǒng)的核心,保證考試功能不被其他非核心業(yè)務(wù)的影響至關(guān)重要。系統(tǒng)需要將考試功能獨立成為單獨的進程,防止非核心業(yè)務(wù)功能因宕機、資源利用率過高等造成對考試的影響。
一次考試試卷中,往往有多種題型,題型不同,用戶在WEB界面上停留的時間長短不同,對后端產(chǎn)生的數(shù)據(jù)讀寫請求數(shù)也不相同。以選擇題和問答題為例,用戶在選擇題上停留的時間一般較短,短時間內(nèi)產(chǎn)生的數(shù)據(jù)讀寫請求較多,單條數(shù)據(jù)的數(shù)據(jù)長度較小;但用戶在問答題上停留的時間一般會較長,產(chǎn)生的數(shù)據(jù)讀寫請求較少,但是單條數(shù)據(jù)的數(shù)據(jù)長度往往較大。
因此,可以根據(jù)題型的不同,將讀寫頻繁的頁面和讀寫較少的頁面獨立成不同的應(yīng)用,并合理分配兩者之間的比例,將有利于提高對服務(wù)器資源的利用。根據(jù)統(tǒng)計用戶在選擇題上的平均停留時間為1分鐘,在問答題傷的平均時間為5分鐘,那么相對更多地部署選擇題對應(yīng)的服務(wù)器端應(yīng)用。在較大的并發(fā)讀寫請求情況下,將其進程部署個數(shù)分配為5:1將是比較合理的選擇。
考試系統(tǒng)的數(shù)據(jù)持久化層使用了數(shù)據(jù)庫作為存儲工具,多并發(fā)讀寫數(shù)據(jù)庫的情況下,鎖操作頻繁將導(dǎo)致系統(tǒng)花費大量時間在數(shù)據(jù)庫的讀寫上。因此,對數(shù)據(jù)庫進行讀寫分離將顯得尤為重要。
考試系統(tǒng)讀寫分離后,對數(shù)據(jù)的寫操作如考試功能作用于主庫,對數(shù)據(jù)的讀操作如查分功能作用于備庫。若單個備庫不能滿足查詢業(yè)務(wù)需求時,可建立多個備庫,并根據(jù)業(yè)務(wù)量合理分配備庫的使用程序。
4.1 數(shù)據(jù)庫分庫分表
考試系統(tǒng)的核心數(shù)據(jù)分為題庫和用戶考題數(shù)據(jù),題庫用于記錄考題元數(shù)據(jù),用戶考題數(shù)據(jù)用于記錄用戶的考試題目、用戶考試答案,以及考試時間等信息。題庫一般數(shù)據(jù)條數(shù)不多,使用單表即可滿足日常應(yīng)用。但是用戶考試記錄隨著年限的增長,當(dāng)達到百萬級別的時候,讀寫性能將明顯降低。根據(jù)需要,為每一個庫(也可以到表級別)設(shè)置一套數(shù)據(jù)文件(元數(shù)據(jù)文件、索引文件和數(shù)據(jù)文件),不同數(shù)據(jù)庫的文件又放置在不同的磁盤中,將大大提高磁盤的讀寫效率。
4.2 為考試設(shè)計的分庫分表
考試過程中的數(shù)據(jù)讀寫并發(fā)量,主要是用戶對自己的考試數(shù)據(jù)的讀寫與更新,可以按照用戶維度,進行分庫分表。在實際運行中發(fā)現(xiàn),單庫單表只能支撐p人的同時考試,那么為了滿足t人同時考試,可以建立m個庫n張表,其中t <= m*n*p。在用戶考試時,根據(jù)用戶的登錄名稱或內(nèi)部號碼等Hash到這m*n個庫表中,從而讓這些庫表共同分擔(dān)了t個人考試的讀寫請求。
作者簡介:徐曉鶴(1983-),男,山東濟南人,本科,工程師,研究方向:工業(yè)自動化控制軟件工程。