亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于集群技術(shù)的源代碼自動評測系統(tǒng)研究

        2009-06-18 04:42:10管賦勝
        新媒體研究 2009年16期
        關(guān)鍵詞:源代碼評測集群

        管賦勝

        [摘要]在分析源代碼自動評測系統(tǒng)設(shè)計的基礎(chǔ)上,進(jìn)一步闡述如何實現(xiàn)系統(tǒng)的高可用性和高性能。從以下三個方面:評測系統(tǒng)、集群技術(shù)和性能測試介紹實踐經(jīng)驗。

        [關(guān)鍵詞]評測系統(tǒng)集群技術(shù)響應(yīng)時間吞吐量

        中圖分類號:TP3文獻(xiàn)標(biāo)識碼:A文章編號:1671-7597(2009)0820048-02

        在程序設(shè)計語言、數(shù)據(jù)結(jié)構(gòu)、算法設(shè)計與分析教學(xué)中,程序設(shè)計上機(jī)練習(xí)是必不可少的。由此帶來教師在平時輔導(dǎo)中批改學(xué)生源代碼作業(yè)量大,并且也存在一些個人主觀因素或者不能注意到學(xué)生一題多解的情況,導(dǎo)致反饋的效率不高,影響學(xué)生學(xué)習(xí)的積極性。

        目前國內(nèi)提供的練習(xí)網(wǎng)站,往往只是針對部分群體的訓(xùn)練使用,無法在自己課堂上充分利用。為此研究開發(fā)了基于集群技術(shù)的源代碼自動評測系統(tǒng),它是在Linux 2.6內(nèi)核操作系統(tǒng)上,JVM1.6.x,Apache 2.2.x,Tomcat6.0.x環(huán)境中,使用JAVA編寫Servlet,用JSP編寫動態(tài)網(wǎng)頁,結(jié)合Linux系統(tǒng)編程完成的。綜合運(yùn)用了多種編程技術(shù)如:多線程、系統(tǒng)調(diào)用、管道技術(shù)等。

        下面介紹一下系統(tǒng)的實現(xiàn)過程。

        一、源代碼自動評測系統(tǒng)

        系統(tǒng)需要完成以下任務(wù):學(xué)生注冊登錄后,瀏覽題目,選擇自己熟悉的編程語言完成試題要求,提交答案源代碼。系統(tǒng)接受提交命令后,把源代碼生成為臨時文件(一般存于系統(tǒng)臨時目錄,文件名為系統(tǒng)解題id號,擴(kuò)展名為自己選擇語言的標(biāo)準(zhǔn)名,如code_1234.cpp,然后等待評測。

        系統(tǒng)在檢查到有源代碼生成后,會執(zhí)行編譯命令,如果編譯不成功則轉(zhuǎn)到錯誤處理程序,匯報編譯錯誤類型,停止執(zhí)行,反饋信息。編譯成功,則轉(zhuǎn)到執(zhí)行模塊,根據(jù)生成答案和系統(tǒng)標(biāo)準(zhǔn)答案(均是文件形式)比對,確定提交答案的實際執(zhí)行情況。一般會有“答案錯誤”、“超時”、“超內(nèi)存”等情況。同時系統(tǒng)把編譯和執(zhí)行情況反饋給用戶。

        由此可以看出,源代碼自動評測系統(tǒng)至少應(yīng)該包括這樣幾個模塊:WEB服務(wù)模塊、自動編譯模塊、自動評測模塊或者其它可以擴(kuò)展模塊。其中前端服務(wù)是注冊模塊,后端服務(wù)是自動編譯和評測模塊。后臺數(shù)據(jù)庫服務(wù)選擇MySQL作為支持。

        1.數(shù)據(jù)庫設(shè)置。

        根據(jù)系統(tǒng)的分析設(shè)計,至少需要建立以下表:用戶信息表,題目表,比賽表,狀態(tài)表,日志表。

        2.WEB服務(wù)模塊。

        使用JAVA編寫Servlet,用JSP編寫動態(tài)網(wǎng)頁,在頁面中調(diào)用Servlet服務(wù)。

        3.自動編譯模塊。

        系統(tǒng)支持C,C++,JAVA,Pascal編譯。為了防止編譯過程時間過長,可以分配給每一待編譯源代碼時間最大值(可以根據(jù)需要調(diào)整)。

        4.自動評測模塊。

        (1)時間計算。使用以下簡短代碼即可測試,如果精度再放寬點(diǎn)可以用Date().getTime()獲得時間,精度要求更高,需要讀取CPU的時鐘周期數(shù)再根據(jù)頻率換成時間。

        long starttime=System.currentTimeMillis(); //獲取最初時間

        doSth(); //測試的代碼段,通??梢詫⒅饕惴ǚ庋b在這里

        long endtime=System.currentTimeMillis();//獲取運(yùn)行結(jié)束時間

        System.out.println("程序運(yùn)行時間:"+(endtime-starttime)+"ms”);

        當(dāng)然為了限制時間資源的無限制占用,可以加入Thread.sleep(delay),

        到達(dá)指定的時間立即停止答案程序的運(yùn)行,并返回超時信息等。

        (2)結(jié)果反饋。評測系統(tǒng)運(yùn)行結(jié)果存儲在后臺數(shù)據(jù)庫中,如程序運(yùn)行時長,占用內(nèi)存空間等。特殊結(jié)果給出提示,方便用戶修改源代碼。

        (3)執(zhí)行安全。有一些文件需要通過WEB程序執(zhí)行或者刪除,但這些文件JSP又沒有權(quán)限訪問,給用戶使用程序帶來不便,這時需要借助于sudo來提高權(quán)限。

        一般當(dāng)前的Apache的用戶是nobody,Tomcat服務(wù)的用戶是誰呢?這取決啟動時的執(zhí)行startup.sh命令的用戶。何不把用戶統(tǒng)一設(shè)置成root?這樣太不安全,而sudo運(yùn)行用戶程序過程中,只需要注意其運(yùn)行權(quán)限的分配問題。例如,限制用戶程序網(wǎng)絡(luò)使用權(quán)限,限制用戶程序非法調(diào)用系統(tǒng)函數(shù)關(guān)機(jī)、重啟、格式化硬盤等操作。當(dāng)然,在編譯階段,編譯模塊也同時在頭文件中將有關(guān)危險系統(tǒng)調(diào)用函數(shù)屏蔽掉。

        另一個安全上的考慮是代碼作弊,系統(tǒng)提供了一個相似度的檢查程序,可以有效地查出作弊代碼。

        5.擴(kuò)展模塊(競賽管理,課程管理)

        必要時的考試或者競賽可以有效地促進(jìn)學(xué)生檢驗當(dāng)前階段的學(xué)習(xí),所以在系統(tǒng)中增加了競賽管理模塊。對于用戶而言,一旦參加競賽,權(quán)限就會受到一些限制,并且無法自行脫離參賽狀態(tài)。必須等到競賽結(jié)束才能回復(fù)到完整權(quán)限。計分方式以每一個問題的最后一次發(fā)送代碼為評分依據(jù)。

        在幾百人比賽中部分學(xué)生反映頁面打不開,或者提交代碼后系統(tǒng)1分鐘內(nèi)無法回饋信息。針對以上問題,查看了Tomcat日志,Linux系統(tǒng)日志,評測系統(tǒng)日志發(fā)現(xiàn),在集中提交時段如一題臨近結(jié)束時間2分鐘內(nèi)200個左右的提交,有20個左右沒有處理。這給系統(tǒng)設(shè)計者提了一個更高要求的,如何在并發(fā)提交量較大時保證服務(wù)的可用性和性能。

        經(jīng)過實踐發(fā)現(xiàn),解決這個問題,可以采用集群技術(shù)。

        二、集群技術(shù)的應(yīng)用

        (一)編譯、評測模塊服務(wù)器集群

        以Linux核心層集群技術(shù)和安全技術(shù)為基石,構(gòu)建一個在Internet服務(wù)器中將負(fù)載分給多個服務(wù)器分擔(dān),以解決Internet服務(wù)器面臨的大量并發(fā)訪問造成的CPU或I/O的高負(fù)載問題。

        每一臺計算機(jī)上安裝Linux操作系統(tǒng),并要在Linux操作系統(tǒng)中安裝C編譯器和C的LIB庫。在配置TCP/IP時,給計算機(jī)配置IP地址使集群服務(wù)器的計算機(jī)能進(jìn)行相互通訊。

        在進(jìn)行配置服務(wù)器時推薦使用MPICH軟件去執(zhí)行分布式的并行處理應(yīng)用。mpich是由Argonne National Laboratory和Mississippi State University合作開發(fā)的。這樣在修改編譯模塊程序時記得 #include "mpi.h"庫。

        (二)Tomcat集群

        Tomcat 6中的集群使一組局域網(wǎng)上的Tomcat實例(稱為集群)在用戶看起來是單一服務(wù)器。這使不同的服務(wù)器之間能分布地工作,稱為負(fù)載平衡。Tomcat 6處理集群的方式利用了便宜的高速LAN互聯(lián)來共享多個服務(wù)器的計算資源。這就是按比例擴(kuò)展(scaling out)和線性擴(kuò)展方法。通過使集群服務(wù)器明顯地處理更多的并發(fā)請求,可以解決可擴(kuò)展性問題。Tomcat服務(wù)器通過使用AJP連接器和Apache Web服務(wù)中mod_proxy(更低版本使用的是mod_jk)插件來支持線性擴(kuò)展。Tomcat 6集群可用來實現(xiàn)一個高可靠性問題,在這種情況下會出現(xiàn)以下情況:

        1.指定給崩潰服務(wù)器的請求轉(zhuǎn)寄到集群中另一臺功能正常的服務(wù)器。

        2.最初的請求由功能正常的服務(wù)器處理。

        3.失敗的Tomcat服務(wù)器邏輯上從集群刪除,請求不再會傳給它。

        4.當(dāng)失敗的Tomcat服務(wù)器恢復(fù)邏輯上它被添加集群中,再一次用來處理輸入的請求。

        但如何知道,原來的“服務(wù)器停在哪里”呢?并要繼續(xù)從停止的地方開始。這要求信息的同步和共享。在JAVA EE兼容的Servlet/JSP容器中,有個普遍認(rèn)可的約定可以利用來跟蹤WEB應(yīng)用程序的狀態(tài)信息。Tomcat 6集群實現(xiàn)利用它來提供故障轉(zhuǎn)移能力。

        (三)MySQL服務(wù)器集群

        MySQL Cluster技術(shù)允許在無共享的系統(tǒng)中部署“內(nèi)存中”數(shù)據(jù)庫的Cluster。通過無共享體系結(jié)構(gòu),系統(tǒng)能夠使用廉價的硬件,而且對軟硬件無特殊要求。此外,由于每個組件有自己的內(nèi)存和磁盤,不存在單點(diǎn)故障。

        MySQL Cluster由一組計算機(jī)構(gòu)成,每臺計算機(jī)上均運(yùn)行著多種進(jìn)程,包括MySQL服務(wù)器,NDB Cluster的數(shù)據(jù)節(jié)點(diǎn),管理服務(wù)器,以及(可能)專門的數(shù)據(jù)訪問程序。

        數(shù)據(jù)保存在“NDB存儲服務(wù)器”的存儲引擎中,表(結(jié)構(gòu))則保存在“MySQL服務(wù)器”中。源代碼自動評測系統(tǒng)通過“MySQL服務(wù)器”訪問這些數(shù)據(jù)表,集群管理服務(wù)器通過管理工具(ndb_mgmd)來管理“NDB存儲服務(wù)器”。

        三、性能測試

        到目前為止,只是探討了如何安裝、配置一個集群服務(wù)系統(tǒng),無論在哪個環(huán)節(jié)中的安裝與調(diào)整,源代碼自動測評系統(tǒng)的性能提升如何,有效的性能測試是至關(guān)重要的。

        性能對一個WEB站點(diǎn)意味著什么,從用戶視角WEB性能可歸結(jié)為WEB頁面處理有多快。而對于一個設(shè)計者,需要準(zhǔn)確量化WEB站點(diǎn)性能。

        重點(diǎn)從以下兩個性能方面來測試:響應(yīng)時間、吞吐量。測試分類為3類:負(fù)荷測試、壓力測試、連續(xù)時間的運(yùn)行測試。需要指出的是負(fù)荷測試和壓力測試往往被錯誤地互換使用。負(fù)荷測試是在正常工作狀態(tài)能承擔(dān)的“最高負(fù)荷”,而壓力測試意味者超負(fù)荷,直至系統(tǒng)崩潰,獲得的錯誤類型可能是WEB服務(wù)器拒絕連接,JAVA虛擬機(jī)耗光內(nèi)存,數(shù)據(jù)庫連接失敗或其它現(xiàn)象。

        有很多這樣的性能測試應(yīng)用程序,以JMeter為例,盡管它是開源軟件,仍然是出色的可解決方案之一,尤其是對JDBC數(shù)據(jù)源和JAVA對象進(jìn)行負(fù)荷測試。任何JMeter會話核心是測試計劃,每個測試計劃中第一個元素是線程組,線程組是一組元素的集合,每個線程有自己的一組JAVA線程,可以進(jìn)行相關(guān)測試配置,形成一個完整的計劃。啟動測試后結(jié)束后,可以在窗口顯示響應(yīng)中接收的數(shù)據(jù)和負(fù)荷時間(毫秒)、HTTP響應(yīng)代碼等。默認(rèn)測試運(yùn)行一次,可以將線程組改為更高值如200個線程(也就同時模擬200個用戶),在它們之間有1s的ramp up period(即模擬1s內(nèi)200個用戶同時訪問)。

        在完成初步的性能測試后,發(fā)現(xiàn)集群服務(wù)下的源代碼自動測評系統(tǒng)web應(yīng)用程序運(yùn)行不理想,不要急著丟棄多余硬件等,此時主要是分析導(dǎo)致性能提升幅度不大原因,可以分環(huán)節(jié)測試如JDBC部分。并查看各服務(wù)部分的日志,最后確定影響系統(tǒng)性能的瓶頸,就可以明確處理,從而更有效地建立基于集群技術(shù)的源代碼自動測評系統(tǒng)。

        參考文獻(xiàn):

        [1]魯靜軒、孫晶、李元嵩,程序在線評測系統(tǒng)的設(shè)計與實現(xiàn).

        [2]孫敏,基于Linux的集群.

        [3](美)Vivek Chopra、Sing Li、Jeff Genender著,Aapache Tomcat 6高級編程.

        [4]徐千洋,Linux C函數(shù)庫參考手冊.

        猜你喜歡
        源代碼評測集群
        人工智能下復(fù)雜軟件源代碼缺陷精準(zhǔn)校正
        集群式AUV可控分群控制算法
        基于TXL的源代碼插樁技術(shù)研究
        次時代主機(jī)微軟XSX全方位評測(下)
        次時代主機(jī)微軟XSX全方位評測(上)
        攻坡新利器,TOKEN VENTOUS評測
        一種無人機(jī)集群發(fā)射回收裝置的控制系統(tǒng)設(shè)計
        電子制作(2018年11期)2018-08-04 03:25:40
        軟件源代碼非公知性司法鑒定方法探析
        Python與Spark集群在收費(fèi)數(shù)據(jù)分析中的應(yīng)用
        Canyon Ultimate CF SLX 8.0 DI2評測
        中國自行車(2017年1期)2017-04-16 02:54:06
        人妻久久一区二区三区| 精品少妇一区一区三区| 偷拍女厕尿尿在线免费看| 日韩免费高清视频网站| 国产真实二区一区在线亚洲| 国产丝袜美腿在线播放| 成人一区二区免费中文字幕视频 | 久久久久亚洲AV无码专| 久久se精品一区二区国产| 国产成人亚洲合色婷婷| 亚洲国产精品高清在线| 国产成人小视频| 免费观看的a级毛片的网站| 国产亚洲精品第一综合麻豆| 国语憿情少妇无码av| 成av人片一区二区久久| 香蕉成人伊视频在线观看| 亚洲日韩成人av无码网站| 热の国产AV| 国产真实二区一区在线亚洲| 国产亚洲av成人噜噜噜他| 四虎国产精品永久在线国在线| 国产a级午夜毛片| 亚洲av毛片一区二区久久| 日韩免费视频| 久久男人av资源网站无码 | 国产亚洲3p一区二区| 精品久久久bbbb人妻| 中字幕久久久人妻熟女| 国产av专区一区二区三区| 精品视频一区二区在线观看| 久久午夜av一区二区三区| 色婷婷亚洲精品综合影院| 欧美喷潮久久久xxxxx| 亚洲精品国产精品av| 国产熟女自拍av网站| 国99久9在线 | 免费| 精品爆乳一区二区三区无码av| 亚洲高清有码在线观看| 午夜精品男人天堂av| 中文在线中文a|