謝兆賢,曹香美,王 超
(曲阜師范大學 網絡空間安全學院,曲阜 273100)
B/S 模式是瀏覽器/服務器模式,用戶界面完全在瀏覽器中運行.大多數通過瀏覽器和各種網絡辦公系統(tǒng)訪問的網站都是采用B/S 模式開發(fā)的.B/S 模式是“瘦客戶端”,核心功能都集中處理在服務器端,所以需要較低的硬件配置.但是幾乎所有客戶端的處理邏輯都運行在服務器端,給服務器造成很大的壓力[1].
隨著云計算的快速發(fā)展,人們開始使用容器在云與云之間快速構建軟件的環(huán)境.由于容器具備可移植性的特性,所以容器的使用量有逐年上升的趨勢.早在2015年的時候,僅有13%的使用者,2018年增加29%的使用者.從文獻[2]對997 名IT 專業(yè)人士的調查,有將近49% 的受訪者反饋曾經使用過Docker 容器.以Docker容器的市場價值來看,2017年的時候僅為7.6億美元[3],目前也已經增加到27 億美元.以此顯示,容器在云計算領域的重要性,逐年增加當中.
Docker 是直接建立在操作系統(tǒng)上的虛擬化技術,它可以直接使用本地的操作系統(tǒng).然而,Docker 容器不只提供輕量化的虛擬環(huán)境,與其它的虛擬化工具相比更具優(yōu)越性.所以,在容器的形式打包和部署應用程序漸漸成為新趨勢的情況下,Docker 容器已經可以在云基礎架構中得到廣泛的部署,例如:Amazon EC2 Container Service,Google Container Engine,Rackspace和Docker Data Center[4].
根據云計算平臺的架構,圖1 實現HTML 的應用,使用容器技術部署的Web 服務器,分成3 層結構.第1 層是基礎設施即是服務(Infrastructure-as-a-Service,IaaS),是云計算的最底層,主要用來提供基礎資源,IaaS 中間件的解決方案主要由Amazon,VMWare 和IBM[5]等大公司提供.第2 層是平臺即是服務(PaaS).顯示一臺物理機中,可以安裝多臺不同操作系統(tǒng)的虛擬機,于每個虛擬機內安裝Docker 容器引擎.在Docker 容器中下載特定容器鏡像,使用容器構建網頁服務器以及進行數據庫的管理.第3 層為軟件即是服務(Software-as-a-Service,SaaS).這是與客戶連接的一層,大多數通過網頁瀏覽器進行接入.在云計算平臺上使用容器部署網頁應用程序,使用HTML 等技術開發(fā)網頁應用程序,最后交付給客戶最直接的網頁瀏覽網址或者手機軟件APP.
圖1 容器于網頁應用的云計算平臺
所以,文獻[6] 初步提出在Docker 環(huán)境下,Java Web 快速搭建平臺的設計理念,為開發(fā)網頁服務器提供一個新的思路.然而,在網頁服務器的開發(fā)過程,經常遇見產品的開發(fā)環(huán)境和客戶的使用環(huán)境不盡相同.所以,每次面對一個新硬件環(huán)境的時候,就需要重新安裝一次.這樣,容易發(fā)生人為操作的錯誤,導致產品的開發(fā)、測試、維護成本增加的問題;此外,還會造成重復加載,造成整體開發(fā)速度緩慢的問題.為了有效地避免發(fā)生以上的問題,Docker 容器做為一個輕量級的應用容器引擎,不只可以解決環(huán)境不兼容的問題,還可以保持操作環(huán)境的一致性,減少重復安裝環(huán)境的行為,提升開發(fā)效率.即便目前使用Docker 容器技術應用在網頁服務器的研究很多,例如:Docker 容器應用于Web邊緣設備服務的部署[7]、Web 應用自動縮放的功能[8]和網頁服務器的負載均衡[9]等.但是,尚未有對于Docker容器于網頁服務器開發(fā)模式的研究.所以,本文將以Docker 容器為基礎,分別結合Nginx 技術和Flask 技術,建立有效開發(fā)網頁服務器的模式.
總之,本文針對傳統(tǒng)B/S 模式部署的網頁服務器進行研究,主要的貢獻有以下3 點.(1)提出DoNginx和DoFlask 兩種新的部署網頁服務器模式,以Docker容器為基礎,應用于云平臺開發(fā)網頁服務器的方案.(2)分析這兩種模式與傳統(tǒng)的模式的區(qū)別,測試CPU占用率、產品交付完整性和數據吞吐量3 種性能.得出以Docker 容器開發(fā)的網頁服務器,更具高效性和完整性.(3)實現網頁開發(fā)的標準化和流程化,提升輕量級網頁服務器的開發(fā)效率.
文章結構上,引言說明服務器的使用和背景,分析目前開發(fā)網頁服務器存在的問題,介紹虛擬化技術,其余的說明如下.在第1 節(jié),介紹網頁服務器相關的研究工作.第2 節(jié)講述B/S、DoNginx 和DoFlask 等3 種開發(fā)網頁服務器的模式.第3 節(jié),對這3 種模式的性能進行分析和比較.最后的結束語,總結本文以及未來的研究方向.
文獻[7]提出一種基于Web 服務部署的方法,為了解決Docker API 使用困難的問題,研究更加抽象的HTTP API,用于部署、更新、終止邊緣設備上的容器.
從文獻[8]可得,人們?yōu)榱藵M足Web 高效率的需求,會購買大量服務器或是高階服務器進行簡單的工作,過度高效的硬件容易造成資源的浪費,低配置的硬件將無法滿足高度流量的環(huán)境.所以,提出混合云無限縮放Web 應用的構思,設計一個基于Docker容器的混合云平臺,實現Web 應用的自動擴展,進行容器部署和具備自動縮放特性的應用程序.
文獻[10] 中提到,Nginx 是具備開源、輕量級、和高性能特性的服務器,由于它的高性能和易于擴展的優(yōu)點,近年來受到開發(fā)人員的歡迎,并且應用廣泛.通過Nginx 和HTTP 的處理流程,得以動態(tài)地調整服務器的權重,取得較佳的服務器性能.
文獻[11]對Nginx 的體系模塊、框架結構的內部架構和實現的原理進行研究.使用C++語言,對Nginx的源碼進行封裝和擴展.
文獻[12]驗證Docker 鏡像在Python 語言環(huán)境下運行的可行性,將一臺虛擬機上的Python 文件打包成鏡像,上傳到云平臺.然后,在另一臺虛擬機中拉取鏡像,完成兩臺虛擬機之間軟件的交付.這種做法,為本文使用的Flask 技術奠定基礎,因為Flask 技術是基于Python 的Web 開發(fā)技術,可以快速建立可交付部署的網頁平臺.
文獻[13]說明FTP 服務器上傳和下載文件的功能,同時設計與實現FTP 的遠程管理系統(tǒng).最終,通過FTP 遠程管理系統(tǒng)實現FTP 服務器,縮短傳輸數據和提交數據的時間.它不僅使普通客戶和管理員不再記錄復雜的FTP 命令,而且大大減少管理員的工作量,提高工作效率.
本文中涉及到的符號與意義,見表1.
表1 符號表
首先介紹FTP 工具在物理機和虛擬機之間傳輸信息的流程,然后介紹Docker容器的框架.最后,分別提出3 種模式的設計與實現.
2.1.1 FTP 傳輸原理
FTP 協(xié)議是一個在計算機網絡上,能夠對用戶端和服務器之間進行文件傳輸的應用層協(xié)議.同時,FTP 服務器進程可以為多個用戶端的進程提供服務.當FTP 用戶端連接FTP 服務器,遵循FTP 的協(xié)議與服務器傳送文件,完成上傳下載文件任務[14].
通過FTP 工具與虛擬平臺之間進行通信.在虛擬的環(huán)境中,將文件復制到Docker 容器下,實現Nginx與HTML 和Flask 與HTML 的交互通訊,使Nginx 和Flask 可以執(zhí)行HTML、JavaScript 和CSS 文件.此時,在虛擬機中的Docker,便可以拉取Nginx 鏡像與創(chuàng)建Flask 鏡像,分別將Nginx 和Flask 下的鏡像配置文件進行部署與執(zhí)行.FTP 工具與Docker 的關系,如圖2所示.
圖2 FTP 傳輸文件關系
2.1.2 Docker 架構
圖3 的Docker 網頁服務器架構,顯示Nginx 技術和Flask 技術的關系,組成說明如下:
圖3 Docker 架構圖
(1)Docker client:Docker 的用戶端,是操作命令的終端.可以在主機直接執(zhí)行Docker 命令,在用戶端同時與多個Docker 的守護程序通信.
(2)Docker daemon:守護Docker 的進程,監(jiān)聽Docker API 的請求與管理Docker 的對象,例如:鏡像、容器、網絡、和卷.守護程序還可以與其它的守護程序通信,進行管理Docker 的服務.
(3)Docker image:Docker 的鏡像,是一個只讀文件,用來創(chuàng)建運行容器.一個鏡像可以創(chuàng)建很多個容器,以Dockerfile 文件指令集創(chuàng)建Docker 鏡像.鏡像包含Ubuntu、Nginx、MySQL 和PHP 等官方鏡像,也包括自創(chuàng)建鏡像文件.
(4)Docker container:Docker 容器,負責應用程序的運行.容器獨立運行一個或一組應用或服務,每個容器之間各自獨立,容器的開啟、停止、和刪除,與其它容器無關.啟動鏡像后生成的容器,會自動生成容器ID 和名稱,也可以自行命名容器的名稱.
(5)Docker registry:Docker 的倉庫,集中存放鏡像文件的場所.倉庫分為公開倉庫(public)和私有倉庫(private)兩種形式,倉庫內存放的每個鏡像文件,都有不同的標簽.在Docker Hub 官網上創(chuàng)建的Docker 賬戶,容許新創(chuàng)建的鏡像到官網,實現鏡像再利用.
本節(jié)對DoNginx 模式和DoFlask 模式分別設計運行序列圖,以及運行時間優(yōu)化算法,與傳統(tǒng)B/S 模式作對比,對網頁服務器進行設計與實現.
2.2.1 傳統(tǒng)B/S 模式
B/S 模式即瀏覽器(browser)和服務器(server)架構模式,是對C/S 模式的改進架構模式.用戶端界面是通過瀏覽器來實現,極少事務邏輯在前端實現,主要事務邏輯在服務器端實現.這種模式將實現系統(tǒng)功能的主要工作集中到服務器上,具有無需安裝用戶端、易于在Web 上發(fā)布信息和易于擴展等優(yōu)點[15].同時,簡化了系統(tǒng)的開發(fā)、維護和使用.
圖4 顯示B/S 模式構建網頁服務器的運行序列關系,包含用戶端界面、控制機制、服務器和數據庫.用戶端界面即瀏覽器,負責顯示結果,是用戶操作系統(tǒng)的接口.控制機制即中間件,運行在瀏覽器和服務器之間,負責傳遞信息.服務器負責與數據庫進行連接,提供數據服務,通過數據庫返回結果.
圖4 B/S 運行序列圖
序列圖顯示開發(fā)過程,有以下3 個步驟.
首先,開發(fā)人員通過過程①創(chuàng)建命令,生成靜態(tài)網頁,在用戶端界面顯示.用戶通過用戶端界面通過過程②向服務器端發(fā)出請求,由控制機制接收,再通過過程③傳送給服務器.
然后,服務器接收請求命令,通過過程④與數據庫進行連接,對數據進行存取等操作.數據庫使用過程⑤將結果反饋到控制機制,控制機制將通過過程⑥結果繼續(xù)反饋給用戶端界面.
最后,用戶端界面將返回來的結果進行處理,可以將系統(tǒng)的邏輯功能更好地展示出來,再通過過程⑦顯示界面.
通過式(1)計算編譯運行代碼文件的時間,式(2)計算構建網頁并運行的全部時間.
B/S 模式構建網頁服務器的時間函數BSOpTime(n,T),算法如算法1.
算法1.BSOpTime輸入: n.輸出:T.
Tbegin=cl ock();for i=1 to n Tfile+=Wi;Send Web to user;Treturn=clock();T=Treturn-Tbegin;return T;end
2.2.2 DoNginx 模式
Nginx 是一款高性能和輕量級的Web 服務器.它依據全新的服務器開發(fā)模型,采用事件驅動架構處理請求,不只可以隱藏自己的IP 地址,性能優(yōu)異且占據內存小,整體運行效率遠超過傳統(tǒng)的Apache 和Tomcat[10].在虛擬平臺,使用Docker 和Nginx 技術開發(fā)Web 服務器,稱之DoNginx 模式.
圖5 顯示DoNginx 的運行序列關系,包含客戶所在的物理機、虛擬平臺、Docker Hub、Nginx 容器、FTP 工具和管理平臺等6 個會話.開發(fā)人員需要先創(chuàng)建開發(fā)項目代碼,FTP 工具負責將開發(fā)過程中的代碼文件傳到虛擬平臺,管理平臺負責執(zhí)行代碼文件.序列圖顯示的開發(fā)過程,依序有以下3 個步驟.
圖5 DoNginx 運行序列圖
首先,開發(fā)人員通過過程①啟動虛擬平臺,然后通過流程②向Docker Hub 請求拉取Nginx 鏡像,使用⑧返回拉取結果,若拉取成功會返回成功結果,如果失敗返回失敗信息.接下來使用過程③啟動鏡像生成容器并命名,若啟動成功執(zhí)行過程⑦返回容器ID,若失敗返回錯誤信息.
然后,使用IP 地址連接FTP 工具,進行過程④,FTP 工具對密鑰進行檢測.連接成功后,選擇要執(zhí)行的代碼文件上傳到虛擬機,記作VM.然后查看上傳的結果,若上傳成功,則在虛擬機中查看文件信息;若失敗,則返回錯誤的信息.過程⑥會從虛擬機中復制開發(fā)人員上傳的n個文件到Nginx 容器內部指定的文件,形成代碼文件集F={F1,F2,…,Fn}.
最后,過程⑤使用管理平臺設置虛擬開發(fā)環(huán)境,執(zhí)行代碼文件集F.打開網頁瀏覽器訪問Nginx 容器內部網頁配置代碼文件F,成功出現需要開發(fā)的網頁.使用過程⑩返回給虛擬平臺反饋信息,然后物理機中通過過程⑨訪問構建的網頁.
通過式(3)得到上傳文件到虛擬機的時間以及將所有文件復制到Nginx 鏡像的全部時間.同時,式(4)可以得出Nginx 鏡像運行的時間與構建網頁時間的和.加入拉取鏡像的時間后,可以取得全部的計算時間,如式(5).
DoNginx 模式構建網頁服務器的時間函數DoNginx-OpTime(n,T),算法如算法2.
算法2.DoNginxOpTime輸入:n.輸出:T.Tbegin = clock();Send file.html + file.css + file.js to VM;Tfile = Tupload;Send file.html + file.css + file.js to Docker.Nginx;for i = 1 to n Tfile += Fi;Trun = run Nginx.image + Web;Send Web to user;Treturn = clock();T1 = Treturn-Tbegin;if T1 == Tpull + Trun + Tfile;return T = T1;end
2.2.3 DoFlask 模式
此模式是結合Docker 和Flask 技術,開發(fā)網頁服務器.目前采用Python 開發(fā)網頁項目的主流框架,包括Django 和Flask.Django 框架是廣泛而全面;Flask框架偏向輕量級、簡潔和靈活,主要面向一些功能簡單、需求簡單和項目周期比較短的輕應用.
開發(fā)人員在Docker 內,創(chuàng)建Flask 鏡像,如圖6的DoFlask 運行序列圖,呈現開發(fā)網頁的序列流程關系.它包含服務器、用戶端、Docker Hub、虛擬平臺以及管理平臺.在虛擬平臺中,開發(fā)人員需要先創(chuàng)建開發(fā)項目代碼,管理平臺負責執(zhí)行代碼文件.兩者不同的地方是,Nginx 需要虛擬平臺從Docker Hub 拉取鏡像,Flask 則需要服務器的虛擬平臺自行創(chuàng)建鏡像,然后上傳到Docker Hub,再使用用戶端虛擬平臺拉取鏡像.如圖6 的服務器做為開發(fā)端服務器,負責創(chuàng)建鏡像,用戶端的虛擬平臺負責測試結果.
圖6 DoFlask 運行序列圖
依照序列圖顯示,整體的開發(fā)過程,有以下4 個步驟.
首先,開發(fā)人員通過過程①創(chuàng)建鏡像文件,創(chuàng)建Python 文件、requirements 文件和Dockerfile 文件.requirements 文件用于記錄所有依賴包及其精確的版本號,以便新環(huán)境的部署.然后,導出打包項目,依賴不同環(huán)境的依賴包和環(huán)境包,以便后續(xù)遷移項目的使用.在通過Dockerfile 文件,便可以自動創(chuàng)建鏡像或自行定義創(chuàng)建.然后,啟動開發(fā)端服務器,在虛擬平臺中通過②和⑦安裝Python 環(huán)境和Flask 軟件包.若是安裝成功,則返回成功信息;若失敗,則返回錯誤信息.
其次,使用過程⑧創(chuàng)建Web 包鏡像,即把過程①創(chuàng)建的文件打包,使用如下命令.
$ sudo docker build <DockerfilePath> -t<ImageName> [:TAG]
當使用?檢查創(chuàng)建結果,若創(chuàng)建成功,則返回成功信息.使用過程③登錄Docker Hub 賬戶,輸入用戶名密碼,進行檢測.通過過程⑨將鏡像文件上傳到Docker Hub 中的倉庫,使用過程?返回上傳結果,若上傳成功,則在Docker Hub 倉庫中可以找到此鏡像.
第三,在用戶端中使用過程④拉取上傳到Docker Hub 倉庫的鏡像,并且使用過程⑩返回拉取結果.通過過程⑤,啟動拉取成功的鏡像;使用過程⑥,返回啟動的容器ID.
最后,在管理平臺中,通過過程?訪問啟動的Flask 容器,查看內部的Web 配置文件.使用IP 地址訪問瀏覽器,從過程?返回訪問結果.
式(6)得出上傳鏡像和拉取鏡像的全部時間,從式(7)可以計算全部的時間.然而,式(8)是運行Flask鏡像時間與構建網頁時間的和.
DoFlask 模式構建網頁服務器的時間函數DoFlask-OpTime(n,T),算法如算法3.
算法3.DoFlaskOpTime輸入:n.輸出:T.Tbegin = clock();Server:Build image in Docker.Flask;Tpush = send image to Docker Hub;User:Tpull = pull image in Docker Hub;Trun = run Flask.image + Flask.Web;Send Web to user;Treturn = clock();T1 = Treturn-Tbegin;if T1 == Tbuild + Trun + Tfile;return T = T1;end
圖7 的數據庫管理運行序列關系,包含虛擬平臺、管理平臺、Docker Hub 和Docker 容器.在虛擬平臺的階段,使用Docker 和phpmyadmin 技術管理數據庫.開發(fā)人員需要先拉取鏡像,FTP 工具負責將開發(fā)過程中的代碼文件傳到虛擬平臺,管理平臺則負責設置虛擬開發(fā)環(huán)境.總之,圖7 的序列圖顯示開發(fā)過程,總結以下3 個步驟.
圖7 數據庫管理運行序列圖
首先,開發(fā)人員通過過程①啟動虛擬平臺,然后通過流程②向Docker Hub 請求分別拉取MySQL、PHP、phpmyadmin 鏡像.使用過程⑥返回拉取的結果,若是拉取成功則會返回成功結果;反之,則返回失敗信息.接下來使用過程③run 命令啟動3 種鏡像,分別生成各自的容器并命名.若是啟動成功,則執(zhí)行過程⑤,返回容器ID;若失敗,則返回錯誤信息.
然后,使用IP 地址訪問phpmyadmin 瀏覽器網頁.進行過程④,管理平臺對輸入的用戶名密碼進行檢測.若是檢測成功,則登錄到數據庫.使用網頁版數據庫管理工具對數據庫進行操作,并使用過程⑦,返回結果;若失敗,則返回錯誤信息.
最后,通過SQL 語句對數據庫進行操作,使用過程⑧,反饋信息給虛擬平臺,讓物理機可以直接訪問數據庫網頁.
式(9)計算拉取全部鏡像的時間,式(10)計算啟動全部鏡像與構建網頁時間的和.式(9)加式(10)加編譯SQL 語句時間為總時間,如式(11).
連接靜態(tài)網頁服務器和數據庫的時間函數DBMOp-Time(n,T),算法如算法4.
算法4.DBMOPTime輸入:n.輸出:T.Tbegin = clock();for i = 1 to n Tpull += Pi;
Trun += Pi;Trun = Trun + Tweb;Send Web to user;Treturn = clock();T1 = Treturn - Tbegin;if T1 == Tpull + Trun + Tsql return T = T1;end
本節(jié)通過搭建Windows 和虛擬機環(huán)境的實驗場景,設計了測試CPU、完整性、吞吐量的實驗.實驗的配置環(huán)境的物理機操作系統(tǒng)為Windows 10,64-bit X86 系統(tǒng).物理機的處理器為Intel(R)Core(TM)i5-8265U CPU 1.60 GHz,內存為8 192 MB RAM,硬盤為高速固態(tài)硬盤,512 GB.實驗用的虛擬機操作系統(tǒng)為Ubuntu 16.04 LTS,包括1 個CPU 和20 GB 內存.內設的實驗軟件環(huán)境,如表2.
表2 實驗軟件及版本說明
通過傳統(tǒng)B/S、DoNginnx 和DoFlask 三種模式,對開發(fā)Web 應用程序的過程進行實驗,以Google 的cadvisor 技術監(jiān)控容器.檢測的過程,針對CPU 的占用情況、產品交付的完整性和服務器的吞吐量,得到下面的結果.
3.1.1 CPU 測試
圖8 顯示CPU 測試的結果,觀察各種方法在CPU的占用率.依序圖8(a)為傳統(tǒng)B/S 模式的CPU 占用率,DoNginx 模式CPU 占用率為圖8(b),以及圖8(c)的DoFlask 模式CPU 占用率.圖上顯示,傳統(tǒng)方法的CPU 占用率逐漸上升后趨于平穩(wěn).其次,DoNginx 模式的CPU 雖然起伏不定,但是占用率為最低.最后,DoFlask 模式在實驗初期消耗大量CPU,后期逐漸下降并趨于平穩(wěn).這幾個實驗橫軸均為4T,每個T為30 s.依照式(12)得出圖8 的平均值,依序分別為56%,24%,和43%.由此可知,DoNginx 模式占用的CPU 最低,而B/S 模式的占用率最高,消耗的資源最多.
圖8 各種方法的CPU 占用率
3.1.2 吞吐量測試
圖9 為吞吐量的測試分析圖,顯示各種方法的數據吞吐量.依圖9(a)-圖9(c)的順序顯示,傳統(tǒng)B/S 模式、DoNginx 模式和DoFlask 模式的吞吐量.由此可知,傳統(tǒng)方法的吞吐量在2.5 Mb/s 與7.5 Mb/s 之間,其次,DoNginx 模式的吞吐量在中間部分逐漸上升后又稍微下降并趨于平穩(wěn).然而,DoFlask 模式的吞吐量起伏不定,卻始終高于5 Mb/s.依照式(12)可以得出平均值,依序為4.8 Mb/s、3.8 Mb/s 和4.2 Mb/s.故此,結論是B/S 模式數據吞吐量最大,傳輸數據效率最快,而DoNginx 模式數據吞吐量最少.
圖9 各種方法的吞吐量
3.1.3 產品交付完整性測試
測試的過程,主要經過兩個步驟:(1)在服務器部署Web 應用程序,完成后傳輸到用戶端.(2)在用戶端,對Web 應用程序進行檢測.
在進行30 個產品的傳輸后,發(fā)現環(huán)境不兼容導致的錯誤有模塊錯位、數據消失以及樣式出錯等.圖10是測試后得出的結果,傳統(tǒng)B/S 模式開發(fā)的產品,傳輸到與開發(fā)環(huán)境不同的用戶端后,70%會出現以上錯誤,需要開發(fā)人員繼續(xù)進行維護.而且出錯率不穩(wěn)定,難以預測結果.以DoNginx 模式開發(fā)的產品,傳輸到不同環(huán)境用戶端后,20%會出現錯誤.使用DoFlask 開發(fā)的產品,出錯率僅為5%,并且數據保持穩(wěn)定,可以對未來的實驗結果進行推測.
圖10 各種方法的完整性測試
總結實驗測試的結果.首先,使用DoNginx 技術的CPU 占用率最低、效率高、內存占用較少和產品交付的出錯率較低;其次,使用DoFlask 技術對CPU 的占用率較低、占用內存最少,并且具有環(huán)境兼容性,大大提高產品交付的穩(wěn)定性;最后,傳統(tǒng)的B/S 模式對CPU 占用率最高、占用的內存最多和產品交付的出錯率最高.
本節(jié)對3 種模式性能測試實驗結果進行分析.
(1)分析CPU 占用率.第一,使用DoNginx 設計方案得到的產品運行速率快、數據傳輸效率高、在瀏覽器調試代碼方便、開發(fā)效率高且CPU 占用率低.第二,使用DoFlask 的設計方案使產品可靠性與穩(wěn)定性,大幅提高;通過可以打包生成鏡像的技術,提高產品重復利用率.第三,經過大量驗證性實驗得到的數據知道,使用Docker 輕量級容器技術,將會比使用傳統(tǒng)B/S 技術節(jié)約20%左右的CPU 利用率,平均減少50%的內存使用量.
綜合以上分析,圖11 顯示系統(tǒng)每Ts(實驗設置為30 s)收集CPU 的利用率,以及這3 種模式在不同階段的比較.
在圖11 的0-T時間段部分,可以看出此時DoFlask占用CPU 最多.然而,傳統(tǒng)B/S 模式占用的CPU 利用率比較少,這是因為此時處于修改代碼的狀態(tài);2T-4T時間段是處于程序執(zhí)行的狀態(tài).在T-2T時間段的部分,可以發(fā)現DoNginx 和DoFlask 都達到最大值,因為這兩種方案都處于執(zhí)行的狀態(tài),消耗資源最大.然而,在2T-3T的時間段,DoFlask 處于創(chuàng)建鏡像的狀態(tài),無需消耗大量的資源.3T-4T的時間段內,在另一臺服務器的DoFlask,處于拉取鏡像和執(zhí)行程序的狀態(tài),此時消耗資源較多.所以,可以得知無論在哪一階段,DoNginx都是CPU 占用率最低的技術,DoFlask 緊隨其后.
圖11 CPU 占用率比較圖
(2)分析數據吞吐量.經由圖12 的吞吐量比較圖乃是以每一個Ts(30 s)為單位,收集數據傳輸吞吐量后分析,有以下兩點.第一,傳統(tǒng)B/S 模式部署網頁的優(yōu)點是傳輸數據速度快,數據吞吐量大,并且較為平穩(wěn).第二,DoNginx 和DoFlask 技術在前期的數據傳輸量小,后期逐漸增加,這是因為T-3T時間段任務是拉取和生成鏡像;3T-4T時間段任務是執(zhí)行程序.
圖12 數據吞吐量比較圖
(3)分析交付完整性.使用DoFlask 模式創(chuàng)建網頁,將開發(fā)網頁服務器的文件打包生成鏡像,然后上傳到云空間,可以在其它服務器下載并啟動此鏡像.這種方法完美的解決環(huán)境不兼容的問題,保證交付產品的完整性.所以DoFlask 模式交付完整性最高.
根據以上的3 點分析,歸納內容如表3.它顯示各個系統(tǒng)模式的性能測試結果.
表3 各模式的性能測試表
(4)分析變異數狀態(tài).根據收集的數據,式(13)得出標準差,使用式(14)得出變異數.從變異數變異的程度,可以看出3 種模式彼此之間的不同.
總結得出表4,發(fā)現CPU 的變異程度大于完整性測試,完整性測試大于數據吞吐量.B/S 模式的CPU 占用率和吞吐量的變異程度較高,完整性測試變異程度最高.DoNginx 模式的CPU 占用率變異程度最高,吞吐量和完整性測試變異程度較低.DoFlask 模式的CPU 占用率和完整性測試變異程度最低,吞吐量變異程度較高.所以,B/S 模式總體變異數最大也最不穩(wěn)定;DoNginx 模式變異數較低,較為穩(wěn)定;DoFlask 模式變異數最低,最為穩(wěn)定.
表4 CPU 和吞吐量的變異數狀態(tài)
綜合B/S 模式、DoNginx 和DoFlask 模式建構的網頁服務器過程,分析測試的性能后得出結論:利用DoFlask 模式建構網頁服務器比傳統(tǒng)B/S 模式和DoNginx 下的建構交付完整性提高20%-65%個級別,CPU 占用率較低,并且縮小內存占用量,明顯具備開發(fā)上的優(yōu)勢.
針對現有的B/S 模式開發(fā)網頁服務器存在數據傳輸慢、資源占用大且不兼容的缺點,提出了新型的Docker 技術分別結合Nginx 和Flask 的模型.對3 種開發(fā)模型進行研究和測試,根據3 種模式在開發(fā)性能和兼容性的不同,推斷出最適合開發(fā)網頁的模式為DoFlask 模式,為開發(fā)人員和運維人員節(jié)省大量開發(fā)交付與等待的時間,降低產品環(huán)境更新過程中可能的出錯率.此外,服務器虛擬化技術打破單應用單服務器的傳統(tǒng)部署模式,提高硬件資源的利用率,簡化服務器的運維管理工作,從而降低管理費用.
無論用DoNginx 或者DoFlask 結合數據庫技術,都可以快速地搭建Web 系統(tǒng).對于一般的初學者而言,需要了解和掌握全部的技術,還是需要一定的時間學習和探索.未來可以結合這兩種技術,提供即便沒有開發(fā)經驗的初學者,只要填入需求,依照發(fā)展的新算法,便能夠自動推薦并且直接生成基本網頁的系統(tǒng).