樊勇兵,陳 天,賴培源
(中國電信股份有限公司廣東研究院 廣州 510630)
服務(wù)器虛擬化技術(shù)實(shí)現(xiàn)了底層物理資源與上層邏輯資源的去耦合,大大提高了資源的可管理性和彈性部署效率。虛擬機(jī)是虛擬化技術(shù)呈現(xiàn)在用戶面前的最直接的表現(xiàn)形式,是云計(jì)算和虛擬化環(huán)境中關(guān)鍵的基礎(chǔ)元素之一。能否對(duì)虛擬機(jī)進(jìn)行持續(xù)有效的跟蹤、維護(hù)和管理,直接關(guān)系到云計(jì)算服務(wù)提供商能否為用戶提供一個(gè)高質(zhì)、穩(wěn)定的服務(wù)。虛擬機(jī)的管理與物理機(jī)的管理之間有本質(zhì)區(qū)別:物理機(jī)是物理存在的實(shí)體;而虛擬機(jī)的實(shí)質(zhì)是一個(gè)文件,虛擬機(jī)在時(shí)間上可以是邏輯的(甚至可以存在于過去),在空間上是可以任意遷移的。虛擬機(jī)空間和時(shí)間的不確定性給虛擬機(jī)管理帶來了難題,當(dāng)某虛擬機(jī)出現(xiàn)問題時(shí),難以對(duì)虛擬機(jī)進(jìn)行溯源和維護(hù)。
虛擬機(jī)標(biāo)識(shí)是對(duì)虛擬機(jī)進(jìn)行有效管理的一種解決辦法。虛擬機(jī)標(biāo)識(shí)相當(dāng)于虛擬機(jī)的身份證,即虛擬機(jī)的惟一代碼,在虛擬機(jī)的整個(gè)生命周期內(nèi)保持不變。本文中所說的虛擬機(jī)標(biāo)識(shí),是指創(chuàng)建一個(gè)虛擬機(jī)時(shí),由虛擬化系統(tǒng)為虛擬機(jī)分配的底層標(biāo)識(shí),該底層標(biāo)識(shí)一般表示為一個(gè)字符串。
目前,虛擬化領(lǐng)域各大主流廠商都有自己的虛擬機(jī)標(biāo)識(shí)方法,主流虛擬化廠商標(biāo)識(shí)情況見表1,其中UUID(universally unique identifier)[1]。
由表1可見,當(dāng)前各大虛擬化廠商的虛擬機(jī)標(biāo)識(shí)方法大不相同。在實(shí)際的大規(guī)模公眾運(yùn)營級(jí)異構(gòu)虛擬化環(huán)境中,將虛擬機(jī)標(biāo)識(shí)作為虛擬機(jī)運(yùn)維管理和故障溯源的依據(jù)時(shí),現(xiàn)有的虛擬機(jī)標(biāo)識(shí)方法將會(huì)產(chǎn)生很多問題,如下。
·格式不兼容:各廠商虛擬機(jī)標(biāo)識(shí)的產(chǎn)生機(jī)制、格式不同,難以對(duì)虛擬機(jī)標(biāo)識(shí)進(jìn)行統(tǒng)一識(shí)別。
·管理規(guī)則各異:各廠商虛擬機(jī)標(biāo)識(shí)的管理規(guī)則不同。在虛擬機(jī)的生命周期內(nèi),無法確定虛擬機(jī)標(biāo)識(shí)是否發(fā)生改變或是否經(jīng)重復(fù)使用。
·異構(gòu)管理難題:在大規(guī)模的異構(gòu)虛擬化環(huán)境中,各廠商虛擬機(jī)標(biāo)識(shí)不同的格式和管理機(jī)制,加大了統(tǒng)一運(yùn)維的難度。
表1 主流虛擬化廠商虛擬機(jī)標(biāo)識(shí)情況
·缺乏可讀性:現(xiàn)有各種虛擬機(jī)標(biāo)識(shí)普遍缺乏可讀性,也不能與物理機(jī)標(biāo)識(shí)相區(qū)別。
·沒有考慮物理機(jī)與虛擬機(jī)、傳統(tǒng)分布式計(jì)算與云計(jì)算之間的巨大差異。
目前,尚沒有相關(guān)廠商或組織提出虛擬機(jī)統(tǒng)一標(biāo)識(shí)的通用解決方案。一種可能的解決方案是直接采用當(dāng)前應(yīng)用較為廣泛的通用標(biāo)識(shí)方法UUID,但UUID所針對(duì)的是分布式計(jì)算環(huán)境,不能完全適用于虛擬化環(huán)境。本文在UUID的基礎(chǔ)上,提出一種適合于虛擬化環(huán)境的虛擬機(jī)標(biāo)識(shí)方法(virtual machine universally unique identifier,VMID)。下面分別對(duì)UUID和VMID進(jìn)行闡述。
UUID是IT領(lǐng)域廣泛使用的一種標(biāo)識(shí)方法[1],使分布式計(jì)算系統(tǒng)中的所有元素都能自動(dòng)擁有惟一的標(biāo)識(shí)信息,而不需要額外通過中央控制端進(jìn)行調(diào)控。UUID是通過特定算法生成的一個(gè)128位二進(jìn)制(16 byte)的數(shù)字,通常表示為一個(gè)由36個(gè)字符組成的字符串 (即32個(gè)16進(jìn)制數(shù)和4個(gè)連接符 “-”),如 3F2504E0-4F89-11D3-9A0C-0305E82C3301。經(jīng)由一定算法生成的UUID在時(shí)間和空間上具有惟一性,并且長度固定,相對(duì)比較短小,非常適合于排序、標(biāo)識(shí)和存儲(chǔ),目前已經(jīng)得到了廣泛應(yīng)用。同時(shí),各大IT設(shè)備商出廠的物理機(jī)都分配了UUID,并與主板序列號(hào)一起作為物理機(jī)的惟一性標(biāo)識(shí)。
以傳統(tǒng)的網(wǎng)絡(luò)和計(jì)算環(huán)境為應(yīng)用場景的UUID,在虛擬化環(huán)境中存在以下缺點(diǎn)和不足。
(1)不能區(qū)分物理機(jī)和虛擬機(jī)
物理機(jī)的生產(chǎn)是相對(duì)可控、可預(yù)見的,而虛擬機(jī)的“生產(chǎn)”無論在時(shí)間、空間、數(shù)量、頻率、生命周期還是主體、目的、“生產(chǎn)”條件等方面都是相對(duì)隨意的。
(2)編碼效率低,成本高
UUID格式中的時(shí)間戳取值間隔為100 ns。這個(gè)時(shí)間顆粒度對(duì)于高要求的分布式計(jì)算是必要的,并且在這樣的環(huán)境中也具備相應(yīng)的硬件條件。但對(duì)于虛擬化環(huán)境而言是一種浪費(fèi),同時(shí)也對(duì)硬件提出了過高的要求。另外,UUID格式中的時(shí)間戳編碼長度可以滿足2 000年的生命周期,這對(duì)于虛擬機(jī)而言也是基本沒有意義的。
(3)不能達(dá)到惟一標(biāo)識(shí)
3.2.1 VMID要考慮的問題
VMID的技術(shù)方案主要關(guān)注以下問題。
(1)與已有標(biāo)準(zhǔn)的兼容性
虛擬化管理不但涉及虛擬機(jī),還涉及物理機(jī),為最大化保障虛擬化管理的兼容性與平滑度,VMID需考慮與UUID的兼容性。因此,VMID盡量延用UUID的產(chǎn)生機(jī)制和格式,并在此基礎(chǔ)上根據(jù)虛擬機(jī)的特點(diǎn)進(jìn)行變動(dòng)。
(2)區(qū)分物理機(jī)與虛擬機(jī)
為了明確區(qū)分物理機(jī)和虛擬機(jī),VMID使用UUID的變量字段[1]保留值“111”,表明所標(biāo)識(shí)的是虛擬機(jī)。
(3)合適的編碼效率和成本
UUID時(shí)間戳的顆粒度是100 ns,這個(gè)解析度不適用于虛擬化環(huán)境。首先,虛擬機(jī)的生成速度是按秒計(jì)算的,虛擬機(jī)的生成頻率也至多需要精確到毫秒級(jí);其次,虛擬化環(huán)境中一般使用普通硬件和低成本的NTP(時(shí)間協(xié)議),在網(wǎng)絡(luò)條件良好的情況下其時(shí)間誤差為10 ms級(jí)別。綜合以上兩點(diǎn),兼顧編碼效率和系統(tǒng)成本,將VMID的時(shí)間戳顆粒度設(shè)置為1 ms。另外,考慮到用戶使用虛擬機(jī)的特點(diǎn)和需求,將VMID的生命周期設(shè)置為大于100年。這樣得到的時(shí)間戳字段長度的計(jì)算表達(dá)式如下:
(2)確定切縫時(shí)間上,需要視混凝土強(qiáng)度以及氣溫條件而定,通常情況下,當(dāng)混凝土強(qiáng)度達(dá)到8~15MPa時(shí)是最佳時(shí)間。
由式(1)可知,當(dāng)時(shí)間戳長度設(shè)置為42位二進(jìn)制數(shù)、時(shí)間間隔為1 ms時(shí),能夠保證的確切不重復(fù)使用時(shí)間為139年,計(jì)算如下:
(4)時(shí)間起始點(diǎn)的選擇
UUID的時(shí)間起始點(diǎn)選擇的是公歷格里高利歷法的第一天(即1582年10月 15日),而 VMID的時(shí)間起始點(diǎn)的選擇與虛擬化的廣泛應(yīng)用有關(guān)。綜合全球范圍內(nèi)虛擬化和云計(jì)算概念的推廣和使用情況,VMID的時(shí)間起始點(diǎn)定為2000年1月1日0時(shí)比較合適。
(5)時(shí)鐘序列長度
為了保持與UUID格式的兼容性,VMID采用與UUID相同的長度,因此根據(jù)42位時(shí)間戳長度得到的時(shí)鐘序列長度為31位二進(jìn)制數(shù)。
(6)可接受的重復(fù)概率
VMID從時(shí)間和空間兩個(gè)角度保證了不重復(fù)性。時(shí)間不重復(fù)性通過時(shí)間戳和時(shí)鐘序列雙重保證,空間不重復(fù)性借助于物理機(jī)MAC地址的不重復(fù)性保證。當(dāng)然,VMID還是存在一定的重復(fù)概率,可能引發(fā)重復(fù)的情況分為如下兩種。
①同一物理節(jié)點(diǎn)在同一時(shí)刻開始的1 ms時(shí)間間隔內(nèi),連續(xù)產(chǎn)生n個(gè)VMID,這些VMID存在重復(fù)情況的概率p(n)是:
其中,N=231,31是二進(jìn)制時(shí)鐘序列的位數(shù)。當(dāng)n=128時(shí),p(n)=3.81×10-6;當(dāng)n=1 024 時(shí),p(n)=2.44×10-4。
②不同物理節(jié)點(diǎn)在同一時(shí)刻開始的1 ms時(shí)間間隔內(nèi),連續(xù)產(chǎn)生n個(gè)VMID,這些VMID存在重復(fù)情況的概率p(n)是:
其中,E=20,是NTP誤差修正因子(在網(wǎng)絡(luò)條件良好的情況下,NTP誤差為10 ms以下級(jí)別);N=231+46,31是二進(jìn)制時(shí)鐘序列的位數(shù),46是組播地址可變字段的位數(shù)。當(dāng)n=228=268 435 456 時(shí),p(n)=4.77×10-6。
由此可見,這樣的重復(fù)概率在現(xiàn)實(shí)環(huán)境中是完全可以接受的。
(7)使用和管理規(guī)則
VMID定位為虛擬機(jī)的通用惟一標(biāo)識(shí),因此VMID一旦創(chuàng)建,即與該虛擬機(jī)綁定,在該虛擬機(jī)的生命周期內(nèi)保持不變,并在該虛擬機(jī)刪除后隨之消失。
(8)可擴(kuò)展性
為了賦予VMID更多的管理功能,可以考慮對(duì)VMID的格式進(jìn)行進(jìn)一步擴(kuò)展。因此VMID的版本字段預(yù)留有保留值,已為VMID賦予全新的賦值方法。也可以直接對(duì)VMID進(jìn)行擴(kuò)展,新增字節(jié),添加進(jìn)管理信息。
3.2.2 VMID編碼方案
VMID的具體編碼方案總結(jié)如下:為了與UUID盡可能兼容,整個(gè)編碼以UUID為基礎(chǔ),延用UUID的變量字段,并使用其保留值“111”,用以表明所標(biāo)識(shí)的是一臺(tái)虛擬機(jī);縮短UUID的時(shí)間戳字段長度至42位,并隨之?dāng)U展時(shí)鐘序列字段的長度至31位。這樣得到的VMID是一個(gè)128位二進(jìn)制數(shù),通常表示為36個(gè)字符(32個(gè)16進(jìn)制數(shù)加4個(gè)連接符“-”)組成的字符串,其字符順序符合網(wǎng)絡(luò)字節(jié)順序,即最高有效位(most significant byte,MSB)最先。具體格式如圖1所示。
對(duì)VMID中各字段比特位從高位往低位依次編號(hào)為:0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15…127,得到 VMID字符串的具體組成如下。
·time_low:32位二進(jìn)制數(shù),是時(shí)間戳的低位字節(jié)段,位于VMID的“0~31”號(hào)比特位。
·time_hi:10位二進(jìn)制數(shù),時(shí)間戳的高位字節(jié)段,位于VMID的“32~41”號(hào)比特位。
·clk_seq_low:18位二進(jìn)制數(shù),時(shí)鐘序列(clock sequence)的低位字節(jié)段,位于 VMID的“42~59”號(hào)比特位。
·ver:4位二進(jìn)制數(shù),版本字段,位于VMID的“60~63”號(hào)比特位。
·var:3 位二進(jìn)制數(shù),變量(variant)字段,位于 VMID的“64~66”號(hào)比特位。
·clk_seq_hi:13位二進(jìn)制數(shù),時(shí)鐘序列的高位字節(jié)段,位于VMID的“67~79”號(hào)比特位。
·node:48位二進(jìn)制數(shù),節(jié)點(diǎn) (node)識(shí)別碼,位于VMID 的“80~127”號(hào)比特位。
VMID的具體賦值規(guī)則如下。
·變量字段:其值為“111”,相當(dāng)于 UUID的變量字段,并通過其保留值“111”表示所標(biāo)識(shí)的是虛擬機(jī)。
·版本字段:對(duì)于本文檔所說明的標(biāo)識(shí)方法對(duì)應(yīng)值為“0000”,其他值作為保留值。
·時(shí)間戳:將當(dāng)前時(shí)間,以毫秒為間隔,換算為從2000年1月1日0時(shí)0分0秒開始,按照毫秒計(jì)數(shù)的42位二進(jìn)制時(shí)間戳;對(duì)于沒有UTC的系統(tǒng),可以由本地時(shí)間代替,但是全系統(tǒng)必須保持一致。
·時(shí)鐘序列:其值取一個(gè)31位的隨機(jī)數(shù)或高質(zhì)量的偽隨機(jī)數(shù),用以避免因并發(fā)導(dǎo)致的重復(fù)或系統(tǒng)時(shí)鐘偏差(如關(guān)機(jī)、遷移、誤差、硬件更換等)導(dǎo)致的重復(fù)。
圖1 VMID編碼格式
·節(jié)點(diǎn)字段:當(dāng)虛擬機(jī)所在系統(tǒng)擁有IEEE 802 MAC地址時(shí),node字段就是該MAC地址,其最低位比特包含global/local比特和unicast/multicast比特;在多MAC地址系統(tǒng)中可以取任一MAC地址。當(dāng)虛擬機(jī)所在系統(tǒng)沒有IEEE 802 MAC地址時(shí),將node字段中unicast/multicast比特位設(shè)置為 multicast,node字段的其他位取隨機(jī)數(shù)或偽隨機(jī)數(shù)。
3.2.3 VMID管理規(guī)則
VMID在虛擬機(jī)創(chuàng)建時(shí)由系統(tǒng)分配,在虛擬機(jī)整個(gè)生命周期內(nèi)保持不變,在虛擬機(jī)刪除時(shí)丟棄不用。VMID與虛擬機(jī)生命周期關(guān)系如圖2所示。
圖2 虛擬機(jī)生命周期與VMID關(guān)系
由圖2可見,除了在虛擬機(jī)克隆或熱備等操作產(chǎn)生新的虛擬機(jī)時(shí)要分配新VMID之外,原始虛擬機(jī)的VMID在其整個(gè)生命周期中始終保持不變。可以說,VMID是一個(gè)虛擬機(jī)的通用惟一標(biāo)識(shí),完全可以作為虛擬機(jī)管理時(shí)的溯源依據(jù)。
3.2.4 VMID后續(xù)擴(kuò)展
為了賦予VMID更多的管理功能,可以考慮對(duì)VMID的格式進(jìn)行進(jìn)一步擴(kuò)展。如利用VMID的版本字段的保留值,為VMID賦予全新的賦值方法;也可以直接對(duì)VMID進(jìn)行擴(kuò)展,新增字節(jié),添加管理信息,如虛擬機(jī)所在數(shù)據(jù)中心信息及當(dāng)前所在物理機(jī)IP等信息。這些都是可以繼續(xù)深入考慮的內(nèi)容。
1 IETF,RFC4122.A universally unique identifier (UUID)URN namespace,2005