樊勇兵,陳 天,賴培源
(中國電信股份有限公司廣東研究院 廣州 510630)
服務器虛擬化技術實現了底層物理資源與上層邏輯資源的去耦合,大大提高了資源的可管理性和彈性部署效率。虛擬機是虛擬化技術呈現在用戶面前的最直接的表現形式,是云計算和虛擬化環境中關鍵的基礎元素之一。能否對虛擬機進行持續有效的跟蹤、維護和管理,直接關系到云計算服務提供商能否為用戶提供一個高質、穩定的服務。虛擬機的管理與物理機的管理之間有本質區別:物理機是物理存在的實體;而虛擬機的實質是一個文件,虛擬機在時間上可以是邏輯的(甚至可以存在于過去),在空間上是可以任意遷移的。虛擬機空間和時間的不確定性給虛擬機管理帶來了難題,當某虛擬機出現問題時,難以對虛擬機進行溯源和維護。
虛擬機標識是對虛擬機進行有效管理的一種解決辦法。虛擬機標識相當于虛擬機的身份證,即虛擬機的惟一代碼,在虛擬機的整個生命周期內保持不變。本文中所說的虛擬機標識,是指創建一個虛擬機時,由虛擬化系統為虛擬機分配的底層標識,該底層標識一般表示為一個字符串。
目前,虛擬化領域各大主流廠商都有自己的虛擬機標識方法,主流虛擬化廠商標識情況見表1,其中UUID(universally unique identifier)[1]。
由表1可見,當前各大虛擬化廠商的虛擬機標識方法大不相同。在實際的大規模公眾運營級異構虛擬化環境中,將虛擬機標識作為虛擬機運維管理和故障溯源的依據時,現有的虛擬機標識方法將會產生很多問題,如下。
·格式不兼容:各廠商虛擬機標識的產生機制、格式不同,難以對虛擬機標識進行統一識別。
·管理規則各異:各廠商虛擬機標識的管理規則不同。在虛擬機的生命周期內,無法確定虛擬機標識是否發生改變或是否經重復使用。
·異構管理難題:在大規模的異構虛擬化環境中,各廠商虛擬機標識不同的格式和管理機制,加大了統一運維的難度。

表1 主流虛擬化廠商虛擬機標識情況
·缺乏可讀性:現有各種虛擬機標識普遍缺乏可讀性,也不能與物理機標識相區別。
·沒有考慮物理機與虛擬機、傳統分布式計算與云計算之間的巨大差異。
目前,尚沒有相關廠商或組織提出虛擬機統一標識的通用解決方案。一種可能的解決方案是直接采用當前應用較為廣泛的通用標識方法UUID,但UUID所針對的是分布式計算環境,不能完全適用于虛擬化環境。本文在UUID的基礎上,提出一種適合于虛擬化環境的虛擬機標識方法(virtual machine universally unique identifier,VMID)。下面分別對UUID和VMID進行闡述。
UUID是IT領域廣泛使用的一種標識方法[1],使分布式計算系統中的所有元素都能自動擁有惟一的標識信息,而不需要額外通過中央控制端進行調控。UUID是通過特定算法生成的一個128位二進制(16 byte)的數字,通常表示為一個由36個字符組成的字符串 (即32個16進制數和4個連接符 “-”),如 3F2504E0-4F89-11D3-9A0C-0305E82C3301。經由一定算法生成的UUID在時間和空間上具有惟一性,并且長度固定,相對比較短小,非常適合于排序、標識和存儲,目前已經得到了廣泛應用。同時,各大IT設備商出廠的物理機都分配了UUID,并與主板序列號一起作為物理機的惟一性標識。
以傳統的網絡和計算環境為應用場景的UUID,在虛擬化環境中存在以下缺點和不足。
(1)不能區分物理機和虛擬機
物理機的生產是相對可控、可預見的,而虛擬機的“生產”無論在時間、空間、數量、頻率、生命周期還是主體、目的、“生產”條件等方面都是相對隨意的。
(2)編碼效率低,成本高
UUID格式中的時間戳取值間隔為100 ns。這個時間顆粒度對于高要求的分布式計算是必要的,并且在這樣的環境中也具備相應的硬件條件。但對于虛擬化環境而言是一種浪費,同時也對硬件提出了過高的要求。另外,UUID格式中的時間戳編碼長度可以滿足2 000年的生命周期,這對于虛擬機而言也是基本沒有意義的。
(3)不能達到惟一標識
3.2.1 VMID要考慮的問題
VMID的技術方案主要關注以下問題。
(1)與已有標準的兼容性
虛擬化管理不但涉及虛擬機,還涉及物理機,為最大化保障虛擬化管理的兼容性與平滑度,VMID需考慮與UUID的兼容性。因此,VMID盡量延用UUID的產生機制和格式,并在此基礎上根據虛擬機的特點進行變動。
(2)區分物理機與虛擬機
為了明確區分物理機和虛擬機,VMID使用UUID的變量字段[1]保留值“111”,表明所標識的是虛擬機。
(3)合適的編碼效率和成本
UUID時間戳的顆粒度是100 ns,這個解析度不適用于虛擬化環境。首先,虛擬機的生成速度是按秒計算的,虛擬機的生成頻率也至多需要精確到毫秒級;其次,虛擬化環境中一般使用普通硬件和低成本的NTP(時間協議),在網絡條件良好的情況下其時間誤差為10 ms級別。綜合以上兩點,兼顧編碼效率和系統成本,將VMID的時間戳顆粒度設置為1 ms。另外,考慮到用戶使用虛擬機的特點和需求,將VMID的生命周期設置為大于100年。這樣得到的時間戳字段長度的計算表達式如下:
(2)確定切縫時間上,需要視混凝土強度以及氣溫條件而定,通常情況下,當混凝土強度達到8~15MPa時是最佳時間。

由式(1)可知,當時間戳長度設置為42位二進制數、時間間隔為1 ms時,能夠保證的確切不重復使用時間為139年,計算如下:

(4)時間起始點的選擇
UUID的時間起始點選擇的是公歷格里高利歷法的第一天(即1582年10月 15日),而 VMID的時間起始點的選擇與虛擬化的廣泛應用有關。綜合全球范圍內虛擬化和云計算概念的推廣和使用情況,VMID的時間起始點定為2000年1月1日0時比較合適。
(5)時鐘序列長度
為了保持與UUID格式的兼容性,VMID采用與UUID相同的長度,因此根據42位時間戳長度得到的時鐘序列長度為31位二進制數。
(6)可接受的重復概率
VMID從時間和空間兩個角度保證了不重復性。時間不重復性通過時間戳和時鐘序列雙重保證,空間不重復性借助于物理機MAC地址的不重復性保證。當然,VMID還是存在一定的重復概率,可能引發重復的情況分為如下兩種。
①同一物理節點在同一時刻開始的1 ms時間間隔內,連續產生n個VMID,這些VMID存在重復情況的概率p(n)是:

其中,N=231,31是二進制時鐘序列的位數。當n=128時,p(n)=3.81×10-6;當n=1 024 時,p(n)=2.44×10-4。
②不同物理節點在同一時刻開始的1 ms時間間隔內,連續產生n個VMID,這些VMID存在重復情況的概率p(n)是:

其中,E=20,是NTP誤差修正因子(在網絡條件良好的情況下,NTP誤差為10 ms以下級別);N=231+46,31是二進制時鐘序列的位數,46是組播地址可變字段的位數。當n=228=268 435 456 時,p(n)=4.77×10-6。
由此可見,這樣的重復概率在現實環境中是完全可以接受的。
(7)使用和管理規則
VMID定位為虛擬機的通用惟一標識,因此VMID一旦創建,即與該虛擬機綁定,在該虛擬機的生命周期內保持不變,并在該虛擬機刪除后隨之消失。
(8)可擴展性
為了賦予VMID更多的管理功能,可以考慮對VMID的格式進行進一步擴展。因此VMID的版本字段預留有保留值,已為VMID賦予全新的賦值方法。也可以直接對VMID進行擴展,新增字節,添加進管理信息。
3.2.2 VMID編碼方案
VMID的具體編碼方案總結如下:為了與UUID盡可能兼容,整個編碼以UUID為基礎,延用UUID的變量字段,并使用其保留值“111”,用以表明所標識的是一臺虛擬機;縮短UUID的時間戳字段長度至42位,并隨之擴展時鐘序列字段的長度至31位。這樣得到的VMID是一個128位二進制數,通常表示為36個字符(32個16進制數加4個連接符“-”)組成的字符串,其字符順序符合網絡字節順序,即最高有效位(most significant byte,MSB)最先。具體格式如圖1所示。
對VMID中各字段比特位從高位往低位依次編號為:0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15…127,得到 VMID字符串的具體組成如下。
·time_low:32位二進制數,是時間戳的低位字節段,位于VMID的“0~31”號比特位。
·time_hi:10位二進制數,時間戳的高位字節段,位于VMID的“32~41”號比特位。
·clk_seq_low:18位二進制數,時鐘序列(clock sequence)的低位字節段,位于 VMID的“42~59”號比特位。
·ver:4位二進制數,版本字段,位于VMID的“60~63”號比特位。
·var:3 位二進制數,變量(variant)字段,位于 VMID的“64~66”號比特位。
·clk_seq_hi:13位二進制數,時鐘序列的高位字節段,位于VMID的“67~79”號比特位。
·node:48位二進制數,節點 (node)識別碼,位于VMID 的“80~127”號比特位。
VMID的具體賦值規則如下。
·變量字段:其值為“111”,相當于 UUID的變量字段,并通過其保留值“111”表示所標識的是虛擬機。
·版本字段:對于本文檔所說明的標識方法對應值為“0000”,其他值作為保留值。
·時間戳:將當前時間,以毫秒為間隔,換算為從2000年1月1日0時0分0秒開始,按照毫秒計數的42位二進制時間戳;對于沒有UTC的系統,可以由本地時間代替,但是全系統必須保持一致。
·時鐘序列:其值取一個31位的隨機數或高質量的偽隨機數,用以避免因并發導致的重復或系統時鐘偏差(如關機、遷移、誤差、硬件更換等)導致的重復。

圖1 VMID編碼格式
·節點字段:當虛擬機所在系統擁有IEEE 802 MAC地址時,node字段就是該MAC地址,其最低位比特包含global/local比特和unicast/multicast比特;在多MAC地址系統中可以取任一MAC地址。當虛擬機所在系統沒有IEEE 802 MAC地址時,將node字段中unicast/multicast比特位設置為 multicast,node字段的其他位取隨機數或偽隨機數。
3.2.3 VMID管理規則
VMID在虛擬機創建時由系統分配,在虛擬機整個生命周期內保持不變,在虛擬機刪除時丟棄不用。VMID與虛擬機生命周期關系如圖2所示。

圖2 虛擬機生命周期與VMID關系
由圖2可見,除了在虛擬機克隆或熱備等操作產生新的虛擬機時要分配新VMID之外,原始虛擬機的VMID在其整個生命周期中始終保持不變。可以說,VMID是一個虛擬機的通用惟一標識,完全可以作為虛擬機管理時的溯源依據。
3.2.4 VMID后續擴展
為了賦予VMID更多的管理功能,可以考慮對VMID的格式進行進一步擴展。如利用VMID的版本字段的保留值,為VMID賦予全新的賦值方法;也可以直接對VMID進行擴展,新增字節,添加管理信息,如虛擬機所在數據中心信息及當前所在物理機IP等信息。這些都是可以繼續深入考慮的內容。
1 IETF,RFC4122.A universally unique identifier (UUID)URN namespace,2005