林志煌,張菽妍,趙蓮芬
(廣州軟件學(xué)院網(wǎng)絡(luò)技術(shù)系,廣州 510990)
21世紀(jì)人類面臨的最大機(jī)遇是計(jì)算機(jī)語(yǔ)言,計(jì)算機(jī)語(yǔ)言將成為科技創(chuàng)新的核心動(dòng)力,因此就需要結(jié)合新教改的要求創(chuàng)新教學(xué)模式,加強(qiáng)高校學(xué)生的編程實(shí)踐能力,提高學(xué)生編程興趣。在如今的計(jì)算機(jī)課程實(shí)驗(yàn)教學(xué)中,大部分老師都是使用PaaS平臺(tái)進(jìn)行教學(xué),雖然PaaS平臺(tái)提供了比較完善的開發(fā)環(huán)境,但由于PaaS的很多基礎(chǔ)構(gòu)建都是基于虛擬機(jī)運(yùn)行的,導(dǎo)致計(jì)算機(jī)資源大量消耗,出現(xiàn)資源利用率低下等問題。同時(shí)高校學(xué)生在開發(fā)應(yīng)用、編程等課程中需要更為穩(wěn)定的開發(fā)環(huán)境來進(jìn)行相關(guān)實(shí)驗(yàn)。對(duì)于初學(xué)者而言,需要在電腦本地部署好計(jì)算機(jī)語(yǔ)言需要的編譯環(huán)境,安裝相關(guān)的開發(fā)工具,安裝開發(fā)插件等。在這個(gè)過程中,由于電腦硬件環(huán)境不同以及安裝過程的某些特殊原因?qū)е碌陌惭b失敗等問題頻繁發(fā)生,難以找到合適的解決方式,嚴(yán)重地打擊了編程初學(xué)者的學(xué)習(xí)熱情,高校內(nèi)的學(xué)生更有可能因?yàn)榕渲铆h(huán)境問題無法在非上課時(shí)間進(jìn)行課程實(shí)踐。本平臺(tái)通過docker容器技術(shù)結(jié)合瀏覽器遠(yuǎn)程訪問服務(wù)器內(nèi)統(tǒng)一配置好的容器,無需考慮硬件環(huán)境及電腦配置,可以做到所有學(xué)生統(tǒng)一環(huán)境進(jìn)行實(shí)驗(yàn),這將有效提升學(xué)生的編程課程效率及穩(wěn)定性。
Docker是Docker.Lnc公司開源的一個(gè)基于LXC技術(shù)搭建的Container容器引擎,該引擎的源代碼托管在Github上。Docker使用Google公司推出的Go語(yǔ)言進(jìn)行開發(fā)實(shí)現(xiàn),基于Linux內(nèi)核的cgroup,namespace以 及OverlayFS類的Union FS等技術(shù),對(duì)進(jìn)程進(jìn)行封裝隔離,屬于操作系統(tǒng)層面的虛擬化技術(shù)。傳統(tǒng)虛擬機(jī)攜帶有操作系統(tǒng),很小的應(yīng)用程序卻因?yàn)閿y帶了操作系統(tǒng)而變得十分笨重,而docker容器內(nèi)的應(yīng)用程序是直接調(diào)用宿主機(jī)的cpu、磁盤等,容器沒有自己的內(nèi)核,也沒有虛擬硬件,因此比較輕便。每個(gè)容器間是相互隔離的,每個(gè)容器內(nèi)部都有一個(gè)屬于自己的文件系統(tǒng),通過隔離機(jī)制可以將服務(wù)器利用到極致。由于Docker底層使用LXC來實(shí)現(xiàn),LXC將linux進(jìn)程沙盒化,使得進(jìn)程之間彼此隔離,并且能夠控制各進(jìn)程的資源分配。
Docker中包含三個(gè)基本的概念:鏡像(image)、容器(container)和倉(cāng)庫(kù)(repository)。鏡像通常是一個(gè)只讀文件,它的功能是用于創(chuàng)建容器,且創(chuàng)建出來的容器與鏡像文件完全相同,唯一的區(qū)別在于容器是可讀寫的。只有容器才能用于運(yùn)行程序,每一個(gè)容器之間是相互隔離的,可以理解為一臺(tái)輕量化的虛擬機(jī)。在此基礎(chǔ)上,容器也可以反過來用于構(gòu)建鏡像。倉(cāng)庫(kù)即集中存放鏡像文件的場(chǎng)所。
傳統(tǒng)虛擬機(jī)是虛擬出一套硬件,運(yùn)行一個(gè)完整的操作系統(tǒng),其本質(zhì)是一臺(tái)物理機(jī)上模擬出多臺(tái)虛擬服務(wù)器,可以在這個(gè)虛擬服務(wù)器上安裝與運(yùn)行軟件,因而其占用的硬件資源較多,啟動(dòng)較慢。而Docker容器不封裝整個(gè)操作系統(tǒng),基于主機(jī)內(nèi)核通過Docker守護(hù)程序主機(jī)進(jìn)程執(zhí)行,是內(nèi)核級(jí)別的虛擬化,可以在一個(gè)物理機(jī)上運(yùn)行多個(gè)容器實(shí)例。具有輕量化、啟動(dòng)快、占用資源少等特點(diǎn)。
當(dāng)容器需要回滾時(shí),新容器替代容器的整個(gè)過程秒級(jí)完成,而傳統(tǒng)虛擬化技術(shù)由于依賴項(xiàng)可能不同,更有可能產(chǎn)生沖突,因此傳統(tǒng)虛擬化技術(shù)做回滾時(shí)比較困難。
本編程平臺(tái)基于混合云環(huán)境,發(fā)揮了公有云和私有云兩類云平臺(tái)的優(yōu)勢(shì),擴(kuò)展了本編程平臺(tái)的技術(shù)基礎(chǔ),提高平臺(tái)的可用性與便捷性,降低了信息化投入成本的同時(shí)保障了數(shù)據(jù)的安全性。利用Docker容器技術(shù)和Web技術(shù),將傳統(tǒng)的實(shí)驗(yàn)室機(jī)房環(huán)境轉(zhuǎn)移至云環(huán)境中,學(xué)生通過瀏覽器就能使用云主機(jī)進(jìn)行課程的實(shí)驗(yàn)。在實(shí)驗(yàn)過程中,學(xué)生不僅可以根據(jù)教師上傳的實(shí)驗(yàn)指導(dǎo)書和建立的云實(shí)驗(yàn)環(huán)境進(jìn)行實(shí)驗(yàn),而且可以編輯實(shí)驗(yàn)筆記,保存或上傳實(shí)驗(yàn)結(jié)果。該平臺(tái)還提供實(shí)驗(yàn)社區(qū)、綜合協(xié)作實(shí)驗(yàn)、實(shí)驗(yàn)資源和系統(tǒng)資源的監(jiān)控管理等。
本編程平臺(tái)服務(wù)者主要由學(xué)生和教師組成。學(xué)生在本平臺(tái)上通過用戶鑒權(quán)登錄后,查看實(shí)驗(yàn)列表,選擇自己所要學(xué)習(xí)的課程,連接遠(yuǎn)程主機(jī)就可以開始學(xué)習(xí),并且同時(shí)可以查看實(shí)驗(yàn)文檔,實(shí)驗(yàn)完成后,通過實(shí)驗(yàn)完成檢查退出、斷開遠(yuǎn)程主機(jī),上傳或下載文件,即可完成本次實(shí)驗(yàn)。教師通過用戶鑒權(quán)登錄后,可以進(jìn)行實(shí)驗(yàn)文檔編輯,選擇本次實(shí)驗(yàn)所需要的環(huán)境,便可以發(fā)布實(shí)驗(yàn),同時(shí)可以管理實(shí)驗(yàn),對(duì)實(shí)驗(yàn)再次編輯。管理員主要管理用戶、實(shí)驗(yàn)內(nèi)容、服務(wù)器主機(jī)、環(huán)境鏡像等。角色設(shè)計(jì)如圖1所示。
圖1 角色設(shè)計(jì)
該平臺(tái)在面對(duì)大量實(shí)驗(yàn)參與者連接遠(yuǎn)程主機(jī)的情況下,每一個(gè)參與者平均需要近300 MB的主機(jī)內(nèi)存及根據(jù)參與者主機(jī)運(yùn)行程序決定的cpu消耗。為了防止容器中的性能占用過高,在創(chuàng)建容器時(shí)需要提前設(shè)置相關(guān)參數(shù)限制容器性能消耗,在出現(xiàn)過高消耗時(shí)docker會(huì)殺死當(dāng)前容器。同時(shí)在每一次創(chuàng)建容器時(shí)對(duì)當(dāng)前剩余內(nèi)存及cpu進(jìn)行查詢,若不滿足新容器的創(chuàng)建就將連接放入隊(duì)列中,等待其他容器銷毀后再進(jìn)行連接。若大量實(shí)驗(yàn)參與者同時(shí)進(jìn)入導(dǎo)致部分容器創(chuàng)建失敗則會(huì)觸發(fā)事務(wù)回滾,避免了數(shù)據(jù)庫(kù)數(shù)據(jù)與服務(wù)器中實(shí)際狀況不同步。
使用Docker容器化技術(shù)搭建分布式服務(wù)器集群為用戶提供穩(wěn)定、可靠的在線虛擬操作環(huán)境。在云服務(wù)器中搭建各個(gè)實(shí)驗(yàn)環(huán)境的Docker鏡像,在鏡像中配置noVNC實(shí)現(xiàn)瀏覽器訪問。在云服務(wù)器中基于鏡像生成容器,各個(gè)容器的端口地址使用動(dòng)態(tài)分配算法。容器具有隔離性,某個(gè)用戶的容器發(fā)生問題不會(huì)影響其他用戶的容器,也不會(huì)對(duì)服務(wù)器集群產(chǎn)生問題,具備較高的安全性。
本平臺(tái)在Windows10環(huán)境中使用visual studio code(簡(jiǎn)稱VS code)的源代碼編輯器進(jìn)行前后端開發(fā)。使用Navicat進(jìn)行可視化的數(shù)據(jù)庫(kù)管理,使用postman接口測(cè)試工具進(jìn)行后端接口測(cè)試。使用Google Chrome瀏覽器進(jìn)行前端頁(yè)面開發(fā)調(diào)試。通過apidoc生成后端的接口文檔。
用戶端主要功能有:用戶通過鑒權(quán)登錄編程平臺(tái),查看實(shí)驗(yàn)列表、連接遠(yuǎn)程主機(jī)、斷開主機(jī)連接、上傳下載文件、實(shí)驗(yàn)完成檢查、刷新實(shí)驗(yàn)主機(jī)、查看實(shí)驗(yàn)文檔。
3.2.1 用戶鑒權(quán)功能實(shí)現(xiàn)
用戶鑒權(quán)模塊用于用戶登陸功能,用戶在登陸時(shí)需要輸入手機(jī)號(hào)碼,點(diǎn)擊發(fā)送驗(yàn)證碼按鈕,前端將用戶請(qǐng)求發(fā)送至后端,后端發(fā)送調(diào)用騰訊云接口,將驗(yàn)證碼短信發(fā)送至用戶手機(jī)中。用戶獲取驗(yàn)證碼后,需要輸入驗(yàn)證碼,并點(diǎn)擊登陸按鈕。
3.2.2 用戶連接遠(yuǎn)程主機(jī)功能實(shí)現(xiàn)
當(dāng)用戶請(qǐng)求連接主機(jī)時(shí),遠(yuǎn)程主機(jī)先查詢實(shí)現(xiàn)環(huán)境的鏡像id,再根據(jù)鏡像信息生成容器并運(yùn)行,并根據(jù)端口分配算法為容器映射一個(gè)端口,將端口與服務(wù)器域名拼接生成一個(gè)完整地址后返回給用戶,用戶即可在瀏覽器中進(jìn)入服務(wù)器的編程環(huán)境。連接過程架構(gòu)圖如圖2所示,流程圖如圖3所示,連接成功后的頁(yè)面如圖4所示。
圖2 用戶連接遠(yuǎn)程主機(jī)過程圖
圖3 用戶連接主機(jī)流程圖
圖4 用戶連接主機(jī)成功后的初始頁(yè)面
教師通過鑒權(quán)登錄到教師端,可查看實(shí)驗(yàn)列表、連接遠(yuǎn)程主機(jī)、斷開主機(jī)連接、上傳下載文件、實(shí)驗(yàn)發(fā)布、實(shí)驗(yàn)管理、實(shí)驗(yàn)文檔查看、刷新實(shí)驗(yàn)主機(jī)、查看實(shí)驗(yàn)文檔。
3.3.1 實(shí)驗(yàn)發(fā)布功能的實(shí)現(xiàn)
實(shí)驗(yàn)的發(fā)布需要教師填寫發(fā)布表單,表單中包含有實(shí)驗(yàn)的標(biāo)題、簡(jiǎn)介、實(shí)驗(yàn)環(huán)境等內(nèi)容。在用戶正確填寫表單并點(diǎn)擊發(fā)布后,后端將表單數(shù)據(jù)插入數(shù)據(jù)庫(kù)并為用戶生成一臺(tái)根據(jù)用戶表單中信息所選擇的實(shí)驗(yàn)環(huán)境的容器,教師在實(shí)驗(yàn)管理頁(yè)面可以查看到自己發(fā)布后暫未編輯章節(jié)的實(shí)驗(yàn)。
教師點(diǎn)擊完善實(shí)驗(yàn)章節(jié)按鈕向后端發(fā)送請(qǐng)求,后端響應(yīng)后將測(cè)試環(huán)境的網(wǎng)址返回至前端,前端收到網(wǎng)址后將數(shù)據(jù)渲染至頁(yè)面,教師進(jìn)入測(cè)試實(shí)驗(yàn)環(huán)境中,即可以開始實(shí)驗(yàn)并編輯章節(jié),編輯章節(jié)完成后用戶點(diǎn)擊編輯完成按鈕,將章節(jié)數(shù)據(jù)發(fā)送至后端,后端將章節(jié)數(shù)據(jù)插入章節(jié)表中,實(shí)驗(yàn)發(fā)布完成。
圖5 編輯實(shí)驗(yàn)文檔頁(yè)面
3.3.2 實(shí)驗(yàn)文檔上傳下載功能的實(shí)現(xiàn)
實(shí)驗(yàn)文檔上傳功能是前端通過http庫(kù)axios中的post方法向后端發(fā)送文件數(shù)據(jù),后端接收到數(shù)據(jù)后存儲(chǔ)于指定主機(jī)隨機(jī)碼位置的靜態(tài)文件夾,上傳后可以通過遠(yuǎn)程主機(jī)的目錄直接查看。文件上傳成功后會(huì)在數(shù)據(jù)庫(kù)文件表中插入一條新數(shù)據(jù)用于存儲(chǔ)文件名及文件的外部訪問路徑。文件的下載功能通過瀏覽器直接訪問文件的外部訪問路徑來實(shí)現(xiàn)。實(shí)驗(yàn)上傳下載功能實(shí)現(xiàn)界面如圖6所示。
圖6 上傳下載功能
管理員可進(jìn)行連接管理、主機(jī)管理、實(shí)驗(yàn)管理、環(huán)境管理、新建實(shí)驗(yàn)環(huán)境、用戶管理。后臺(tái)界面如圖7所示。
圖7 后臺(tái)界面
該編程平臺(tái)基于混合云環(huán)境,利用Docker容器技術(shù)結(jié)合Web技術(shù)構(gòu)建基于瀏覽器的多用戶同時(shí)在線且彼此間互不干擾的在線實(shí)現(xiàn)平臺(tái)。相對(duì)于傳統(tǒng)的編程平臺(tái),在線虛擬編程平臺(tái)不僅能夠打破時(shí)間和地點(diǎn)的限制,讓學(xué)生能有更多的機(jī)會(huì)來接觸和研究所做的實(shí)驗(yàn),而且還能培養(yǎng)他們以理論聯(lián)系實(shí)際的思維方式以及自主創(chuàng)新的能力。在線編程平臺(tái)可以同時(shí)提供實(shí)驗(yàn)和資源的共享,這種共享可以基于校內(nèi)或者校外,提供隨時(shí)隨地在線學(xué)習(xí)和實(shí)踐資源?;贒ocker容器技術(shù)的在線編程平臺(tái)具備靈活性和共享性等優(yōu)勢(shì),能夠極大地節(jié)約資源,提高學(xué)習(xí)者的學(xué)習(xí)興趣以及綜合實(shí)踐能力,具有廣闊的應(yīng)用前景。