趙蓮芬 林志煌
(廣州軟件學(xué)院 廣東省廣州市 510990)
在線(xiàn)虛擬實(shí)驗(yàn)室最早出現(xiàn)在上世紀(jì)80年代,它的主要原理是使用虛擬化技術(shù)實(shí)現(xiàn)模擬不同實(shí)驗(yàn)工具的平臺(tái)。
高校在新工科專(zhuān)業(yè)(移動(dòng)互聯(lián)網(wǎng)、云計(jì)算、大數(shù)據(jù)、人工智能)教學(xué)中最大的問(wèn)題是無(wú)法對(duì)基礎(chǔ)實(shí)驗(yàn)環(huán)境進(jìn)行快速部署,配置難度較高。每次軟件更新或者版本升級(jí)實(shí)驗(yàn)員就要安裝多種實(shí)驗(yàn)工具和軟件,安裝過(guò)程繁瑣、配置工作量極大,實(shí)驗(yàn)過(guò)程中也因?yàn)閷?shí)驗(yàn)環(huán)境的問(wèn)題增加教師和學(xué)生的負(fù)擔(dān)。
國(guó)內(nèi)也有部分在線(xiàn)實(shí)驗(yàn)系統(tǒng)平臺(tái),但這些平臺(tái)大部分是商用的,而且主要針對(duì)某些特定的領(lǐng)域,對(duì)高校新工科在線(xiàn)實(shí)驗(yàn)的支持有局限性,而且這些在線(xiàn)實(shí)驗(yàn)系統(tǒng)多基于傳統(tǒng)虛擬架構(gòu)的,資源利用率不高,訪(fǎng)問(wèn)速度和響應(yīng)時(shí)間需要進(jìn)一步優(yōu)化。對(duì)于高校來(lái)說(shuō),需要一個(gè)面向用戶(hù)的開(kāi)放的輕量級(jí)的在線(xiàn)虛擬實(shí)驗(yàn)平臺(tái),從而為用戶(hù)提供一個(gè)良好的實(shí)驗(yàn)環(huán)境。
基于Docker容器技術(shù)的輕量級(jí)在線(xiàn)虛擬實(shí)驗(yàn)平臺(tái)能夠讓學(xué)生節(jié)省搭建基礎(chǔ)實(shí)驗(yàn)環(huán)境的時(shí)間,從而更加專(zhuān)注的進(jìn)行學(xué)習(xí)。該平臺(tái)的主要優(yōu)點(diǎn)是能為所有學(xué)生提供同樣的基礎(chǔ)實(shí)驗(yàn)環(huán)境,從而保持實(shí)驗(yàn)的一致性,減少兼容性的影響,提高實(shí)驗(yàn)的效率。同時(shí),該平臺(tái)能夠提供個(gè)性化的學(xué)習(xí)方式,學(xué)生可以隨時(shí)隨地根據(jù)自己的個(gè)人需求選擇合適的學(xué)習(xí)模塊進(jìn)行在線(xiàn)實(shí)驗(yàn),能夠極大的提升學(xué)生學(xué)習(xí)的興趣和效率,因此基于Docker容器技術(shù)的輕量級(jí)在線(xiàn)虛擬實(shí)驗(yàn)平臺(tái)構(gòu)建研究具有重要的意義。
和傳統(tǒng)虛擬實(shí)驗(yàn)平臺(tái)的區(qū)別是在線(xiàn)虛擬實(shí)驗(yàn)平臺(tái)突破了時(shí)空限制,只要能夠聯(lián)網(wǎng),任何學(xué)生都能夠輕易的隨時(shí)隨地進(jìn)行自己感興趣的在線(xiàn)實(shí)驗(yàn)或者研究,在線(xiàn)實(shí)驗(yàn)平臺(tái)同時(shí)可以提供實(shí)驗(yàn)和資源的共享,這種共享可以基于校內(nèi)或者校外,提供隨時(shí)隨地在線(xiàn)學(xué)習(xí)和實(shí)踐資源,培養(yǎng)實(shí)踐能力和自主創(chuàng)新能力。因此,基于Docker容器化技術(shù)的輕量級(jí)在線(xiàn)實(shí)驗(yàn)平臺(tái)具備靈活和共享等優(yōu)勢(shì),能夠極大的節(jié)約資源,提高學(xué)生的學(xué)習(xí)效率以及綜合實(shí)踐能力。
傳統(tǒng)的基于虛擬機(jī)架構(gòu)的實(shí)驗(yàn)平臺(tái)實(shí)現(xiàn)了操作系統(tǒng)級(jí)別的隔離,它的實(shí)現(xiàn)方式是在硬件上安裝虛擬機(jī)來(lái)管理多種軟件操作系統(tǒng),但是這沒(méi)有很好的解決新工科專(zhuān)業(yè)實(shí)驗(yàn)環(huán)境的模塊化快速統(tǒng)一彈性部署、隨時(shí)隨地在線(xiàn)實(shí)踐以及降低實(shí)驗(yàn)室建設(shè)成本等方面的問(wèn)題。
Docker 是一個(gè)開(kāi)源的應(yīng)用容器引擎,可以把該引擎看作實(shí)現(xiàn)輕量級(jí)虛擬化的一種方式,它允許用戶(hù)依賴(lài)該引擎把自己的應(yīng)用以及應(yīng)用依賴(lài)的基礎(chǔ)環(huán)境打包封裝到一起,然后發(fā)布到自己的應(yīng)用服務(wù)器上,而且不同的應(yīng)用和基礎(chǔ)環(huán)境都可以單獨(dú)打包封裝,相互之間不受影響。
Docker容器本質(zhì)上是可配置的輕量級(jí)虛擬機(jī),它能夠?qū)崿F(xiàn)共享底層的操作系統(tǒng)和硬件資源,為上層的開(kāi)發(fā)人員提供應(yīng)用組件服務(wù),比如鏡像遷移、網(wǎng)絡(luò)各類(lèi)負(fù)載均衡等,同時(shí)可以根據(jù)用戶(hù)需求進(jìn)行增加、修改或刪除組件,實(shí)現(xiàn)彈性分配和使用,尤其適合構(gòu)建新工科專(zhuān)業(yè)復(fù)雜多變的細(xì)粒度的實(shí)驗(yàn)環(huán)境的新需求。
基于Docker容器架構(gòu)技術(shù)實(shí)現(xiàn)在線(xiàn)虛擬實(shí)驗(yàn)平臺(tái)的優(yōu)勢(shì)在于可以實(shí)現(xiàn)應(yīng)用的快速部署,良好的彈性擴(kuò)展能力,迅速響應(yīng)能力,跨平臺(tái)遷移擴(kuò)展能力等,尤其適合高校新工科專(zhuān)業(yè)構(gòu)建彈性化需求的在線(xiàn)實(shí)驗(yàn)平臺(tái),而且不同Docker容器直接相互獨(dú)立,互不影響。傳統(tǒng)虛擬化實(shí)驗(yàn)架構(gòu)和基于Docker容器的虛擬化架構(gòu)比較如圖1所示。
圖1:傳統(tǒng)虛擬架構(gòu)和Docker容器化虛擬架構(gòu)比較圖
傳統(tǒng)虛擬化實(shí)驗(yàn)架構(gòu)和基于Docker容器的虛擬化架構(gòu)的區(qū)別在于它的實(shí)現(xiàn)方式不同。傳統(tǒng)虛擬實(shí)驗(yàn)架構(gòu)需要在每一個(gè)虛擬節(jié)點(diǎn)部署操作系統(tǒng),然后在操作系統(tǒng)上在部署相應(yīng)的應(yīng)用程序;而Docker容器架構(gòu)則不需要,它的應(yīng)用程序是直接運(yùn)行在共享的宿主機(jī)的軟硬件資源上,每一個(gè)被封裝的應(yīng)用程序和依賴(lài)包之間互不影響,相互隔離,獨(dú)立運(yùn)行在未經(jīng)虛擬化的軟硬件資源上,因此,它們比傳統(tǒng)架構(gòu)的虛擬機(jī)更輕便。
基于Docker容器化技術(shù)的高校在線(xiàn)實(shí)驗(yàn)平臺(tái)角色主要分為管理員、教師和學(xué)生。在線(xiàn)實(shí)驗(yàn)平臺(tái)系統(tǒng)需求分析用例如圖2所示。
圖2:系統(tǒng)需求分析用例圖
各角色的功能描述如下:
學(xué)生:鑒權(quán)登錄、查看實(shí)驗(yàn)列表、連接遠(yuǎn)程主機(jī)、斷開(kāi)主機(jī)連接、上傳下載文件、實(shí)驗(yàn)完成檢查、刷新實(shí)驗(yàn)主機(jī)、查看實(shí)驗(yàn)文檔、退出登錄。
教師:鑒權(quán)登錄功能、查看實(shí)驗(yàn)列表、連接遠(yuǎn)程主機(jī)、斷開(kāi)主機(jī)連接、上傳下載文件、實(shí)驗(yàn)發(fā)布、實(shí)驗(yàn)管理、實(shí)驗(yàn)文檔查看、刷新實(shí)驗(yàn)主機(jī)、查看實(shí)驗(yàn)文檔、退出登錄。
管理員:鑒權(quán)登錄功能、連接管理、主機(jī)管理、實(shí)驗(yàn)管理、環(huán)境管理、新建實(shí)驗(yàn)環(huán)境、用戶(hù)管理、登錄。
本實(shí)驗(yàn)平臺(tái)基于混合云環(huán)境,充分發(fā)揮了公有云和私有云兩類(lèi)云平臺(tái)的優(yōu)勢(shì),擴(kuò)展了本實(shí)驗(yàn)平臺(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)?;贒ocker容器的在線(xiàn)編程平臺(tái)的架構(gòu)如圖3所示。
圖3:在線(xiàn)實(shí)驗(yàn)平臺(tái)架構(gòu)
在實(shí)驗(yàn)過(guò)程中,學(xué)生不僅可以根據(jù)教師上傳的實(shí)驗(yàn)指導(dǎo)書(shū)和建立的云實(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ǒng)功能結(jié)構(gòu)如圖4所示。
圖4:系統(tǒng)功能設(shè)計(jì)
用戶(hù)端主要功能有:用戶(hù)通過(guò)鑒權(quán)登錄編程平臺(tái),查看實(shí)驗(yàn)列表、連接遠(yuǎn)程主機(jī)、斷開(kāi)主機(jī)連接、上傳下載文件、實(shí)驗(yàn)完成檢查、刷新實(shí)驗(yàn)主機(jī)、查看實(shí)驗(yàn)文檔。
教師通過(guò)鑒權(quán)登錄到教師端,可查看實(shí)驗(yàn)列表、連接遠(yuǎn)程主機(jī)、斷開(kāi)主機(jī)連接、上傳下載文件、實(shí)驗(yàn)發(fā)布、實(shí)驗(yàn)管理、實(shí)驗(yàn)文檔查看、刷新實(shí)驗(yàn)主機(jī)、查看實(shí)驗(yàn)文檔。
管理員可進(jìn)行連接管理、主機(jī)管理、實(shí)驗(yàn)管理、環(huán)境管理、新建實(shí)驗(yàn)環(huán)境、用戶(hù)管理。
遠(yuǎn)程功能通過(guò)在瀏覽器中展示云連接頁(yè)面實(shí)現(xiàn),具體的實(shí)現(xiàn)方式分為前端用戶(hù)交互功能及后端服務(wù)功能兩個(gè)部分。
在線(xiàn)開(kāi)發(fā)的功能是將服務(wù)器中運(yùn)行的集成開(kāi)發(fā)工具環(huán)境(IDE)編輯器在瀏覽器中展示出來(lái),并且通過(guò)瀏覽器進(jìn)行交互,在線(xiàn)實(shí)驗(yàn)平臺(tái)最基礎(chǔ)的實(shí)驗(yàn)環(huán)境是通過(guò)在服務(wù)器運(yùn)行Code-Server實(shí)現(xiàn)了在瀏覽器展示服務(wù)器上運(yùn)行的IDE工具,Code-Server是大名鼎鼎的桌面端IDE工具vscode的服務(wù)器版本。Code-Server的工作原理是通過(guò)在服務(wù)器中運(yùn)行IDE工具,再使用基于Websocket協(xié)議實(shí)現(xiàn)的novnc技術(shù)就可以實(shí)現(xiàn)在瀏覽器中訪(fǎng)問(wèn)服務(wù)器即可展示IDE工具頁(yè)面,在線(xiàn)實(shí)驗(yàn)平臺(tái)的其他實(shí)驗(yàn)環(huán)境也都是基于novnc技術(shù)實(shí)現(xiàn)。
在實(shí)現(xiàn)了瀏覽器連接云服務(wù)器功能后,還需要實(shí)現(xiàn)多用戶(hù)同時(shí)在線(xiàn)開(kāi)發(fā),且彼此間的實(shí)驗(yàn)環(huán)境互不干擾,就需要每個(gè)用戶(hù)連接一臺(tái)獨(dú)立的服務(wù)器。本實(shí)驗(yàn)平臺(tái)使用Docker容器技術(shù)來(lái)實(shí)現(xiàn)在一臺(tái)服務(wù)器上運(yùn)行多個(gè)實(shí)驗(yàn)環(huán)境的功能,docker底層使用了LXC來(lái)實(shí)現(xiàn),這種技術(shù)能夠有效控制各進(jìn)程資源的分配,并且能夠使進(jìn)程之間相互隔離。
在線(xiàn)實(shí)驗(yàn)平臺(tái)(簡(jiǎn)稱(chēng)Codelab)為用戶(hù)提供了一些基礎(chǔ)實(shí)驗(yàn)環(huán)境,這些環(huán)境對(duì)應(yīng)的就是服務(wù)器中的Docker鏡像,在用戶(hù)發(fā)布實(shí)驗(yàn)時(shí),用戶(hù)選擇的基礎(chǔ)鏡像的ID將會(huì)保存在數(shù)據(jù)庫(kù)中,在其他用戶(hù)進(jìn)行該實(shí)驗(yàn)時(shí),后端收到前端傳來(lái)的數(shù)據(jù)就會(huì)執(zhí)行指定語(yǔ)句,根據(jù)數(shù)據(jù)中的鏡像信息運(yùn)行容器,且根據(jù)一個(gè)端口分配算法為生成的容器映射一個(gè)端口,使得用戶(hù)可以在瀏覽器中訪(fǎng)問(wèn)服務(wù)器IP的某一個(gè)端口就可以連接上容器中運(yùn)行的服務(wù)。在服務(wù)器生成容器并分配好端口后,將端口與服務(wù)器域名拼接為一個(gè)完整地址后返回前端,前端收到地址后訪(fǎng)問(wèn)該地址即可。用戶(hù)連接遠(yuǎn)程主機(jī)流程如圖5所示。
圖5:用戶(hù)連接遠(yuǎn)程主機(jī)流程圖
后端創(chuàng)建連接的過(guò)程分為以下七步:
(1)創(chuàng)建當(dāng)前連接的隨機(jī)碼;
(2)根據(jù)前端發(fā)送的實(shí)驗(yàn)信息查詢(xún)實(shí)驗(yàn)對(duì)應(yīng)的環(huán)境和端口;
(3)為容器分配端口號(hào);
(4)通過(guò)執(zhí)行命令創(chuàng)建容器,容器的文件夾掛載在以隨機(jī)碼命名的文件夾;
(5)為新建的容器設(shè)置預(yù)設(shè)文件;
(6)設(shè)置定時(shí)任務(wù),在實(shí)驗(yàn)時(shí)間結(jié)束后刪除容器并修改數(shù)據(jù)庫(kù)狀態(tài);
(7)創(chuàng)建成功后拼接協(xié)議,域名和端口號(hào)為完整url地址后返回給前端。
本文針對(duì)在線(xiàn)實(shí)驗(yàn)教學(xué)平臺(tái)基礎(chǔ)實(shí)驗(yàn)環(huán)境配置效率低,導(dǎo)致資源利用率和實(shí)踐教學(xué)效率不高的問(wèn)題,基于Docker容器化技術(shù)設(shè)計(jì)與實(shí)現(xiàn)了一個(gè)適用于高校的在線(xiàn)輕量級(jí)虛擬實(shí)驗(yàn)教學(xué)平臺(tái),該平臺(tái)能夠以組件化形式有效構(gòu)建高校新工科專(zhuān)業(yè)的實(shí)驗(yàn)教學(xué)環(huán)境,并且實(shí)現(xiàn)按需配置,能夠?qū)崿F(xiàn)實(shí)驗(yàn)環(huán)境集中在線(xiàn)統(tǒng)一部署管理,實(shí)現(xiàn)按需動(dòng)態(tài)調(diào)整版本,彈性分配資源,提高軟硬件資源的復(fù)用性和可用性,提升學(xué)生的學(xué)習(xí)興趣和效率,提高實(shí)踐教學(xué)質(zhì)量。對(duì)基于Docker技術(shù)的在線(xiàn)實(shí)驗(yàn)平臺(tái)的設(shè)計(jì)與實(shí)現(xiàn)具有一定的參考意義。