国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

一種概率模型的Docker鏡像刪減策略

2018-10-26 02:23鄧玉輝
關(guān)鍵詞:概率模型鏡像容器

周 毅,鄧玉輝,2

1(暨南大學(xué) 信息學(xué)院計(jì)算機(jī)科學(xué)系,廣州 510632)2(中國(guó)科學(xué)院計(jì)算技術(shù)研究所 計(jì)算機(jī)體系結(jié)構(gòu)國(guó)家重點(diǎn)實(shí)驗(yàn)室,北京 100190)

1http://jaso-nwilde-r.com/blog/2014/08/19/squashing-docker-images/

1 引 言

Docker容器技術(shù)是一種類似OpenVZ[6],Zap[7]和LXC[5]的操作系統(tǒng)級(jí)虛擬化技術(shù),用戶可以創(chuàng)建和管理容器,高效快捷得使用多個(gè)虛擬環(huán)境.因而每一個(gè)工作負(fù)載都可以運(yùn)行在獨(dú)立的虛擬環(huán)境中,并且容器之間也可以獲得較好的工作效率和隔離度.容器技術(shù)以共享內(nèi)核資源的方式區(qū)別于傳統(tǒng)虛擬機(jī),實(shí)現(xiàn)輕量級(jí)的應(yīng)用隔離[3].

現(xiàn)如今,隨著云計(jì)算和大數(shù)據(jù)規(guī)模的日益擴(kuò)大,工業(yè)界對(duì)產(chǎn)品持續(xù)集成和高效發(fā)布的需求與日俱增[8],學(xué)術(shù)界也有很多對(duì)鏡像存儲(chǔ)和拉取的研究[12].由于鏡像包含了所有運(yùn)行時(shí)依賴,從而導(dǎo)致鏡像的體積往往很大,在本地存儲(chǔ)和導(dǎo)出遷移的過(guò)程中會(huì)產(chǎn)生較大的磁盤和網(wǎng)絡(luò)I/O開銷,增大了部署運(yùn)維成本,同時(shí)也限制了鏡像的遷移和擴(kuò)展[2].鏡像應(yīng)該只包含一種服務(wù)所需要的依賴環(huán)境,因此,對(duì)于過(guò)于龐大和冗余的鏡像包的刪減工作就顯得尤為重要[9].

本文提出了一種基于概率模型的Docker鏡像刪減策略,可以實(shí)現(xiàn)在本地鏡像存儲(chǔ)時(shí),通過(guò)增大基礎(chǔ)鏡像的復(fù)用率來(lái)減小本地存儲(chǔ)開銷;并且對(duì)于要導(dǎo)出的鏡像,則是收集原鏡像運(yùn)行時(shí)訪問(wèn)到的文件,同時(shí)建立導(dǎo)出概率模型,對(duì)達(dá)到導(dǎo)出閾值的目錄下文件全部導(dǎo)出,從而在減少鏡像大小的同時(shí)兼顧了鏡像功能的完備性.

2 背景知識(shí)

2.1 鏡像的寫時(shí)復(fù)制(CoW)機(jī)制

為了使容器最大程度復(fù)用鏡像層數(shù)據(jù),減少磁盤占用空間和磁盤I/O開銷,Docker采用如圖1所示的堆棧式的鏡像存儲(chǔ)模型和寫時(shí)復(fù)制(CoW)機(jī)制.CoW機(jī)制的核心在于,當(dāng)讀取已存在于下層的數(shù)據(jù)時(shí),上層將不產(chǎn)生任何增量部分,僅當(dāng)需要修改下層已存在的文件時(shí),上層將會(huì)將該文件復(fù)制一份,然后再進(jìn)行修改,而下層的原有文件則不會(huì)被更改,但從上層的視角來(lái)看,該文件已被修改.同樣的,當(dāng)上層需要?jiǎng)h除下層中已存在的文件時(shí),只需要添加一種占位符形式的特殊文件——whiteout,雖然從上層視角看確實(shí)刪除了,但實(shí)際上該文件依然存在于下層中,并且實(shí)際占用的磁盤空間不會(huì)減少.

圖1 鏡像的寫時(shí)復(fù)制(CoW)機(jī)制Fig.1 Copy on write mechanism of image

Docker容器的組織結(jié)構(gòu)都采用了CoW機(jī)制,鏡像層作為只讀層,提供基礎(chǔ)數(shù)據(jù)共享,容器層則用于存儲(chǔ)當(dāng)前鏡像的修改部分,CoW的這種不改變下層數(shù)據(jù)的特性也決定了鏡像的大小只會(huì)增長(zhǎng)不會(huì)減小.因此,想要減小鏡像的大小,僅僅直接在上層容器里刪除相關(guān)內(nèi)容是無(wú)法作用于下層鏡像層的.而如果直接對(duì)鏡像層進(jìn)行處理,可能會(huì)影響到其他依賴該鏡像的容器,經(jīng)過(guò)修改的鏡像也無(wú)法保證原有功能的完備性.

我們的工作即針對(duì)Docker鏡像的這種特性,在本地存儲(chǔ)和導(dǎo)出鏡像時(shí)進(jìn)行優(yōu)化,使得鏡像在本地存儲(chǔ)時(shí)占用更少的存儲(chǔ)空間,對(duì)于導(dǎo)出的鏡像則有較小的體積和較完備功能.

2.2 鏡像刪減算法

在現(xiàn)有工作中,大多數(shù)都是根據(jù)鏡像層CoW特性,采用靜態(tài)分析算法1尋找鏡像中的whiteout文件,然后刪除鏡像層中相對(duì)應(yīng)的文件1;或者從dockerfile的編寫上進(jìn)行規(guī)范,使得生產(chǎn)的鏡像更小更安全[10],其缺點(diǎn)在于無(wú)法對(duì)已制成的鏡像進(jìn)行處理.

而算法1的缺點(diǎn)在于只能對(duì)特定的aufs文件驅(qū)動(dòng)的鏡像進(jìn)行處理,而對(duì)于其他文件驅(qū)動(dòng),比如device-mapper,btrfs等,這些文件驅(qū)動(dòng)的鏡像存儲(chǔ)位置和鏡像讀寫方式和aufs有很大區(qū)別[11],無(wú)法直接通過(guò)路徑訪問(wèn),因此也無(wú)法進(jìn)行鏡像刪減.另外,對(duì)于不包含whiteout的鏡像文件,即鏡像層中沒(méi)有需要?jiǎng)h除的內(nèi)容,那么算法1就幾乎不能有所刪減.

另一種方法則完全區(qū)別于算法1中采用的靜態(tài)分析思路,使用了算法2的動(dòng)態(tài)分析方法:程序從待修改的鏡像中,運(yùn)行起一個(gè)容器,并在該容器中植入一個(gè)探針,用于實(shí)時(shí)捕捉在容器中執(zhí)行的進(jìn)程和訪問(wèn)到的文件.等到該容器運(yùn)行結(jié)束,探針會(huì)匯總在容器運(yùn)行過(guò)程中所訪問(wèn)到的相關(guān)依賴文件,并將這些文件導(dǎo)出,重新生成一個(gè)新鏡像,從而達(dá)到減少鏡像文件數(shù)量的目的.我們采用如圖2所示的UML活動(dòng)圖來(lái)描述算法2.

Algorlthm 1:Delete Whiteouts Data:FileName,ImageDir,DeletedFile1 for FileName in ImageDir do// If start with whiteout2 if startWith(FileName,“.wh.”)==0 then // Remove deleted files3 removeAll(FileName); // Remove the whiteout itself4 DeletedFile=truncate(FileName,“.wh.”);5 removeAll(DeletedFile);

算法2可以最大程度減小鏡像的大小,并且不會(huì)像算法1受限于特定文件驅(qū)動(dòng).但缺點(diǎn)在于,算法2只依賴于容器運(yùn)行中實(shí)際訪問(wèn)到的文件,如果在運(yùn)行過(guò)程中沒(méi)有較全面覆蓋到所需的文件,則存在過(guò)度刪減的可能.

圖2 算法2:獲取容器內(nèi)訪問(wèn)文件活動(dòng)圖Fig.2 Algorithm 2:UML activity diagram of getting container access files

針對(duì)上述問(wèn)題,我們通過(guò)共享基礎(chǔ)鏡像減少本地鏡像存儲(chǔ)開銷;同時(shí)基于算法2的動(dòng)態(tài)分析加以概率模型,對(duì)導(dǎo)出鏡像所需文件進(jìn)行預(yù)測(cè),使得在減少鏡像大小的同時(shí)兼顧鏡像功能的完備性.

3 基于動(dòng)態(tài)分析和概率模型的刪減策略

為了實(shí)現(xiàn)Docker鏡像刪減策略,本文設(shè)計(jì)了一種本地存儲(chǔ)和導(dǎo)出鏡像優(yōu)化工具——docker-jimp,它可以有效地降低鏡像在本地存儲(chǔ)時(shí)所占用的磁盤空間,同時(shí)也大大減小了導(dǎo)出的鏡像的大小,便于鏡像的導(dǎo)出和遷移.

3.1 docker-jimp整體結(jié)構(gòu)

對(duì)于Docker鏡像的數(shù)據(jù)刪減包含本地存儲(chǔ)的鏡像和導(dǎo)出的鏡像.本地存儲(chǔ)時(shí),通過(guò)增大鏡像之間基礎(chǔ)鏡像層的復(fù)用率,讓更多的上層鏡像復(fù)用同一個(gè)基礎(chǔ)鏡像,從而減小鏡像在本地的總體存儲(chǔ)開銷;在導(dǎo)出鏡像時(shí),主要通過(guò)獲取文件訪問(wèn)信息,使生成的刪減鏡像包含鏡像功能所依賴的文件,并使用概率模型預(yù)測(cè)導(dǎo)出鏡像所需文件,構(gòu)建出新鏡像.其整體結(jié)構(gòu)如圖3.

3.2 刪減評(píng)估模型

鏡像刪減的關(guān)鍵在于對(duì)鏡像行為的分析和基礎(chǔ)鏡像的選取,其決定了生成鏡像的可靠性和最終生成的鏡像大小.過(guò)多的刪減可能會(huì)導(dǎo)致鏡像功能不穩(wěn)定,而僅僅是刪除鏡像中已標(biāo)記為刪除的文件又不能達(dá)到刪減鏡像的目的.為了達(dá)到最佳的刪減效果,需要建立在不同刪減模式下的評(píng)估模型.在本文中,我們主要對(duì)以下兩種情況的模型分別進(jìn)行分析.

圖3 docker-jimp整體結(jié)構(gòu)圖Fig.3 Integral structure diagram of docker-jimp

1)本地存儲(chǔ)模式

Docker鏡像在設(shè)計(jì)時(shí)采用了分層結(jié)構(gòu),其目的就在于希望可以充分利用本地存儲(chǔ)的鏡像層之間的共享關(guān)系,從而減少存儲(chǔ)開銷.我們對(duì)本地存儲(chǔ)已有的鏡像進(jìn)行分析得知,鏡像在本地存儲(chǔ)時(shí),鏡像都包括基礎(chǔ)鏡像層及實(shí)現(xiàn)自身鏡像功能的其他層.基于上述事實(shí),對(duì)于存儲(chǔ)在本地的鏡像,我們盡量加大其對(duì)基礎(chǔ)鏡像的復(fù)用率,從而降低全局鏡像存儲(chǔ)的總開銷.

(1)

其中,S表示共享基礎(chǔ)鏡像層的大小,L表示該層所共享次數(shù).η值越大表明基礎(chǔ)鏡像層的復(fù)用率越高,對(duì)全局存儲(chǔ)開銷的提升效果越顯著.因此,可以根據(jù)η值,選取本地共享的基礎(chǔ)鏡像.

2)導(dǎo)出鏡像模式

對(duì)于導(dǎo)出鏡像,我們希望其在滿足功能的同時(shí)大小盡可能小.理論上,我們可以直接保留容器運(yùn)行中訪問(wèn)到的文件,但在實(shí)際中,僅僅通過(guò)保留部分時(shí)間運(yùn)行的文件將很難覆蓋到所有需要的文件.比如,對(duì)于gcc鏡像,在運(yùn)行過(guò)程中幾乎不可能訪問(wèn)過(guò)所有頭文件,但對(duì)于導(dǎo)出的gcc鏡像,提供較為完整的頭文件庫(kù)無(wú)疑是確保功能相對(duì)完備的保證.

為了使得導(dǎo)出鏡像占用空間較小,同時(shí)能更完整包含實(shí)現(xiàn)其功能的依賴文件,因此,既需要導(dǎo)出在容器運(yùn)行過(guò)程中訪問(wèn)到的文件,又要對(duì)其他未訪問(wèn)文件的導(dǎo)出可能性進(jìn)行預(yù)測(cè).本文中我們以目錄為單位,預(yù)測(cè)目錄y:a、只導(dǎo)出容器運(yùn)行中訪問(wèn)到的文件;b、導(dǎo)出目錄下所有文件.進(jìn)一步的,我們定義:

目錄y={子目錄集Z,依賴文件集X,其他未訪問(wèn)文件},事件Y={目錄y被全部導(dǎo)出},則目錄y中文件全部導(dǎo)出的概率為P(Y),其取值與目錄y中包含的依賴文件數(shù)量以子目錄的全部導(dǎo)出概率相關(guān),而子目錄的全部導(dǎo)出概率則需要迭代至葉子目錄求得,圖4展示了目錄y的導(dǎo)出模式.這種模型建立依據(jù)源于在一般目錄結(jié)構(gòu)設(shè)計(jì)里,每個(gè)目錄里的文件是實(shí)現(xiàn)某種功能的集合,當(dāng)一個(gè)目錄內(nèi)有較多文件被導(dǎo)出,那很有可能表明,這個(gè)目錄里的文件是實(shí)現(xiàn)某功能的核心,因此這個(gè)目錄下的所有文件也應(yīng)該需要被導(dǎo)出.

圖4 目錄y導(dǎo)出模式示意圖Fig.4 Export schema of directory y

為了實(shí)現(xiàn)導(dǎo)出模型,我們定義導(dǎo)出鏡像所需要的所有依賴文件集合為Φ,其容量為n,目錄y中包含的依賴文件集合X={x1,x2,…,xl}、子目錄集Z={z1,z2,…,zM}.

同樣,定義目錄y中所包含的子目錄zj(j∈[1,m])被全部導(dǎo)出的事件為φj={子目錄zj全部導(dǎo)出},那么子目錄zj的全部導(dǎo)出概率則為P(φj),其值大小由子目錄遞歸計(jì)算得出,而zj對(duì)目錄y導(dǎo)出的條件概率P(Y|φj)則體現(xiàn)為zj對(duì)目錄y的影響因子α,即P(Y|φj)=α.對(duì)于文件系統(tǒng)中的任何一個(gè)目錄,都包括0到多個(gè)文件和子目錄.因此,對(duì)于任何一個(gè)目錄y,其全部導(dǎo)出概率P(Y)可描述為目錄下所有依賴文件及子目錄的全概率,即:

(2)

(3)

其中l(wèi)為目錄y下包含的依賴文件數(shù),m為子目錄數(shù),我們給定一個(gè)閾值ε(0ε1),若P(Y)>ε,則將目錄y下的所有文件全部導(dǎo)出.

3.3 實(shí)現(xiàn)手段

為了達(dá)到預(yù)計(jì)的目的:動(dòng)態(tài)收集容器的運(yùn)行使用依賴情況,完成3.2中的兩種模型.需要實(shí)現(xiàn)的內(nèi)容如下:

1)訪問(wèn)文件信息收集

為了動(dòng)態(tài)捕捉鏡像在運(yùn)行時(shí)所訪問(wèn)的文件,我們采用Fanotify文件系統(tǒng)通知機(jī)制[4]對(duì)鏡像內(nèi)文件訪問(wèn)事件進(jìn)行收集.結(jié)合每個(gè)鏡像的功能,使用該鏡像運(yùn)行若干個(gè)用例,對(duì)所有用例訪問(wèn)到的文件取并集,從而得到鏡像訪問(wèn)文件集合.

具體實(shí)現(xiàn)是通過(guò)4個(gè)并發(fā)進(jìn)程及線程之間的相互通 信完成,分別為User、Sensor、Monitor和Collector.User是向探針發(fā)出開始或結(jié)束指令的進(jìn)程,通常是運(yùn)行在主機(jī)中,與Sensor通過(guò)unix socket進(jìn)行通信;Sensor即在容器中進(jìn)行文件訪問(wèn)信息捕獲的探針進(jìn)程,主要作用是負(fù)責(zé)接收Monitor捕獲而來(lái)的報(bào)告(report),并把這些報(bào)告上報(bào)給User進(jìn)程;Monitor線程是負(fù)責(zé)匯總從Collector線程收集到的事件(even),并整理成報(bào)告提交給Sensor.

圖5是文件訪問(wèn)信息收集的數(shù)據(jù)流圖,整個(gè)系統(tǒng)有三條數(shù)據(jù)流:stop流,由User發(fā)出,在整個(gè)探針信息收集完成后,停止探針工作,Sensor收到stop信號(hào)后,會(huì)將其傳送給Monitor,由Monitor執(zhí)行清理工作(cleanup);report流,由Monitor發(fā)出,在Monitor中執(zhí)行事件處理函數(shù)(ProcessEven),將從Collector收集到的原始訪問(wèn)信息轉(zhuǎn)化為report,傳回給Sensor,進(jìn)而由Sensor發(fā)送給User;even流,由Collector發(fā)出,是Collector在容器運(yùn)行過(guò)程中執(zhí)行事件捕獲函數(shù)(GetEven),實(shí)時(shí)收集文件訪問(wèn)原始信息.

圖5 文件訪問(wèn)信息收集數(shù)據(jù)流圖Fig.5 Data flow diagram of access information

2)刪減模型實(shí)現(xiàn)

刪減模型的實(shí)現(xiàn)分為本地存儲(chǔ)模式和導(dǎo)出模式,我們分別進(jìn)行討論:

本地存儲(chǔ)模式:根據(jù)公式(1)的模型,本地存儲(chǔ)模式的任務(wù)核心在于獲取本地每個(gè)鏡像的存儲(chǔ)空間大小,以及基礎(chǔ)鏡像層的大小.在實(shí)現(xiàn)上,由于與Docker的守護(hù)進(jìn)程進(jìn)行通信的方式是利用Socket通信,通過(guò)向守護(hù)進(jìn)程發(fā)送Get請(qǐng)求來(lái)獲取到某一鏡像的配置信息,從而得到鏡像每一層的大小.

之后對(duì)新加入的鏡像進(jìn)行分析,取得其中所包含的文件,剔除所有與共享基礎(chǔ)鏡像重復(fù)的部分.最后,使用選定的共享基礎(chǔ)鏡像和剔除后的剩余部分重新生成一個(gè)新的鏡像.從而該鏡像的基礎(chǔ)鏡像部分不會(huì)額外占用本地的磁盤空間,達(dá)到減少本地存儲(chǔ)開銷的目的.

導(dǎo)出鏡像模式:實(shí)現(xiàn)導(dǎo)出鏡像模型的核心在于對(duì)生成鏡像的文件訪問(wèn)信息進(jìn)行收集和分析,由公式(3)可知,我們主要關(guān)注的是目錄y下包含的依賴文件數(shù),通過(guò)找出每個(gè)目錄下文件和子目錄的數(shù)量,并從葉子目錄開始計(jì)算,向上迭代直至根目錄,然后代入公式(3)中計(jì)算目錄y的導(dǎo)出概率.進(jìn)而可以得到文件系統(tǒng)中每個(gè)目錄對(duì)應(yīng)的導(dǎo)出概率,對(duì)于超過(guò)閾值ε的目錄,就直接導(dǎo)出目錄中的全部文件.

4 實(shí)驗(yàn)評(píng)估和分析

為了進(jìn)一步驗(yàn)證本文提出的刪減策略的有效性,對(duì)本地存儲(chǔ)模式和鏡像導(dǎo)出模式分別進(jìn)行了驗(yàn)證.對(duì)于本地存儲(chǔ)模式,實(shí)驗(yàn)主要對(duì)鏡像集在進(jìn)行基礎(chǔ)鏡像替換后每類鏡像的變化情況以及占用的實(shí)際存儲(chǔ)空間的變化情況進(jìn)行了統(tǒng)計(jì);對(duì)于導(dǎo)出鏡像模式,我們以gcc鏡像為例,在該鏡像中編譯多種代碼,統(tǒng)計(jì)出每個(gè)目錄的導(dǎo)出概率,并得出在不同的導(dǎo)出閾值ε下,需要導(dǎo)出的文件數(shù)量和對(duì)應(yīng)導(dǎo)出鏡像的大小.

4.1 實(shí)驗(yàn)環(huán)境及說(shuō)明

本文實(shí)驗(yàn)采用Inter Core i7-6700的 CPU,4GB DDR3 RAM,和7200RPM 500GB SATA硬盤,并操作系統(tǒng)為CentOS7.3,Linux內(nèi)核版本是3.10.0,Docker版本是1.12.0對(duì)應(yīng)的API版本為1.27,采用的編譯語(yǔ)言Golang版本為1.7.5,實(shí)驗(yàn)具體環(huán)境具體參數(shù)如表1所示.

表1 實(shí)驗(yàn)環(huán)境參數(shù)
Table 1 Parameters of experiment environment

環(huán) 境描 述CPUInter Core i7-6700Memory3797628 kBOSCentOS7.3Kernel3.10.0-514.16.1.e17DockerAPI Version 1.27GolangVersion 1.7.5

4.2 數(shù)據(jù)集分析

本文的數(shù)據(jù)集采用文獻(xiàn)[1]中的實(shí)驗(yàn)鏡像集,其中包括共10個(gè)數(shù)據(jù)庫(kù)鏡像,13個(gè)操作系統(tǒng)鏡像,17個(gè)編程語(yǔ)言類鏡像,4個(gè)web框架鏡像,6個(gè)web服務(wù)鏡像和7個(gè)其他工具鏡像,共57個(gè),均從docker hub上拉取.圖6是每個(gè)鏡像大小占總鏡像的百分比,從圖中可以看出,操作系統(tǒng)類鏡像所占比例相對(duì)其他都要少,這是因?yàn)槠渌R像往往都是以某個(gè)操作系統(tǒng)鏡像為基礎(chǔ)搭建的.而比重最大的則是編程語(yǔ)言類鏡像,這是因?yàn)槠渲邪罅康囊蕾囄募?其中最大的gcc:7.1.0鏡像,則達(dá)到了1.64G.

我們對(duì)鏡像集中的鏡像進(jìn)行分析,主要統(tǒng)計(jì)了鏡像每層的占用空間大小.結(jié)果發(fā)現(xiàn)每個(gè)鏡像各層的大小差異很大,而基礎(chǔ)鏡像層的大小往往位于最大的三層中,平均每個(gè)鏡像中最大的層可占鏡像總大小的67%.從圖7中可以看出,一個(gè)鏡像中的數(shù)據(jù)基本都集中在最大三層中,尤其是操作系統(tǒng)類鏡像,幾乎所有數(shù)據(jù)都只存在一層中.因此,通過(guò)共享同一個(gè)基礎(chǔ)鏡像層,增加本地中基礎(chǔ)鏡像層的復(fù)用率,可以達(dá)到多個(gè)鏡像共用同一個(gè)基礎(chǔ)鏡像層的效果,從而減少鏡像整體在本地占用的磁盤空間大小.

圖6 實(shí)驗(yàn)鏡像集Fig.6 Set of experimental images

4.3 實(shí)驗(yàn)結(jié)果分析

4.3.1 不同基礎(chǔ)鏡像替換后各個(gè)類型鏡像的影響

在本地存儲(chǔ)模式下,通過(guò)增大鏡像之間共享的鏡像層的復(fù)用率,讓更多的上層鏡像復(fù)用同一個(gè)基礎(chǔ)鏡像,從而減小鏡像在本地的總體存儲(chǔ)開銷.我們選取鏡像集中43個(gè)功能鏡像分別用crux:3.1(341.68M)、debian:jessie(123.5-1M)、fedora:2(230.86M)和alpine:3.5(3.98M)進(jìn)行基礎(chǔ)鏡像替換.圖8是在基礎(chǔ)鏡像替換后,每一類鏡像的平均虛擬空間占用情況,從中可以看出,新鏡像的虛擬占用空間都比原來(lái)鏡像變大一些,而debian:jessie和alpine:3.5的增長(zhǎng)程度較低.這是由于原本鏡像多采用debian:jessie基礎(chǔ)鏡像,而使用更大的crux:3.1、fedora:25基礎(chǔ)鏡像,無(wú)疑會(huì)增加單個(gè)鏡像的虛擬空間占用,但實(shí)際上基礎(chǔ)鏡像是共享的,所以本地只會(huì)存儲(chǔ)一份基礎(chǔ)鏡像.而使用alpine:3.5這種很小的基礎(chǔ)鏡像進(jìn)行替換,單個(gè)鏡像變化不會(huì)明顯.

圖7 鏡像各層所占比例關(guān)系Fig.7 Proportion of image layers

由公式(1)計(jì)算得ηcrux=40.0%,ηfedora=30.8%,ηdebian=25%,ηalpine=1%.理論上應(yīng)選取η最大的crux基礎(chǔ)鏡像.在實(shí)際實(shí)驗(yàn)中,替換前本地存儲(chǔ)實(shí)際占用空間大小為21.2G,用crux替換后占用空間大小為20.4G,fedora替換后大小為22.8G,用debian替換后大小為19.5G,而用alpine替換后大小為24G.可以看到,使用fedora和alpine替換后,鏡像的實(shí)際占用空間反而更大了,這是由于我們雖然共享了基礎(chǔ)鏡像,但忽略了其他層的共享,導(dǎo)致了一部分?jǐn)?shù)據(jù)的冗余存儲(chǔ),而效果最好的是用debian進(jìn)行替換,空間節(jié)約了8%,這是由于原有鏡像的基礎(chǔ)鏡像有較多是使用debian基礎(chǔ)鏡像,對(duì)于這些鏡像,我們完全保留了原有的共享關(guān)系,同時(shí)把其他鏡像也進(jìn)行了debian基礎(chǔ)鏡像替換,所以可以使得空間的節(jié)約最明顯.

圖8 基礎(chǔ)鏡像層共享關(guān)系Fig.8 Shared relation of base image

可見η值可以在一定程度上反映基礎(chǔ)鏡像的復(fù)用率,作為基礎(chǔ)鏡像的選取標(biāo)準(zhǔn),但也應(yīng)該考慮原本的層共享關(guān)系,減少本地存儲(chǔ)時(shí)的數(shù)據(jù)冗余,這也是我們未來(lái)工作需要完善的地方.

4.3.2 概率模型中不同閾值選取對(duì)導(dǎo)出鏡像的影響

對(duì)于鏡像導(dǎo)出模式,我們選取了gcc:7.1.0鏡像作為實(shí)驗(yàn)對(duì)象,其大小為1.64G.在實(shí)驗(yàn)中,我們編譯了nginx-1.12.2、openssl-1.0.2m和 redis-4.0.6,并對(duì)運(yùn)行過(guò)程中實(shí)際訪問(wèn)到的文件數(shù)目進(jìn)行統(tǒng)計(jì),對(duì)于取不同的閾值ε,結(jié)合公式(3),得出對(duì)應(yīng)目錄的導(dǎo)出概率.圖9是鏡像導(dǎo)出模型的目錄結(jié)構(gòu)拓?fù)鋱D(部分結(jié)構(gòu)未畫出).其中files為當(dāng)前目錄中實(shí)際訪問(wèn)到(包括重復(fù)訪問(wèn))的文件訪問(wèn)次數(shù),dirs為當(dāng)前目錄中被訪問(wèn)到的子目錄數(shù),P(export)為導(dǎo)出概率.從圖中可以看出,當(dāng)閾值ε取到0%-5%時(shí),可以全部導(dǎo)出/usr/include,/usr/lib/x86_64-linux-gnu等與gcc鏡像編譯功能密切相關(guān)的目錄里的所有文件,從而保證導(dǎo)出鏡像有較好的完備性.

為了驗(yàn)證選取不同閾值時(shí),對(duì)導(dǎo)出文件數(shù)目的影響,我們選取了不同的閾值,并統(tǒng)計(jì)在在不同閾值下需要導(dǎo)出的文件數(shù)量.從圖10(a)可以看出,每次運(yùn)行訪問(wèn)到的文件數(shù)目基本不變,而當(dāng)選取較小的閾值,其導(dǎo)出的文件數(shù)目越多,最高可增加133%.隨著閾值的提高,導(dǎo)出文件數(shù)目呈階躍式下降,這是由于對(duì)于導(dǎo)出概率大于閾值的目錄會(huì)完全導(dǎo)出其中文件,而小于閾值的目錄則按需導(dǎo)出,導(dǎo)致導(dǎo)出文件數(shù)量的跳躍式變化.同時(shí),當(dāng)閾值ε大于25%后,由于所有目錄的導(dǎo)出概率均小于閾值,不會(huì)預(yù)測(cè)導(dǎo)出文件,因而導(dǎo)出文件數(shù)目和訪問(wèn)文件數(shù)目一致.

圖9 各目錄訪問(wèn)次數(shù)及導(dǎo)出概率Fig.9 Number of directory visits and export probability

從圖10(b)中可以看出,gcc鏡像原來(lái)的大小為1.64G,隨著閾值的增大,導(dǎo)出鏡像的大小隨之減少.在沒(méi)有使用概率模型,即當(dāng)閾值ε選取到25%以上時(shí),此時(shí)僅僅導(dǎo)出了在運(yùn)行過(guò)程中實(shí)際訪問(wèn)到的文件,導(dǎo)出鏡像大小為64.5M,較原有鏡像減少了96%,這已經(jīng)很難保證鏡像功能的完整性了,而當(dāng)閾值選取在1%時(shí),導(dǎo)出鏡像為498.12M,減少了69.5%,此時(shí)可以保留更多依賴文件.

圖10 不同閾值下導(dǎo)出文件數(shù)目及導(dǎo)出鏡像大小Fig.10 Number of exported files and size of images under different threshold values

5 結(jié) 論

本文提出了一種基于概率模型的Docker鏡像刪減方法,

結(jié)合鏡像本身的分層機(jī)制,加大本地鏡像的基礎(chǔ)鏡像層復(fù)用率,從而減少在本地存儲(chǔ)時(shí)的存儲(chǔ)開銷.同時(shí),在導(dǎo)出鏡像時(shí),使用概率模型按需構(gòu)建新鏡像,一方面減少了導(dǎo)出鏡像的大小,另一方面提高了導(dǎo)出鏡像的完備性.在本文中所采用的鏡像動(dòng)態(tài)分析方法和概率模型,對(duì)鏡像行為分析、鏡像安全檢測(cè)及鏡像逆向工程也有一定參考價(jià)值.

從實(shí)驗(yàn)結(jié)果上看,在本地存儲(chǔ)的鏡像,最多可以使空間開銷節(jié)約8%.導(dǎo)出的鏡像同其未使用概率模型的方案相比,減小了61%,同時(shí)增大了鏡像在導(dǎo)出后功能的完備性.

猜你喜歡
概率模型鏡像容器
在精彩交匯中,理解兩個(gè)概率模型
鏡像
難以置信的事情
鏡像
液體對(duì)容器底及容器對(duì)桌面的壓力和壓強(qiáng)
取米
一類概率模型的探究與應(yīng)用
鏡像
經(jīng)典品讀:在概率計(jì)算中容易忽略的“等可能”
建立概率模型的方法與策略
和政县| 乐至县| 拉萨市| 延长县| 南溪县| 诸城市| 五家渠市| 从江县| 平定县| 茶陵县| 乌鲁木齐县| 乌恰县| 灯塔市| 常州市| 通州市| 普陀区| 涡阳县| 平度市| 巴塘县| 安顺市| 罗江县| 德昌县| 原阳县| 临江市| 蒙自县| 巴东县| 石景山区| 云林县| 湛江市| 张家港市| 太谷县| 佛山市| 读书| 光泽县| 红河县| 容城县| 兴仁县| 武安市| 准格尔旗| 三明市| 翁牛特旗|