蔣少華,陳德健,蔡裕源,唐麗蓉,夏 楠,張燦源
(韶關學院信息科學與工程學院,廣東韶關512005)
隨著大數據、云計算的興起,人們對網絡的依賴越來越強,巨大的網絡業務隨之卷土而來,這既是機遇也是挑戰,快速拓展互聯網業務成為很多公司的核心戰略.若業務容量超過預期,需要在一個新的操作系統再重新部署一次軟件環境,傳統業務部署的流程總是需要經過開發人員部署軟件環境→測試運行→排錯→再測試運行→再排錯→業務上線,整個過程消耗至少3天,耗時耗力,不利于公司的良好發展.
Docker是一個近幾年興起的,開源的應用容器引擎,它重新定義了程序的開發、測試、交付以及程序的部署過程,開發人員可以打包自己的應用以及依賴包到一個可移植的容器中,然后發布到任何流行的Linux機器上,也可以實現虛擬化[1].每個運行的容器與容器之間,是相互隔離的,沒有任何接口,完全使用沙箱機制,類似i-Phone的各個應用之間的關系[2].性能開銷接近于零,可以很容易地在機器和數據中心中運行.Docker還有不依賴任何語言、框架或包裝系統的優點[3].
Docker引擎創建的容器進程伸縮性強,用戶可以方便、快捷增刪容器,數秒內就可以完成操作.用戶通過對Docker容器的優化配置,大大地減少了資源的浪費,降低資源成本,提高數據中心的利用率,使服務器資源得到最有效的利用[4].現今市場上己有各種比較成熟的PaaS(Platform-as-a-Service)平臺,例如:國外谷歌的Google App Engine,微軟的Windows Azure Platform,國內百度的百度應用引擎Baidu App Enginee(BAE),阿里的阿里云Aliyun Cloud Enginee(ACE)等.
針對傳統業務部署出現的軟件交付困難,產品上線困難等問題,設計了基于Docker的計算機應用PaaS服務模式平臺,可以有效實現工程快速構建、環境迅速部署、平臺便捷管理等功能.
Docker技術快速部署系統需要完成的模塊與主要功能為:
(1)服務器虛擬化:利用kvm對服務器進行虛擬化,可以極大地提高服務器的利用效率,虛擬機之間隔離性比較好,就好像每臺獨立的物理機,相互之間不會有影響.
(2)Docker容器集群:通過部署一個Docker容器集群,達到業務上的負載均衡,有效避免單點失效的災難,提高了系統的可靠性和安全性.
(3)Docker儲存驅動更換:DockerEngine的存儲驅動有loop-lvm和direct-lvm兩種配置模式,其中loop-lvm是默認的模式,由于官方明確不推薦使用該模式用于生產環境,在生產環境下應該使用direct-lvm驅動配置模式.
(4)Ceph集群:Ceph是一個強大穩定的分布式文件存儲系統,可以通過部署分布式文件系統,給Docker提供儲存塊RBD,實現Docker的rootfs也跑在網絡存儲之上,打造一個無本地磁盤的容器服務系統.
(5)本地私有鏡像庫:常用的鏡像可以自己寫Dockerfile自動生成,并且儲存在本地的鏡像庫,當需要的時候就可以直接拿來用,無需占用外網資源,而且Docker hup官網服務器在國外,進行鏡像拉取速度很慢,本地鏡像庫可以實現鏡像資源自給自足,節省大量的時間和網絡資源.
(6)gitlab版本控制器:基于Docker的計算機應用快速部署平臺作為一個PaaS服務模式的平臺,需要給開發者提供一個本地的代碼托管平臺,提高開發團隊的協同開發效率,用戶在開發好項目的同時可以立即利用快速部署平臺測試,同時開發者也可以在gitlab上進行自動化構建.
(7)shipyard容器集中管理平臺:在shipyard平臺上,用戶可以比較直觀地看到容器的情況,而且可以直接在瀏覽器頁面上對容器進行增刪查改的工作,通過web頁面了解和管理業務,對于技術人員或者非技術人員都方便操作.
系統方案設計包括集群設計、集群管理、業務管理3部分[5].系統利用Docker技術將應用標準化,實現資源的最大利用,節省應用部署時間.
Docker集群主要采用層次結構模型,整套結構設計見圖1.首先,需搭建部署開發環境:為了節省資源,提高開發效率,采用最小化Linux系統安裝(即沒有圖形界面的純命令行系統);其次,在這些環境下利用kvm虛擬化技術,對系統、網絡進行虛擬化;然后進行Docker集群的設計,利用ansible自動化運維工具,對各個虛擬子系統進行自動化管理,再通過安裝Docker服務,在Docker上構建registry、gitlab等服務的鏡像和容器,并且打通Docker hub,方便用戶對Docker服務的使用;最后利用shipyard技術對各個節點以及其容器和鏡像進行web界面管理,采用強大的rethinkdb數據庫對數據進行相關管理[6].
采用層次結構有兩個特點:①業務隔離:業務互相隔離,層次清晰;②故障定位快速:當發生故障時,可以根據故障原因快速定位故障點.
集群管理采用樹形拓撲結構(見圖2),集群管理結構有兩個優點:①業務易于伸縮.這種結構可以延伸出很多分支和子分支,這些新節點和新分支都能容易地加入拓撲內;②故障隔離較容易.如果某一分支的節點或線路發生故障,很容易將故障分支與整個系統隔離開來.
業務管理主要采用web頁面對容器進行管理,所有在系統上的業務都可以通過web頁面來進行管理,響應用戶操作,并且收集日志方便問題排查.頁面采用JS進行編寫,框架采用AngularJS.
采用AngularJS有兩個優點:①自定義Directive,比jQuery插件還靈活,封裝容易;②模塊化設計可以很容易的寫出可復用的代碼,對于敏捷開發的項目非常有幫助,業務流程見圖3.

圖1 集群設計結構

圖2 集群管理結構

圖3 業務管理流程圖
用shell編寫一個自動化測試腳本進行比對測試,具體腳本如下:
#!/bin/bash
function handle()
{start=$(date+%s%N)
start_ms=${start:0:16}
#輸入要執行的代碼或腳本
dockerstart f999dc296f34>/dev/null end=$(date+%s%N)
end_ms=${end:0:16}
echo"open the containercost time:"
echo"scale=6;($end_ms-$start_ms)/1000000"|bc}
handle.
物理機、虛擬機測試腳本:
#!/bin/sh
#ip為對應的物理機或虛擬機的ip
#把腳本放在容器測試腳本里面運行即可
ping-i 0.1-c 1 192.168.1.116>/dev/null
while((1==$?));
do
ping-i 0.1-c 1 192.168.1.116>/dev/null
done.
當測試開啟同樣版本的一個centos純命令行系統的響應時間,結果如下:Docker容器只用了1.56 s,物理機上耗時21.31s,在虛擬機上耗時33.74s,從測試數據來看,Docker的響應時間遠遠少于其他虛擬機,測試結果見圖4.
當測試開啟同樣版本的一個centos純命令行系統的鏡像大小,結果如下:Docker容器只有198 MB,而物理機和虛擬機的系統鏡像都要4 096 MB,資源占用較大.Docker容器、物理機和虛擬機測試比對結果見圖5.
從測試結果看,Docker容器有響應速度快,占有資源小的優點;物理機或虛擬機系統壞死需要重裝時也比較麻煩,耗時較多,而Docker引擎刪除和重建一個容器僅需一條命令,非??旖?,用在商業上,可以快速應對業務的伸縮,可以省時省資源.
測試通過利用負載均衡技術,將客戶的請求負載均衡地分配到各個不同的web節點中,從而大大提高了web服務器的可靠性和安全性,使其在高并發的訪問下可以持續地提供服務,避免宕機.在本地web服務器和Internet之間架設反向代理服務器,可以阻止用戶請求對web服務器的直接訪問,而且它會自動承擔對原始web服務器的靜態頁面請求,將服務請求按照預先配置的負載均衡策略分配給不同的Docker容器,以防止服務器過載,保護業務的安全性和穩定性.web集群服務器通過容器的快速響應部署,可以給業務的彈性伸縮帶來了極大的便利.web集群框架圖見圖6.

圖4 Docker容器、物理機、虛擬機的響應速度測試結果

圖5 Docker容器、物理機、虛擬機對比

圖6 web集群框架
測試方案模擬中小型公司的網站業務進行,在Docker集群中部署相同業務的網站(為了驗證負載均衡的效果,設計中每個網站的內容會不一樣),進行均衡負載.首先利用Dockerfile把需要的網站鏡像快速構建好,鏡像基于Ubuntu14.04,網站中部署好Nginx反向代理服務器,并且做好負載均配置.在不同的Docker節點中部署相同配置的網站,在宿主機上部署Nginx反向代理服務器,設置ip域名映射,采用平均策略的負載均衡,把Internet對宿主機web請求的訪問量以輪詢的方式分配給web集群中所有服務器,使得所有服務節點同時承擔外界對服務器的訪問,分解訪問壓力.訪問用戶在自己的客戶端設置web主機的域名解析,即可在瀏覽器上輸入域名訪問了.
實驗測試結果見圖7.當訪問主服務器的時候,web請求會將訪問壓力以輪詢的方式平均分配給每個服務節點,保證了公司業務的可靠性和穩定性.通過使用Docker容器技術,在設計的快速應用部署系統下,該web集群應用可以進行快速的部署和拓展,符合當下很多公司應對互聯網業務快速變化的需要,具有良好的應用前景.

圖7 web集群測試效果
系統利用Docker技術可以實現快速部署所需的應用系統,以最小的時間代價和成本代價快速完成繁瑣的環境部署工作,大大縮短了開發周期和部署時間,可以實現用最低的成本創造最大的效益,解決了傳統互聯網業務拓展時間普遍較長的問題.系統簡單、快速,滿足IT開發公司、企業、學校實驗室快速構建開放、測試和產品環境等各種需求.
[1]張忠琳,黃炳良.基于 openstack 云平臺的 docker應用[J].軟件,2014,35(11):73-76.
[2]張建,謝天鈞.基于Docker的平臺即服務架構研究[J].信息技術與信息化,2014(10):131-134.
[3]劉思堯,李強,李斌.基于 Docker技術的容器隔離性研究[J].軟件,2015,36(4):110-113.
[4]吳義鵬.基于容器虛擬化技術研究[J].軟件,2010,31(11):28-30.
[5]劉琳羽,南凱.一種基于Docker的開發者服務平臺設計[J].科研信息化技術與應用,2015,6(5):65-72.
[6]鄭玲,江萌.基于Docker彈性調度架構的研究[J].電腦編程技巧與維護,2016(23):15-17.