林志煌,張菽妍,趙蓮芬
(廣州軟件學院網絡技術系,廣州 510990)
21世紀人類面臨的最大機遇是計算機語言,計算機語言將成為科技創新的核心動力,因此就需要結合新教改的要求創新教學模式,加強高校學生的編程實踐能力,提高學生編程興趣。在如今的計算機課程實驗教學中,大部分老師都是使用PaaS平臺進行教學,雖然PaaS平臺提供了比較完善的開發環境,但由于PaaS的很多基礎構建都是基于虛擬機運行的,導致計算機資源大量消耗,出現資源利用率低下等問題。同時高校學生在開發應用、編程等課程中需要更為穩定的開發環境來進行相關實驗。對于初學者而言,需要在電腦本地部署好計算機語言需要的編譯環境,安裝相關的開發工具,安裝開發插件等。在這個過程中,由于電腦硬件環境不同以及安裝過程的某些特殊原因導致的安裝失敗等問題頻繁發生,難以找到合適的解決方式,嚴重地打擊了編程初學者的學習熱情,高校內的學生更有可能因為配置環境問題無法在非上課時間進行課程實踐。本平臺通過docker容器技術結合瀏覽器遠程訪問服務器內統一配置好的容器,無需考慮硬件環境及電腦配置,可以做到所有學生統一環境進行實驗,這將有效提升學生的編程課程效率及穩定性。
Docker是Docker.Lnc公司開源的一個基于LXC技術搭建的Container容器引擎,該引擎的源代碼托管在Github上。Docker使用Google公司推出的Go語言進行開發實現,基于Linux內核的cgroup,namespace以 及OverlayFS類的Union FS等技術,對進程進行封裝隔離,屬于操作系統層面的虛擬化技術。傳統虛擬機攜帶有操作系統,很小的應用程序卻因為攜帶了操作系統而變得十分笨重,而docker容器內的應用程序是直接調用宿主機的cpu、磁盤等,容器沒有自己的內核,也沒有虛擬硬件,因此比較輕便。每個容器間是相互隔離的,每個容器內部都有一個屬于自己的文件系統,通過隔離機制可以將服務器利用到極致。由于Docker底層使用LXC來實現,LXC將linux進程沙盒化,使得進程之間彼此隔離,并且能夠控制各進程的資源分配。
Docker中包含三個基本的概念:鏡像(image)、容器(container)和倉庫(repository)。鏡像通常是一個只讀文件,它的功能是用于創建容器,且創建出來的容器與鏡像文件完全相同,唯一的區別在于容器是可讀寫的。只有容器才能用于運行程序,每一個容器之間是相互隔離的,可以理解為一臺輕量化的虛擬機。在此基礎上,容器也可以反過來用于構建鏡像。倉庫即集中存放鏡像文件的場所。
傳統虛擬機是虛擬出一套硬件,運行一個完整的操作系統,其本質是一臺物理機上模擬出多臺虛擬服務器,可以在這個虛擬服務器上安裝與運行軟件,因而其占用的硬件資源較多,啟動較慢。而Docker容器不封裝整個操作系統,基于主機內核通過Docker守護程序主機進程執行,是內核級別的虛擬化,可以在一個物理機上運行多個容器實例。具有輕量化、啟動快、占用資源少等特點。
當容器需要回滾時,新容器替代容器的整個過程秒級完成,而傳統虛擬化技術由于依賴項可能不同,更有可能產生沖突,因此傳統虛擬化技術做回滾時比較困難。
本編程平臺基于混合云環境,發揮了公有云和私有云兩類云平臺的優勢,擴展了本編程平臺的技術基礎,提高平臺的可用性與便捷性,降低了信息化投入成本的同時保障了數據的安全性。利用Docker容器技術和Web技術,將傳統的實驗室機房環境轉移至云環境中,學生通過瀏覽器就能使用云主機進行課程的實驗。在實驗過程中,學生不僅可以根據教師上傳的實驗指導書和建立的云實驗環境進行實驗,而且可以編輯實驗筆記,保存或上傳實驗結果。該平臺還提供實驗社區、綜合協作實驗、實驗資源和系統資源的監控管理等。
本編程平臺服務者主要由學生和教師組成。學生在本平臺上通過用戶鑒權登錄后,查看實驗列表,選擇自己所要學習的課程,連接遠程主機就可以開始學習,并且同時可以查看實驗文檔,實驗完成后,通過實驗完成檢查退出、斷開遠程主機,上傳或下載文件,即可完成本次實驗。教師通過用戶鑒權登錄后,可以進行實驗文檔編輯,選擇本次實驗所需要的環境,便可以發布實驗,同時可以管理實驗,對實驗再次編輯。管理員主要管理用戶、實驗內容、服務器主機、環境鏡像等。角色設計如圖1所示。

圖1 角色設計
該平臺在面對大量實驗參與者連接遠程主機的情況下,每一個參與者平均需要近300 MB的主機內存及根據參與者主機運行程序決定的cpu消耗。為了防止容器中的性能占用過高,在創建容器時需要提前設置相關參數限制容器性能消耗,在出現過高消耗時docker會殺死當前容器。同時在每一次創建容器時對當前剩余內存及cpu進行查詢,若不滿足新容器的創建就將連接放入隊列中,等待其他容器銷毀后再進行連接。若大量實驗參與者同時進入導致部分容器創建失敗則會觸發事務回滾,避免了數據庫數據與服務器中實際狀況不同步。
使用Docker容器化技術搭建分布式服務器集群為用戶提供穩定、可靠的在線虛擬操作環境。在云服務器中搭建各個實驗環境的Docker鏡像,在鏡像中配置noVNC實現瀏覽器訪問。在云服務器中基于鏡像生成容器,各個容器的端口地址使用動態分配算法。容器具有隔離性,某個用戶的容器發生問題不會影響其他用戶的容器,也不會對服務器集群產生問題,具備較高的安全性。
本平臺在Windows10環境中使用visual studio code(簡稱VS code)的源代碼編輯器進行前后端開發。使用Navicat進行可視化的數據庫管理,使用postman接口測試工具進行后端接口測試。使用Google Chrome瀏覽器進行前端頁面開發調試。通過apidoc生成后端的接口文檔。
用戶端主要功能有:用戶通過鑒權登錄編程平臺,查看實驗列表、連接遠程主機、斷開主機連接、上傳下載文件、實驗完成檢查、刷新實驗主機、查看實驗文檔。
3.2.1 用戶鑒權功能實現
用戶鑒權模塊用于用戶登陸功能,用戶在登陸時需要輸入手機號碼,點擊發送驗證碼按鈕,前端將用戶請求發送至后端,后端發送調用騰訊云接口,將驗證碼短信發送至用戶手機中。用戶獲取驗證碼后,需要輸入驗證碼,并點擊登陸按鈕。
3.2.2 用戶連接遠程主機功能實現
當用戶請求連接主機時,遠程主機先查詢實現環境的鏡像id,再根據鏡像信息生成容器并運行,并根據端口分配算法為容器映射一個端口,將端口與服務器域名拼接生成一個完整地址后返回給用戶,用戶即可在瀏覽器中進入服務器的編程環境。連接過程架構圖如圖2所示,流程圖如圖3所示,連接成功后的頁面如圖4所示。

圖2 用戶連接遠程主機過程圖

圖3 用戶連接主機流程圖

圖4 用戶連接主機成功后的初始頁面
教師通過鑒權登錄到教師端,可查看實驗列表、連接遠程主機、斷開主機連接、上傳下載文件、實驗發布、實驗管理、實驗文檔查看、刷新實驗主機、查看實驗文檔。
3.3.1 實驗發布功能的實現
實驗的發布需要教師填寫發布表單,表單中包含有實驗的標題、簡介、實驗環境等內容。在用戶正確填寫表單并點擊發布后,后端將表單數據插入數據庫并為用戶生成一臺根據用戶表單中信息所選擇的實驗環境的容器,教師在實驗管理頁面可以查看到自己發布后暫未編輯章節的實驗。
教師點擊完善實驗章節按鈕向后端發送請求,后端響應后將測試環境的網址返回至前端,前端收到網址后將數據渲染至頁面,教師進入測試實驗環境中,即可以開始實驗并編輯章節,編輯章節完成后用戶點擊編輯完成按鈕,將章節數據發送至后端,后端將章節數據插入章節表中,實驗發布完成。

圖5 編輯實驗文檔頁面
3.3.2 實驗文檔上傳下載功能的實現
實驗文檔上傳功能是前端通過http庫axios中的post方法向后端發送文件數據,后端接收到數據后存儲于指定主機隨機碼位置的靜態文件夾,上傳后可以通過遠程主機的目錄直接查看。文件上傳成功后會在數據庫文件表中插入一條新數據用于存儲文件名及文件的外部訪問路徑。文件的下載功能通過瀏覽器直接訪問文件的外部訪問路徑來實現。實驗上傳下載功能實現界面如圖6所示。

圖6 上傳下載功能
管理員可進行連接管理、主機管理、實驗管理、環境管理、新建實驗環境、用戶管理。后臺界面如圖7所示。

圖7 后臺界面
該編程平臺基于混合云環境,利用Docker容器技術結合Web技術構建基于瀏覽器的多用戶同時在線且彼此間互不干擾的在線實現平臺。相對于傳統的編程平臺,在線虛擬編程平臺不僅能夠打破時間和地點的限制,讓學生能有更多的機會來接觸和研究所做的實驗,而且還能培養他們以理論聯系實際的思維方式以及自主創新的能力。在線編程平臺可以同時提供實驗和資源的共享,這種共享可以基于校內或者校外,提供隨時隨地在線學習和實踐資源。基于Docker容器技術的在線編程平臺具備靈活性和共享性等優勢,能夠極大地節約資源,提高學習者的學習興趣以及綜合實踐能力,具有廣闊的應用前景。