顏晨陽(yáng)
摘 要:ACLab是一種基于docker集群的輕量級(jí)自動(dòng)評(píng)價(jià)虛擬命令行實(shí)驗(yàn)作業(yè)終端。ACLab允許教師通過(guò)非常簡(jiǎn)單的步驟定制可自動(dòng)評(píng)分的類unix系統(tǒng)終端實(shí)驗(yàn),定制實(shí)驗(yàn)可以隨機(jī)化,確保每個(gè)學(xué)生的任務(wù)不盡相同。學(xué)生則可以如同在真實(shí)機(jī)器上一樣進(jìn)行操作完成實(shí)驗(yàn),并獲得實(shí)時(shí)反饋。ACLab使用基于瀏覽器的終端仿真器通過(guò)WebSockets連接到Docker容器,性能測(cè)試及表明它足以處理大量并發(fā)用戶,同時(shí)調(diào)查顯示:使用ACLab教師對(duì)于ACLab對(duì)于減輕實(shí)驗(yàn)環(huán)境部署和實(shí)驗(yàn)批改工作量十分有效,使用學(xué)生對(duì)于ACLab可用性和實(shí)用性也相當(dāng)認(rèn)同。
關(guān)鍵詞:虛擬終端;自動(dòng)評(píng)價(jià);命令行;實(shí)驗(yàn)教學(xué)
一、簡(jiǎn)介
終端或命令行通常是指操作系統(tǒng)基于文本的用戶界面。在終端中鍵入命令即可訪問(wèn)程序、執(zhí)行操作。用戶可以執(zhí)行簡(jiǎn)單的任務(wù),但也可以構(gòu)造更復(fù)雜的命令來(lái)執(zhí)行效率低下的手動(dòng)操作。在類Unix系統(tǒng)中,終端或者命令行幾乎是開(kāi)發(fā)和運(yùn)維人員與系統(tǒng)的唯一交互界面。
在本文中,我們構(gòu)建了一種基于docker[1]集群的可定制和自動(dòng)評(píng)估作業(yè)的虛擬命令行實(shí)驗(yàn)系統(tǒng):ACLab,并將其用于類Unix系統(tǒng)教學(xué)。在設(shè)計(jì)ACLab時(shí),我們有四個(gè)主要目標(biāo):
(1)平臺(tái)應(yīng)提供真實(shí)的終端體驗(yàn),學(xué)習(xí)者可以探索機(jī)器的當(dāng)前狀態(tài)并使用許多可能的策略來(lái)完成實(shí)驗(yàn),而不是僅僅檢查學(xué)習(xí)者是否鍵入了特定的命令。
(2)平臺(tái)應(yīng)具有足夠的靈活性,以支持各種終端分配,還應(yīng)支持隨機(jī)化,以便可以為每個(gè)學(xué)生提供獨(dú)特的問(wèn)題實(shí)例,以防止學(xué)習(xí)者共享解決方案。
(3)平臺(tái)應(yīng)具有高可用性并可以適當(dāng)擴(kuò)展,以防止濫用和資源耗盡,而不受用戶操作的影響。
(4)學(xué)習(xí)者應(yīng)該以方便,獨(dú)立于平臺(tái)的方式訪問(wèn)終端作業(yè),最好通過(guò)與學(xué)生用于其他在線課程平臺(tái)的界面相同的界面進(jìn)行訪問(wèn)。
ACLab通過(guò)組合包括Docker容器,WebSocket和瀏覽器內(nèi)終端仿真器[2]在內(nèi)的一系列現(xiàn)有技術(shù)來(lái)實(shí)現(xiàn)上述目標(biāo)。使用ACLab,學(xué)習(xí)者無(wú)需安裝任何客戶端,使用瀏覽器就可以連接到實(shí)時(shí)系統(tǒng)的真實(shí),有效的終端,并在其中完成實(shí)驗(yàn),如圖1所示。
本文的具體結(jié)構(gòu)描述如下:
(1)在第二節(jié)中闡述了ACLab服務(wù)器的設(shè)計(jì),包括其對(duì)容器生命周期的管理以及如何將其集成到有代表性的在線課程界面中。
(2)在第三節(jié)中我們展示了若干調(diào)查統(tǒng)計(jì)結(jié)果,其中包括學(xué)習(xí)者使用ACLab的體驗(yàn)以及ACLab對(duì)于實(shí)驗(yàn)教學(xué)效率的提升。
(3)在第四節(jié)中,我們展示了ACLab的性能結(jié)果,結(jié)果表明ACLab具有足夠的彈性,可用于中大型規(guī)模(1000人)的在線課程中。
二、設(shè)計(jì)與實(shí)現(xiàn)
我們下面描述的ACLab的實(shí)現(xiàn)是嵌入在Prairie Learn[3]在線課程平臺(tái)中,該平臺(tái)系統(tǒng)用于部署授課過(guò)程中的其他任務(wù)。ACLab系統(tǒng)由三個(gè)部分組成,如圖2所示:
(1)ACLab服務(wù)器,負(fù)責(zé)分配任務(wù)Docker容器實(shí)例及其管理服務(wù)器上Docker容器的生命周期。
(2)PrairieLearn服務(wù)器端,負(fù)責(zé)生成任務(wù)描述文檔并在記錄實(shí)驗(yàn)作業(yè)完成情況。
(3)PrairieLearn客戶端(基于瀏覽器),用于用戶與ACLab服務(wù)器及其容器之間的交互。
構(gòu)建在線實(shí)驗(yàn)始于用戶對(duì)新問(wèn)題的請(qǐng)求,接收到請(qǐng)求后,PrairieLearn服務(wù)器首先將構(gòu)建構(gòu)建實(shí)驗(yàn)任務(wù)描述文檔。該描述文檔包括對(duì)ACLab服務(wù)器應(yīng)如何初始化Docker容器的描述,包括應(yīng)創(chuàng)建哪些文件和目錄、在將容器控制權(quán)轉(zhuǎn)移給用戶之前要執(zhí)行的命令。為了使每個(gè)用戶分配到的在線實(shí)驗(yàn)任務(wù)不完全一樣,會(huì)隨機(jī)更改文件的名稱和內(nèi)容以及目錄的名稱和層次結(jié)構(gòu)。在PrairieLearn客戶端使用Gotty來(lái)作為終端仿真器,同時(shí)用JavaScript構(gòu)建一些額外代碼來(lái)實(shí)現(xiàn)客戶端與ACLab其他簡(jiǎn)單交互功能,如評(píng)分、重置、分?jǐn)?shù)保存等等。ACLab通過(guò)使用“任務(wù)完成校驗(yàn)字符串”來(lái)檢查用戶的任務(wù)完成情況。采用“任務(wù)完成校驗(yàn)字符串”是由于希望將ACLab服務(wù)器與PrairieLearn松散耦合。“任務(wù)完成校驗(yàn)字符串”對(duì)于每個(gè)用戶的每個(gè)任務(wù)來(lái)說(shuō)都是唯一的,并作為任務(wù)描述文檔的一部分提供給容器。PrairieLearn客戶端界面也包括“重置”按鈕。當(dāng)按下時(shí),客戶端將通知ACLab服務(wù)器強(qiáng)制清除任務(wù)關(guān)聯(lián)容器資源,并重復(fù)發(fā)送任務(wù)描述文檔給ACLab服務(wù)器來(lái)重建任務(wù)。如果一個(gè)任務(wù)在規(guī)定時(shí)間內(nèi)未能完成,ACLab服務(wù)器也將清除與該任務(wù)關(guān)聯(lián)的任何資源。
三、實(shí)驗(yàn)結(jié)果
在2018年和2019年第2學(xué)期中,ACLab部署在阿里云ecs.c6.large實(shí)例上,被用于某高職計(jì)算機(jī)網(wǎng)絡(luò)專業(yè)的《Linux系統(tǒng)管理》課程。分別有122和163名學(xué)生使用ACLab??偣?5個(gè)任務(wù),包括目錄導(dǎo)航、列出和刪除、文件復(fù)制、移動(dòng)、重命名和刪除、隱藏文件、文件修改時(shí)間、通配符、grep,tar和zip文件、、查找、管道、vim應(yīng)用、軟件安裝、查找、更新和卸載、進(jìn)程查看、終止、服務(wù)查看、啟動(dòng)和停止。學(xué)生完成任務(wù)平均每次約需5分鐘。我們?cè)诿總€(gè)學(xué)期都對(duì)于學(xué)生進(jìn)行了一項(xiàng)關(guān)于ACLab應(yīng)用效果的調(diào)查,在3.1中進(jìn)行了介紹。在3.2中給出了一項(xiàng)系統(tǒng)壓力測(cè)試結(jié)果,來(lái)確定ACLab可伸縮性瓶頸。
(一)學(xué)生調(diào)查結(jié)果
我們要求學(xué)生在完成學(xué)期35個(gè)ACLab的終端任務(wù)之后,以1到5(非常不認(rèn)同、不認(rèn)同、部分認(rèn)同、認(rèn)同、非常認(rèn)同)的等級(jí)對(duì)ACLab平臺(tái)不同方面進(jìn)行評(píng)估,該調(diào)查是在線進(jìn)行的,在285名學(xué)生中,共有222名學(xué)生參加了調(diào)查,有效回收問(wèn)卷220份。問(wèn)題羅列如下:(1)您是否認(rèn)同ACLab平臺(tái)操作的實(shí)用性(與實(shí)際系統(tǒng)命令行操作是否相同);(2)您是否認(rèn)同AClab平臺(tái)易用性(上手快);(3)您是否認(rèn)同AClab平臺(tái)性能效率(不卡頓);(4)您是否認(rèn)同AClab平臺(tái)教學(xué)功能(評(píng)分是否準(zhǔn)確)。所有受訪者中,我們看到用戶對(duì)ACLab平臺(tái)操作的實(shí)用性有很高的評(píng)價(jià)(圖3A,avg:4.57,std dev:0.22),證明ACLab平臺(tái)與實(shí)際系統(tǒng)命令行操作一致性很高。學(xué)生對(duì)ACLab的平臺(tái)易用性同樣滿意(圖3B,avg:4.37,std dev:0.67),表示ACLab界面明了,容易上手。對(duì)于ACLab性能效率評(píng)價(jià)則有所保留(圖3C,avg:3.63,std dev:.99),這主要是因?yàn)锳CLab部署在在一個(gè)性能有限的阿里云實(shí)例中,如果能夠部署在一個(gè)較高新能的實(shí)例中,情況會(huì)有所好轉(zhuǎn)。對(duì)于ACLab平臺(tái)教學(xué)功能認(rèn)同率仍有提升空間。(圖3D,avg:3.75,std dev:1.11)。
(二)性能壓力測(cè)試
為了觀察服務(wù)器在受控負(fù)載下的行為,我們進(jìn)行了一次壓力測(cè)試,要求所有專業(yè)學(xué)生學(xué)生同時(shí)訪問(wèn)其終端任務(wù)。涉及大約約400個(gè)并發(fā)用戶,這些用戶通過(guò)運(yùn)行在阿里云ecs.c6.large實(shí)例上的ACLab服務(wù)器完成分配。在這兩個(gè)測(cè)試中,容器構(gòu)建延遲平均和中值都增加到10秒左右,這是可以忍受的,并且一旦創(chuàng)建了容器,終端就沒(méi)有明顯的延遲。我們認(rèn)為,在稍微性能高一些的阿里云計(jì)算型實(shí)例(4vCPU,16GiB)上部署ACLab就足以滿足千人以上的并發(fā)訪問(wèn)。使用性能監(jiān)控器collectl[5]在ACLab主機(jī)上收集的數(shù)據(jù)表明,壓力測(cè)試僅顯著影響了CPU利用率。內(nèi)存使用量?jī)H增加了幾百兆字節(jié),而網(wǎng)絡(luò)使用率可以忽略不計(jì)。
四、結(jié)論
ACLab的實(shí)施方式表明,可以以可擴(kuò)展和安全的方式構(gòu)建針對(duì)終端技能的認(rèn)證。ACLab使教師有機(jī)會(huì)在他們的課程和考試中添加基于終端實(shí)踐內(nèi)容,能夠與現(xiàn)有系統(tǒng)兼容,同時(shí)不會(huì)過(guò)多地增加教師的工作量。但是,仍有一些工作要做。首先,改善ACLab的教學(xué)功能,簡(jiǎn)化其判分流程。第二,拓展ACLab的兼容性,使其能夠兼容更多的教學(xué)平臺(tái),最后提示ACLab的效率,嘗試在大規(guī)模在線課程中使用ACLab。
參考文獻(xiàn):
[1]Docker.https://www.docker.com/.Accessed:2018-04-02.
[2]hterm.https://chromium.googlesource.com/apps/libapps/+/master/hterm.Accessed:2018-04-01.
[3]Matthew West,Geoffrey L.Herman,and Craig Zilles.2015.PrairieLearn:Mastery-based online problem solving with adaptive scoring and recommendations driven by machine learning.In 2015 ASEE Annual Conference & Exposition.ASEE Conferences,Seattle,Washington.
[4]Fiona Fui-Hoon Nah.2004.A study on tolerable waiting time:how long are Web users willing to wait? Behaviour & Information Technology 23,3(2004):153-163.
[5]Mark Seger.collectl.http://collectl.sourceforge.net/.Accessed:2018-04-02.