劉 清 王 帆 夏天鶴 施 濤
(中國西安衛(wèi)星測控中心 西安 710043)
在我國航天測控工程領(lǐng)域,為解決共享和遠(yuǎn)程控制難題,采用多活性代理理論部署測控設(shè)備集中監(jiān)控系統(tǒng)[1]。在傳統(tǒng)分布式環(huán)境中,這種代理模式能有效解決測控軟件的集中監(jiān)控問題[2],但代理是駐留在客戶機(jī)中的計(jì)算實(shí)體,存在于客戶機(jī)的整個(gè)生命周期,其運(yùn)行會額外消耗一定的CPU和內(nèi)存資源。當(dāng)工程應(yīng)用中出現(xiàn)超出當(dāng)前硬件負(fù)荷情況時(shí),通常采取增加硬件資源的解決辦法[3]。
無代理模式,即不在客戶機(jī)中設(shè)置代理的工作方式,能夠避免了上述代理導(dǎo)致的問題而在云計(jì)算領(lǐng)域逐漸流行,主要有在線和離線兩種方式。離線方式,是脫機(jī)訪問虛擬磁盤,“l(fā)ibguestfs”和“discutils”等主要采用脫機(jī)讀寫虛擬磁盤扇區(qū)的機(jī)制[4]。在線方式,可分為讀寫虛擬磁盤扇區(qū)字符流[5~6]和克隆虛擬機(jī)操作[7]等技術(shù)。虛擬磁盤扇區(qū)無代理讀寫技術(shù),集中宿主服務(wù)器系統(tǒng)中直接讀取各虛擬機(jī)磁盤的扇區(qū)字符流,但如何識別和組織這些字符流是一項(xiàng)十分繁瑣的工作。克隆虛擬機(jī)操作技術(shù),將客戶機(jī)的每次寫操作克隆到宿主機(jī)的用戶空間進(jìn)程,僅當(dāng)有寫磁盤扇區(qū)操作時(shí),才處理文件系統(tǒng)更新,但克隆或模擬虛擬機(jī)操作機(jī)制會導(dǎo)致一定的處理時(shí)延。
為了降低代理導(dǎo)致的額外資源消耗,優(yōu)化當(dāng)今云計(jì)算領(lǐng)域無代理模式的處理效率問題,本文設(shè)計(jì)了一種效率更高的無代理實(shí)現(xiàn)技術(shù)。
傳統(tǒng)分布式環(huán)境中大量部署使用代理的工作模式,在云計(jì)算環(huán)境中可以進(jìn)一步優(yōu)化改進(jìn)。通過將部署在各虛擬客戶機(jī)中的多個(gè)代理減少為運(yùn)行在宿主服務(wù)器中的一個(gè)無代理工具,能夠有效節(jié)約服務(wù)器資源開銷。通過操作映射算法的優(yōu)化改進(jìn),將對虛擬客戶機(jī)文件系統(tǒng)的訪問操作直接映射為對宿主服務(wù)器文件系統(tǒng)的操作,避免虛擬環(huán)境的多次輸入輸出操作,可以大幅提高操作效率。
因?yàn)樵谠骗h(huán)境中,運(yùn)行在宿主服務(wù)器上的虛擬客戶機(jī)本質(zhì)上是服務(wù)器系統(tǒng)中的一個(gè)進(jìn)程,承載虛擬客戶機(jī)文件系統(tǒng)的虛擬磁盤是宿主服務(wù)器文件系統(tǒng)的一部分,所以對虛擬客戶機(jī)的操作,最終必然會映射為對宿主服務(wù)器文件系統(tǒng)的操作。因此,本文基于特定的文件操作映射機(jī)制,直接在服務(wù)器中實(shí)現(xiàn)對各虛擬客戶機(jī)的操作,主要包括用戶請求捕獲、審核管理、動(dòng)態(tài)操作執(zhí)行和對用戶響應(yīng)這四個(gè)流程,其整體部署如圖1所示。

圖1 整體部署示意圖
主要有以下兩個(gè)方面進(jìn)行了改進(jìn):
1)減少代理數(shù)量。本文在宿主服務(wù)器中設(shè)置一個(gè)無代理工具,代替作為計(jì)算實(shí)體存在于各個(gè)虛擬客戶機(jī)中的代理,從而實(shí)現(xiàn)集中對各客戶機(jī)的操作。這樣,整個(gè)服務(wù)器中運(yùn)行的多個(gè)代理,將有效地減少為一個(gè)無代理工具。代理數(shù)量的大幅減少,將減少服務(wù)器資源的不必要消耗。
2)降低處理時(shí)延。在云計(jì)算環(huán)境中,對客戶虛擬機(jī)操作的克隆和模擬是導(dǎo)致處理時(shí)延,從而影響操作效率的重要因素。其中,克隆操作時(shí)延是虛擬機(jī)監(jiān)視器克隆虛擬操作而產(chǎn)生的時(shí)延;模擬操作時(shí)延,主要是指虛擬機(jī)的多次輸入/輸出操作模擬所導(dǎo)致的時(shí)延。對于傳統(tǒng)的代理模式,在新的云計(jì)算環(huán)境中,當(dāng)對虛擬機(jī)文件系統(tǒng)訪問操作時(shí),就需要經(jīng)過多次模擬輸入/輸出操作,才能最終實(shí)現(xiàn);對于一般無代理模式,在線虛擬磁盤文件訪問機(jī)制中,除了讀寫虛擬磁盤扇區(qū)技術(shù),其他的技術(shù)往往包括對虛擬機(jī)操作的克隆和模擬。對此,本文通過虛擬機(jī)監(jiān)視器提供的系統(tǒng)層接口,直接將對虛擬機(jī)中航天測控軟件應(yīng)用的重配置操作映射到對宿主服務(wù)器文件系統(tǒng)的操作,集中在服務(wù)器中完成對各航天測控軟件應(yīng)用的動(dòng)態(tài)重配置。這樣,避免了對虛擬客戶機(jī)操作的克隆和輸入/輸出操作的多次模擬,有效地降低了處理時(shí)延,從而提高了操作效率。
VirtFS是系統(tǒng)層虛擬化技術(shù)的實(shí)現(xiàn),可以向虛擬客戶機(jī)提供系統(tǒng)層的服務(wù)接口[8],通過與虛擬機(jī)監(jiān)視器交互,能夠獲得較好的文件訪問性能。因此,本文基于使用VirtFS提供的系統(tǒng)層接口,構(gòu)建服務(wù)器與客戶機(jī)的共享文件空間,建立虛擬客戶機(jī)與宿主服務(wù)器的操作映射機(jī)制,從而實(shí)現(xiàn)在宿主服務(wù)器文件系統(tǒng)集中對服務(wù)器中各客戶機(jī)進(jìn)行訪問和控制,系統(tǒng)整體架構(gòu)如圖2所示。

圖2 無代理系統(tǒng)整體架構(gòu)
其中,物理設(shè)備是被VirtFS化了的Linux系統(tǒng)宿主服務(wù)器;使用KVM虛擬化技術(shù)[9],通過QEMU模擬運(yùn)行客戶機(jī)[10];分割共享文件空間得到客戶機(jī)對應(yīng)子空間,并基于分割子空間定制fsdev文件系統(tǒng)設(shè)備和VirtIO-9P-PCI設(shè)備;客戶虛擬機(jī)根據(jù)分組標(biāo)簽識別和掛載VirtIO-9P-PCI設(shè)備,這樣通過VirtFS提供的系統(tǒng)層接口與虛擬機(jī)監(jiān)視器交互,使用分組標(biāo)簽進(jìn)行彼此隔離,實(shí)現(xiàn)讀取并響應(yīng)Web服務(wù)器中的用戶操作請求,通過相關(guān)算法和機(jī)制直接在宿主服務(wù)器文件系統(tǒng)中完成各客戶機(jī)的訪問操作。
整個(gè)無代理技術(shù)設(shè)計(jì)與實(shí)現(xiàn)的難點(diǎn)包括捕獲及響應(yīng)用戶請求、虛擬磁盤多機(jī)同時(shí)訪問、操作隔離和降低處理時(shí)延等四個(gè)方面。
將以接口方式對外提供服務(wù),在每臺宿主服務(wù)器中搭建Web服務(wù),當(dāng)用戶的操作和相關(guān)參數(shù)通過HTTP請求傳遞到Web服務(wù)器后,無代理工具的接口程序會通過讀寫Servlet的方式進(jìn)行捕獲和解析,提交管理程序處理,并根據(jù)管理程序處理結(jié)果生成對用戶的響應(yīng)信息,最后通過Web服務(wù)器返回HTTP響應(yīng)。用戶請求捕獲詳見圖3所示。
其中,Servlet容器用于實(shí)現(xiàn)Web服務(wù)器與應(yīng)用系統(tǒng)之間的標(biāo)準(zhǔn)通信,應(yīng)用系統(tǒng)中用于被Web服務(wù)器動(dòng)態(tài)調(diào)用的部分放置在實(shí)現(xiàn)Servlet接口的類中[11]。將軟件應(yīng)用無代理動(dòng)態(tài)重配置的接口類,設(shè)計(jì)為Servlet接口類,便于在接口類中動(dòng)態(tài)捕獲用戶請求的操作名稱、相關(guān)參數(shù)和請求端IP地址,并根據(jù)管理程序處理結(jié)果產(chǎn)生Web服務(wù)器的動(dòng)態(tài)響應(yīng)。

圖3 用戶請求捕獲/響應(yīng)示意圖
Linux系統(tǒng)的文件緩存機(jī)制,導(dǎo)致了作為宿主機(jī)文件存在的虛擬磁盤除非是只讀模式,否則不能被多個(gè)客戶機(jī)、服務(wù)器和客戶機(jī)同時(shí)訪問[12~13]。另一方面,要實(shí)現(xiàn)對客戶虛擬機(jī)的在線訪問控制,必然要求虛擬磁盤是讀寫模式。因此,需要建立虛擬磁盤多機(jī)同時(shí)訪問狀態(tài),即虛擬磁盤文件同時(shí)支持所在虛擬客戶機(jī)、宿主服務(wù)器、或其它指定虛擬客戶機(jī)的同時(shí)訪問。
云計(jì)算虛擬環(huán)境與傳統(tǒng)分布式環(huán)境不同,各虛擬客戶機(jī)是通過虛擬機(jī)監(jiān)視器讀寫虛擬磁盤文件,并在宿主服務(wù)器中模擬產(chǎn)生。同時(shí),虛擬監(jiān)視器可以是宿主服務(wù)器系統(tǒng)的一個(gè)進(jìn)程。因此運(yùn)行在宿主服務(wù)器中的無代理工具通過虛擬機(jī)監(jiān)視器,可以在虛擬客戶機(jī)在線運(yùn)行狀態(tài)下模擬虛擬機(jī)的操作,從而實(shí)現(xiàn)宿主服務(wù)器對虛擬客戶機(jī)文件系統(tǒng)的在線訪問,如圖4所示。

圖4 虛擬磁盤同時(shí)訪問原理圖
本文采用系統(tǒng)層虛擬化技術(shù),通過虛擬機(jī)監(jiān)視器提供的系統(tǒng)層服務(wù)接口,可以實(shí)現(xiàn)客戶虛擬機(jī)、宿主服務(wù)器、其他客戶機(jī)對該虛擬磁盤的同時(shí)訪問(讀寫),并獲得相對高效的操作性能。
操作隔離,是指實(shí)現(xiàn)虛擬客戶機(jī)、宿主服務(wù)器、其他虛擬客戶機(jī)對共享文件空間訪問操作的隔離,是必須解決的運(yùn)行基礎(chǔ)問題。本文通過定義分組標(biāo)簽和安全模式的方式,指定各機(jī)對共享文件空間的訪問權(quán)限,從而實(shí)現(xiàn)各操作的隔離。
客戶機(jī)運(yùn)行在虛擬化環(huán)境中,可以對共享文件空間進(jìn)行分割,為每個(gè)虛擬客戶機(jī)分配相應(yīng)的共享子空間,并通過一定的識別機(jī)制建立與虛擬客戶機(jī)的關(guān)聯(lián)關(guān)系。同時(shí),基于分割子空間可以為虛擬客戶機(jī)定制fsdev和VirtIO-9P-PCI等系統(tǒng)設(shè)備,定義相應(yīng)的分組標(biāo)簽和安全模型等參數(shù)信息。各虛擬客戶機(jī)在啟動(dòng)時(shí)使用指定的分組標(biāo)簽掛載這些文件系統(tǒng)設(shè)備,擁有相同分組標(biāo)簽的各機(jī)可以共享文件設(shè)備對應(yīng)的分割子空間,但擁有不同分組標(biāo)簽的各機(jī)則保持相互隔離;同時(shí)可根據(jù)需要選擇不同安全模型,以實(shí)現(xiàn)客戶虛擬機(jī)與宿主服務(wù)器的隔離。這樣,可在虛擬客戶機(jī)啟動(dòng)時(shí),就建立了特定的隔離關(guān)系。各虛擬機(jī)之間的隔離機(jī)制,詳見圖5。

圖5 虛擬機(jī)隔離機(jī)制示意圖
其中QEMU基于各分割子空間定義了fsdev與VirtIO-9P-PCI這兩類設(shè)備[14~15]。fsdev設(shè)備關(guān)聯(lián)分割子空間,實(shí)現(xiàn)本文工具與虛擬客戶機(jī)的共享和隔離;VirtIO-9P-PCI設(shè)備通過ID關(guān)聯(lián)fsdev設(shè)備,客戶機(jī)通過不同的分組標(biāo)簽識別VirtIO-9P-PCI設(shè)備,實(shí)現(xiàn)虛擬機(jī)客戶機(jī)之間的相互隔離。
操作映射是將對虛擬客戶機(jī)文件系統(tǒng)的操作,直接映射到對宿主機(jī)文件系統(tǒng)的操作。客戶機(jī)掛載是指虛擬客戶機(jī)啟動(dòng)后,對基于共享文件空間分割而定義的文件系統(tǒng)設(shè)備,使用對應(yīng)協(xié)議和分組標(biāo)簽進(jìn)行掛載。客戶機(jī)通過系統(tǒng)層的服務(wù)接口直接與虛擬機(jī)監(jiān)視器交互,可獲得比直接訪問驅(qū)動(dòng)設(shè)備更高效的讀寫性能[16]。本文利用虛擬機(jī)監(jiān)視器提供的系統(tǒng)層接口,通過將對虛擬機(jī)文件系統(tǒng)操作到對服務(wù)器文件系統(tǒng)操作的直接映射,避免了傳統(tǒng)“虛擬機(jī)文件系統(tǒng)操作——塊設(shè)備操作——服務(wù)器文件系統(tǒng)操作”三層次映射,減少了一個(gè)映射層級,同時(shí)因?qū)Ω魈摂M客戶機(jī)的訪問操作沒有經(jīng)過虛擬機(jī)系統(tǒng),從而避免了虛擬機(jī)多次輸入/輸出操作模擬,有效降低操作的處理時(shí)延,從而可以大幅提高操作效率。詳見圖6。

圖6 共享文件空間虛擬客戶機(jī)掛載示意圖
其中,“分割1-n”是客戶虛擬機(jī)對共享文件空間的使用分割;fsdev是基于分割子空間定制的文件系統(tǒng)設(shè)備;VirtIO-9P-PCI是關(guān)聯(lián)fsdev文件設(shè)備而定制的系統(tǒng)設(shè)備,并定義了分組掛載標(biāo)簽;客戶虛擬機(jī)根據(jù)分組掛載標(biāo)簽,通過9P協(xié)議對VirtIO-9P-PCI設(shè)備進(jìn)行掛載,這樣,虛擬客戶機(jī)通過掛載文件設(shè)備操作,便可將分割的子空間作為本地文件空間使用,但實(shí)際操作是在宿主服務(wù)器文件系統(tǒng)中完成的。
在相同硬件環(huán)境,分別統(tǒng)計(jì)代理模式和本文無代理技術(shù)兩種狀態(tài)下CPU和內(nèi)存資源的消耗情況,進(jìn)行對比分析,驗(yàn)證本文無代理技術(shù)在資源消耗方面的改進(jìn);通過分別統(tǒng)計(jì)代理模式、一般無代理模式和本文無代理技術(shù)對虛擬客戶機(jī)訪問操作的效率,進(jìn)行對比分析,驗(yàn)證本文無代理技術(shù)在操作效率方面的有效優(yōu)化。
在實(shí)驗(yàn)中,使用代理前后的資源占用率差值,即為此代理導(dǎo)致的額外資源消耗。為獲得趨勢性數(shù)據(jù),分別設(shè)置了服務(wù)器單機(jī)運(yùn)行,以及虛擬0~5個(gè)虛擬客戶機(jī)運(yùn)行的七種實(shí)驗(yàn)狀態(tài),并分別統(tǒng)計(jì)CPU和內(nèi)存的開銷情況。htop是一個(gè)Linux下的交互式進(jìn)程瀏覽器,可以用來替換Linux下的top命令,因此本文通過htop工具查看服務(wù)器的資源開銷情況。
CPU開銷,因?qū)嶒?yàn)是在相同硬件配置和宿主服務(wù)器系統(tǒng)環(huán)境下進(jìn)行的,所以選擇宿主服務(wù)器中CPU總共的百分比開銷作為此模式下的某次CPU開銷。根據(jù)CPU代價(jià)計(jì)算公式,得到本文無代理技術(shù)和代理模式在上述七種實(shí)驗(yàn)狀態(tài)下的CPU代價(jià),并以狀態(tài)序號為橫坐標(biāo)、宿主服務(wù)器CPU占用百分比為縱坐標(biāo),建立兩種模式下CPU代價(jià)對比圖,詳見圖7。

圖7 CPU代價(jià)對比圖
內(nèi)存開銷,是以宿主服務(wù)器中內(nèi)存的實(shí)際資源占用量(MB),作為某次實(shí)驗(yàn)的實(shí)際開銷。基于上述7種實(shí)驗(yàn)狀態(tài)的內(nèi)存實(shí)際開銷統(tǒng)計(jì),并根據(jù)內(nèi)存開銷計(jì)算公式,得到本文無代理技術(shù)和代理模式的內(nèi)存代價(jià)對比信息,并以狀態(tài)序號為橫坐標(biāo)、服務(wù)器內(nèi)存實(shí)際占用量為縱坐標(biāo),得到兩種模式的內(nèi)存代價(jià)對比圖,詳見圖8。

圖8 內(nèi)存代價(jià)對比圖
在圖7和圖8中,狀態(tài)1是服務(wù)器空載運(yùn)行狀態(tài);狀態(tài)2中,對于代理模式是服務(wù)器空載運(yùn)行,對于無代理模式是服務(wù)器系統(tǒng)中,部署并建立了本文無代理技術(shù)運(yùn)行狀態(tài);狀態(tài)3~7,分別對應(yīng)宿主服務(wù)器中有1~5個(gè)客戶機(jī)運(yùn)行的測試狀態(tài)。
由以上兩圖中CPU代價(jià)和內(nèi)存代價(jià)的對比可知:
1)在狀態(tài)1,兩種模式的CPU代價(jià)和內(nèi)存代價(jià)均相等;
2)在狀態(tài)2,本文無代理技術(shù)的CPU代價(jià)和內(nèi)存代價(jià)要略高于代理模式。這是因?yàn)椋诖藸顟B(tài)下,本文無代理技術(shù)需要在服務(wù)器系統(tǒng)中建立其運(yùn)行狀態(tài),因?yàn)閷?dǎo)致一定的CPU和內(nèi)存消耗;但,對于代理模式,則不存在這樣的問題;
3)在狀態(tài)3,兩種模式環(huán)境中均運(yùn)行了一臺客戶機(jī),此時(shí)兩種模式的CPU代價(jià)和內(nèi)存代價(jià)基本相等;
4)狀態(tài)4以后,隨著客戶機(jī)的增多,代理模式的CPU代價(jià)和內(nèi)存代價(jià)均逐漸加速高于本文無代理技術(shù),并呈現(xiàn)出“剪刀差”現(xiàn)象。
以上資源代價(jià)的數(shù)據(jù),驗(yàn)證了代理模式中,因代理模式需要在每個(gè)客戶機(jī)中設(shè)置代理,導(dǎo)致的額外資源消耗會隨著代理成正比增加;而本文無代理技術(shù),因沒有在客戶機(jī)中使用代理,代理數(shù)量大幅減少,從而避免了代理導(dǎo)致的大量額外資源消耗問題。
在硬件配置相同的服務(wù)器中,使用QEMU模擬多臺客戶機(jī)的運(yùn)行,編寫測試程序,并使用HTTP請求各虛擬客戶機(jī)中同一文件塊的100次讀寫操作,分別統(tǒng)計(jì)傳統(tǒng)代理模式、一般無代理模式和本文無代技術(shù)三種機(jī)制的操作效率。本文無代理技術(shù)、一般無代理模式(模擬操作)和傳統(tǒng)代理模式的平均讀操作效率(次/秒)分別為:73.7、11.7、7.6,平均寫操作效率(次/秒)分別為:40.8、10.0、7.2。
以操作序號為橫坐標(biāo),以操作效率為縱坐標(biāo),建立讀寫操作效率對比圖,分別如圖9和圖10所示所示。
其中,由以上三種模式下讀取和寫入操作效率數(shù)據(jù)可知:
1)讀取操作效率,本文無代理技術(shù),大約是一般無代理模式的6.3倍,是代理模式的9.7倍;
2)寫入操作效率,本文無代理技術(shù),大約是一般無代理模式的4.1倍,是代理模式的5.7倍;
3)一般無代理模式和代理模式的讀取操作效率會略高于寫入操作效率,這幾乎與磁盤的讀寫情況類似。

圖9 讀操作效率統(tǒng)計(jì)圖

圖10 寫操作效率統(tǒng)計(jì)圖
以上效率的數(shù)據(jù),驗(yàn)證了通過虛擬機(jī)監(jiān)視器提供的系統(tǒng)層接口,直接將對虛擬客戶機(jī)的訪問操作映射到對服務(wù)器文件系統(tǒng)的操作,可以避免虛擬環(huán)境的多次模擬操作,減少處理時(shí)間延遲,能夠大幅提高處理效率。
無代理技術(shù)因能很好地避免代理導(dǎo)致的資源開銷問題而在云計(jì)算領(lǐng)域逐漸流行。本文對無代理技術(shù)的實(shí)現(xiàn)架構(gòu)進(jìn)行了優(yōu)化設(shè)計(jì),通過操作映射策略對當(dāng)今IT領(lǐng)域無代理技術(shù)進(jìn)行降低處理時(shí)延方面的優(yōu)化改進(jìn)。本文設(shè)計(jì)的無代理技術(shù),能夠有效地將設(shè)置在不同客戶機(jī)中的多個(gè)代理減少為一個(gè)運(yùn)行在宿主服務(wù)器中的無代理工具,從而大幅降低服務(wù)器額外資源消耗;可以通過操作映射精簡虛擬環(huán)境中一個(gè)層級的文件操作映射,減少處理時(shí)延,從而提高操作效率。