楊光
慶安集團(tuán)有限公司航空設(shè)備研究所 陜西 西安 710077
在云計(jì)算的應(yīng)用范圍日漸廣闊的當(dāng)今時(shí)代,接受云計(jì)算按需服務(wù)理念的各類企事業(yè)單位也日漸增多,此情況為軟件行業(yè)跨國公司提供了商機(jī)。尤其對于亞馬孫、谷歌、微軟與IBM等云計(jì)算巨頭而言,推行云計(jì)算相關(guān)業(yè)務(wù)能為其引入越來越多的服務(wù)營收,且已日漸成為此類公司主營業(yè)務(wù)中的重要組成部分。而云計(jì)算技術(shù)的發(fā)展不僅離不開虛擬化技術(shù)的支持,也離不開面向服務(wù)架構(gòu)的廣泛應(yīng)用。而近年來逐漸被越來越多的人所認(rèn)可的Docker虛擬化技術(shù),正是對操作系統(tǒng)虛擬化的利用,使得采取組件構(gòu)建的信息系統(tǒng)在云平臺中的部署更為便捷。
Docker是一項(xiàng)以LXC(Linux Containers)為基礎(chǔ)的虛擬化技術(shù)高級容器引擎,同時(shí)依托于Go語言實(shí)現(xiàn)的應(yīng)用于云平臺中的虛擬化技術(shù)。相較于傳統(tǒng)虛擬化技術(shù),Docker粒度更小、更輕量級,且無須指令級模擬或即時(shí)編譯。Docker所利用的Linux容器技術(shù)僅應(yīng)用相關(guān)源碼與依賴庫、環(huán)境配置等都打包起來建立一個(gè)沙盒執(zhí)行環(huán)境。Docker虛擬化技術(shù)有效的將由一個(gè)單獨(dú)操作系統(tǒng)管理的資源劃分到一個(gè)個(gè)孤立的組中,平衡了孤立的組之間資源使用需求的沖突,提升資源利用率。Docker容器能夠直接在核心CPU運(yùn)行本地指令,從而能夠有效避免虛擬化,也能夠避免系統(tǒng)調(diào)用替換中存在的復(fù)雜性,從而能與宿主機(jī)運(yùn)行性能更為接近。Docker虛擬化的構(gòu)建以應(yīng)用組件級虛擬化技術(shù)為依托,使得容器存在一定的獨(dú)立性與封閉性,運(yùn)行容器對其他容器或宿主環(huán)境不造成影響。且不同容器各具存儲空間,其各自進(jìn)程與網(wǎng)絡(luò)接口也各不相同。
在此基礎(chǔ)上,包含Linux系統(tǒng)運(yùn)行所需的應(yīng)用程序,卻不同于傳統(tǒng)虛擬化技術(shù),以容器運(yùn)行為依托的Docker虛擬化技術(shù)不存在對完整Linux操作系統(tǒng)進(jìn)行虛擬的操作,僅具備應(yīng)用程序運(yùn)行應(yīng)存在的核心操作系統(tǒng)環(huán)境。使得其存在啟動時(shí)間短,且空間占用少,便于分發(fā)復(fù)制等優(yōu)勢。與此同時(shí),也有與傳統(tǒng)技術(shù)相同的隔離性與安全性。基于此,從2013年Docker發(fā)布至今,其已獲得各類云計(jì)算服務(wù)提供商的認(rèn)可,并為應(yīng)用系統(tǒng)提供了便利,使其能夠?qū)崿F(xiàn)跨平臺部署,在各類云平臺中都能得以運(yùn)行[1]。
表1 Docker容器與虛擬機(jī)之間性能差異
要使當(dāng)下信息系統(tǒng)按照得以重構(gòu),以使其符合云平臺理念,可操作的途徑是對當(dāng)下信息系統(tǒng)設(shè)計(jì)進(jìn)行重組。在重組過程中,可使用SOA架構(gòu)使系統(tǒng)實(shí)現(xiàn)模塊化與服務(wù)化的目標(biāo),以此促進(jìn)其轉(zhuǎn)變?yōu)閃eb服務(wù)系統(tǒng),而此系統(tǒng)則由若干輕量級服務(wù)組件構(gòu)建構(gòu)成,且具備可分布性。在此情況下,原信息系統(tǒng)所具備的復(fù)雜程度得以有效降低,信息系統(tǒng)部署涉及的各類資源的量級也得以有效降低,從而讓信息系統(tǒng)擴(kuò)展向云平臺的途徑更具靈活性。以SOA架構(gòu)為依據(jù),部署Web服務(wù)提供組件的宿主機(jī)的網(wǎng)絡(luò)環(huán)境和操作系統(tǒng)環(huán)境直接影響著Web服務(wù)系統(tǒng)運(yùn)維是否便捷。在虛擬主機(jī)所提供的網(wǎng)絡(luò)環(huán)境相對統(tǒng)一的情況下,其涉及的操作系統(tǒng)環(huán)境也較為統(tǒng)一,使得日漸增多的Web服務(wù)系統(tǒng)得以于虛擬主機(jī)中被有效部署。但囿于虛擬機(jī)耗用的系統(tǒng)資源數(shù)量較大,且其被分配于操作系統(tǒng),而并不能被分配于Web服務(wù)組件,因此同一虛擬機(jī)中能夠部署的Web服務(wù)組件的數(shù)量已成為相關(guān)工作人員應(yīng)當(dāng)深入研習(xí)的重要課題。在此基礎(chǔ)上,一旦在Web服務(wù)組件短時(shí)間內(nèi)涉及大批復(fù)制與擴(kuò)展時(shí),最為迅速的方式是對虛擬機(jī)進(jìn)行復(fù)制與擴(kuò)展。但一臺物理主機(jī)可承擔(dān)的虛擬機(jī)數(shù)量存在限度,而虛擬機(jī)鏡像副本經(jīng)過復(fù)制后則不僅易提升宿主機(jī)系統(tǒng)資源開銷,也易提升其運(yùn)行效率[2]。
針對上述問題,Docker虛擬技術(shù)提出了相應(yīng)的解決方法。而其解決方案中的最主要思想是將Web服務(wù)系統(tǒng)組件在Docker容器中進(jìn)行部署。Docker使用平臺與其服務(wù)理念使Web 服務(wù)系統(tǒng)具備一定的敏捷性與共享性、可伸縮性,其應(yīng)用優(yōu)勢可概括為四點(diǎn),首先,Docker技術(shù)能夠迅速取得服務(wù)鏡像或創(chuàng)建服務(wù)鏡像。其占據(jù)的存儲空間大幅度減小,且其復(fù)制效率與傳輸效率都有所提升。其次,服務(wù)鏡像內(nèi)環(huán)境可度量。Docker容器具備一定的隔離性,此性質(zhì)使其涉及的Web服務(wù)組件處于運(yùn)行在獨(dú)立Linux主機(jī)的狀態(tài)。Docker技術(shù)可實(shí)現(xiàn)對外開放容器內(nèi)部網(wǎng)絡(luò)端口。此外,服務(wù)鏡像具備高伸縮性。最后,服務(wù)鏡像云端應(yīng)用便捷在云計(jì)算主要服務(wù)提供商的支持下,Docker技術(shù)已日漸為云計(jì)算公司所關(guān)注,進(jìn)而為其所利用。
圖1 基于Docker容器部署的Web服務(wù)調(diào)度組件運(yùn)行步驟
一般情況下,Web服務(wù)系統(tǒng)中的主要成員是服務(wù)調(diào)度組件與各類服務(wù)提供組件,其能夠?yàn)橄M(fèi)者提供相應(yīng)服務(wù)。以虛擬機(jī)部署的Web服務(wù)系統(tǒng)為基礎(chǔ),Web服務(wù)調(diào)度組件可完成服務(wù)提供組件的調(diào)用工作,同時(shí)對服務(wù)提供組件所處運(yùn)行狀態(tài)進(jìn)行監(jiān)控,以此使Web服務(wù)系統(tǒng)得以維持有效的常態(tài)運(yùn)行。而對于服務(wù)提供組件的啟動、停止以及遷移等工作,則由虛擬機(jī)管理軟件承擔(dān)。此類操作存在一定不足,即Web服務(wù)調(diào)度組件并未實(shí)現(xiàn)全權(quán)管轄其注冊的服務(wù),使Web服務(wù)系統(tǒng)運(yùn)營與維護(hù)工作得以落實(shí)則主要借助于虛擬機(jī)管理軟件,運(yùn)維人員需結(jié)合服務(wù)調(diào)度組件與虛擬機(jī)管理軟件,以此使Web服務(wù)系統(tǒng)能夠發(fā)揮自身的自動化管理功能[3]。
但在Web服務(wù)提供組件部署于Docker容器后,Web服務(wù)調(diào)度組件不僅能履行發(fā)現(xiàn)服務(wù)與調(diào)用服務(wù)的基本功能,也可對Web服務(wù)提供組件進(jìn)行啟動與停止、復(fù)制、刪除等工作,在此情況下,Web服務(wù)調(diào)度組件可監(jiān)管其注冊的全部服務(wù)。此時(shí)服務(wù)調(diào)度組件除對Web服務(wù)提供組件調(diào)用地址進(jìn)行存儲外,也對其端口信息進(jìn)行存儲,同時(shí)承擔(dān)對Web服務(wù)提供組件Docker容器信息的維護(hù)工作,其中不僅創(chuàng)建Docker鏡像位置,也能實(shí)現(xiàn)對Docker鏡像位置的運(yùn)行與停止、刪除其Shell腳本等工作。在對Shell腳本與JAVA管理程序進(jìn)行開發(fā)的基礎(chǔ)上即可實(shí)現(xiàn)對Docker技術(shù)的自動化調(diào)用,使其所提供的容器配置命令能夠?qū)崿F(xiàn)服務(wù)的再次配置與運(yùn)行。Docker容器所具備的秒級啟動速度使服務(wù)存在更高程度的可用性。
當(dāng)服務(wù)需要進(jìn)行擴(kuò)展,服務(wù)調(diào)度組件則可對預(yù)設(shè)的Shell 腳本加以運(yùn)行,在Docker宿主機(jī)內(nèi)部完成新承載服務(wù)提供組件的容器副本進(jìn)行創(chuàng)建,并在此基礎(chǔ)上運(yùn)行,使其后續(xù)服務(wù)請求引導(dǎo)能夠投入到新Web服務(wù)提供組件副本。但對于無須再次運(yùn)行的Docker容器副本,服務(wù)調(diào)度組件則可執(zhí)行腳本實(shí)現(xiàn)對Web服務(wù)提供組件副本的停止和刪除,以此使Web服務(wù)系統(tǒng)能夠完成自動伸縮工作。應(yīng)Docker容器技術(shù)后,可以通過簡單的程序開發(fā)就實(shí)現(xiàn)服務(wù)的高可用性和可伸縮性,而不需要依賴專業(yè)的虛擬機(jī)管理軟件的輔助來實(shí)現(xiàn)這些功能,真正實(shí)現(xiàn)了服務(wù)調(diào)度組件作為“服務(wù)管理者”角色在SOA系統(tǒng)中所起的管理者作用。Docker 技術(shù)要求 Web 服務(wù)提供組件在設(shè)計(jì)時(shí)盡量小型化[4]。在Web服務(wù)系統(tǒng)設(shè)計(jì)模型中,基于實(shí)體主機(jī)的服務(wù)調(diào)度組件由兩部分構(gòu)成,其中一部分為面向服務(wù)消費(fèi)者的服務(wù)注冊組件,另一部分則是部署于Linux宿主機(jī)的服務(wù)管理組件。當(dāng)Docker服務(wù)鏡像分布于不同主機(jī)中部署時(shí),則應(yīng)當(dāng)為其中的每個(gè)主機(jī)都進(jìn)行服務(wù)管理組件部署,同時(shí)需要使服務(wù)注冊組件同服務(wù)管理組件建立一定關(guān)聯(lián)。但在Web服務(wù)系統(tǒng)位于云平臺時(shí),云主機(jī)中存在的資源則更具可伸縮性,在此情況下,也可對服務(wù)注冊組件與服務(wù)管理組件進(jìn)行合并,使其合并為服務(wù)高度組件,從而以一體身份部署于運(yùn)行Docker服務(wù)鏡像的云主機(jī)中。
根據(jù)Web服務(wù)系統(tǒng)改造方案,可由編程方式實(shí)現(xiàn)服務(wù)管理組件與服務(wù)注冊證件,再自行創(chuàng)建Docker容器,并在其中完成服務(wù)提供組件部署,以此使Docker容器能夠部署于Web服務(wù)系統(tǒng)。此過程主要分為三個(gè)步驟,首先需要?jiǎng)?chuàng)建運(yùn)行環(huán)境,并在此環(huán)境中創(chuàng)建Docker鏡像,其次需要部署Docker鏡像,并完成對Shell遠(yuǎn)程管理腳本的編寫,最終實(shí)現(xiàn)服務(wù)注冊,并完成對管理腳本的遠(yuǎn)程調(diào)用,使服務(wù)提供組件所在的宿主機(jī)IP地址與調(diào)用端口等各類信息都能存儲于服務(wù)管理數(shù)據(jù)庫中[5]。完成上述三個(gè)步驟后,基于Docker容器的Web服務(wù)系統(tǒng)即可開始對外提供服務(wù)。
綜上所述,Docker技術(shù)使得Web服務(wù)系統(tǒng)的開發(fā)工作與運(yùn)營工作、維護(hù)工作都日漸簡化,且以Docker技術(shù)為依托,可實(shí)現(xiàn)Web系統(tǒng)服務(wù)統(tǒng)在敏捷開發(fā)、靈活部署方面滿足實(shí)際需求。且在Docker運(yùn)用范圍日漸拓寬的前提下,其為Web服務(wù)帶來的積極作用與正面影響也日漸增強(qiáng)。且其優(yōu)勢相對較多,不僅靈活性強(qiáng),也能夠?qū)崿F(xiàn)自動運(yùn)維。由此可見,只要通過創(chuàng)建服務(wù)的容器運(yùn)行環(huán)境,并承載自行開發(fā)的輕量級Web服務(wù)組件,就可以將該組件發(fā)布為Docker服務(wù)鏡像,在不同的平臺和系統(tǒng)中運(yùn)行,并靈活組合成不同的Web服務(wù)系統(tǒng)滿足日新月異的需求。