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