一種虛擬機鏡像文件存儲、分發(fā)方法及裝置制造方法
【專利摘要】本發(fā)明提供了一種虛擬機鏡像文件存儲、分發(fā)方法及裝置。存儲方法包括:將鏡像文件分割成定長的鏡像文件塊;對鏡像文件塊進行存儲。通過對鏡像文件定長切塊存儲,可以有效節(jié)約虛擬機鏡像文件的存儲空間,同時保證了較高的壓縮比。分發(fā)方法包括:確定歸屬本客戶端節(jié)點虛擬機的鏡像文件塊;基于P2P協(xié)議與其他客戶端節(jié)點建立連接;在其他客戶端節(jié)點中存在本客戶端節(jié)點虛擬機所需的鏡像文件塊時,從其他客戶端節(jié)點中獲取,否則從數(shù)據(jù)服務(wù)器獲取所需的鏡像文件塊;或者,在本客戶端節(jié)點虛擬機中存在其他客戶端節(jié)點虛擬機所需的鏡像文件塊時,將鏡像文件塊發(fā)送。采用P2P協(xié)議實現(xiàn)虛擬機客戶端間的鏡像文件分發(fā),有效提升了虛擬機鏡像文件分發(fā)的效率和速度。
【專利說明】一種虛擬機鏡像文件存儲、分發(fā)方法及裝置
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及數(shù)據(jù)存儲【技術(shù)領(lǐng)域】,特別涉及一種虛擬機鏡像文件存儲、分發(fā)方法及 裝直。
【背景技術(shù)】
[0002] "云計算"、"云存儲"是近年來出現(xiàn)較為重要的技術(shù)概念,給計算機科學以及互聯(lián) 網(wǎng)的發(fā)展帶來了長遠的影響。云計算、云存儲隱藏了底層復雜的基礎(chǔ)設(shè)施和管理邏輯,為用 戶提供了簡潔、易用、可動態(tài)調(diào)整的資源池。用戶無需掌握云內(nèi)部的專業(yè)知識,無需直接控 制云底層的基礎(chǔ)設(shè)施,就可以方便地使用云技術(shù)提供的計算、存儲資源,并且可以依據(jù)自己 的需求,更改資源的使用量,以便于節(jié)省成本。
[0003] 隨著各大公司云數(shù)據(jù)中心的建成,云環(huán)境下的虛擬機規(guī)模急劇擴張,虛擬機之間 硬件資源的復用以及網(wǎng)絡(luò)通信負載的加劇導致了整個云計算服務(wù)性能的下降,如何通過提 高虛擬環(huán)境下的服務(wù)性能來提升云系統(tǒng)的服務(wù)質(zhì)量,成為虛擬機研究領(lǐng)域的重要課題。虛 擬機在運行過程中依賴于本身所需的虛擬機鏡像文件,在大規(guī)模虛擬集群的數(shù)據(jù)中心中, 海量的虛擬機鏡像文件的存儲方案設(shè)計顯得尤為重要。
[0004] 云計算環(huán)境創(chuàng)建新虛擬機時,使用的硬盤鏡像通常是拷貝自一個模板鏡像。而傳 統(tǒng)的SAN(Storage Area Network and SAN protocols,存儲域網(wǎng)絡(luò)及其協(xié)議)存儲設(shè)備不 支持容錯處理,如果SAN設(shè)備失效,則整個系統(tǒng)都無法繼續(xù)工作。
[0005] 可見,現(xiàn)有虛擬機鏡像文件存儲和分發(fā)中存在的問題如下:
[0006] 1.龐大的虛擬機鏡像文件存儲所占的存儲空間巨大;
[0007] 2.虛擬機鏡像文件的分發(fā)單純依賴鏡像文件數(shù)據(jù)服務(wù)器,導致鏡像文件服務(wù)器會 成為網(wǎng)絡(luò)熱點,限制了虛擬機的建立及運行速度和魯棒性。
【發(fā)明內(nèi)容】
[0008] 本發(fā)明針對上述問題,提出了一種虛擬機鏡像文件存儲、分發(fā)方法及裝置,用以解 決虛擬機鏡像文件的海量存儲浪費存儲空間及分發(fā)效率低的問題。
[0009] 本發(fā)明提供了一種虛擬機鏡像文件存儲方法,包括如下步驟:
[0010] 將鏡像文件分割成定長的鏡像文件塊;
[0011] 對鏡像文件塊進行存儲。
[0012] 本發(fā)明提供了一種虛擬機鏡像文件分發(fā)方法,包括如下步驟:
[0013] 確定歸屬本客戶端節(jié)點虛擬機的鏡像文件塊;
[0014] 基于P2P (Peer to Peer,對等網(wǎng)絡(luò))協(xié)議與其他客戶端節(jié)點建立連接;
[0015] 在確定其他客戶端節(jié)點中存在本客戶端節(jié)點虛擬機所需的鏡像文件塊時,從其他 客戶端節(jié)點中獲取該鏡像文件塊,否則從數(shù)據(jù)服務(wù)器獲取所需的鏡像文件塊;或者,在確定 本客戶端節(jié)點虛擬機中存在其他客戶端節(jié)點虛擬機所需的鏡像文件塊時,將該鏡像文件塊 發(fā)送至其他客戶端節(jié)點,其中,鏡像文件塊是將虛擬機鏡像文件按定長分割后得到的。
[0016] 本發(fā)明提供了一種虛擬機鏡像文件存儲裝置,包括:
[0017] 分割單元,用于將鏡像文件分割成定長的鏡像文件塊;
[0018] 存儲單元,用于對鏡像文件塊進行存儲。
[0019] 本發(fā)明提供了一種虛擬機鏡像文件分發(fā)裝置,包括:
[0020] 確定單元,用于確定歸屬本客戶端節(jié)點虛擬機的鏡像文件塊;
[0021] 連接單元,用于基于對等網(wǎng)絡(luò)P2P協(xié)議與其他客戶端節(jié)點建立連接;
[0022] 分發(fā)單元,用于在確定其他客戶端節(jié)點中存在本客戶端節(jié)點虛擬機所需的鏡像文 件塊時,從其他客戶端節(jié)點中獲取該鏡像文件塊,否則從數(shù)據(jù)服務(wù)器獲取所需的鏡像文件 塊;或者,在確定本客戶端節(jié)點虛擬機中存在其他客戶端節(jié)點虛擬機所需的鏡像文件塊時, 將該鏡像文件塊發(fā)送至其他客戶端節(jié)點,其中,鏡像文件塊是將虛擬機鏡像文件按定長分 割后得到的。
[0023] 本發(fā)明有益效果如下:
[0024] 當前虛擬機鏡像文件存儲中,由于鏡像文件數(shù)量龐大,導致虛擬機鏡像文件存儲 所占空間巨大。在本發(fā)明實施例提供的虛擬機鏡像文件存儲方案中,通過對虛擬機鏡像文 件分割成定長的鏡像文件塊進行存儲,由于通過對鏡像文件定長分割成塊,保證了較高的 壓縮比,所以,可以有效節(jié)約虛擬機鏡像文件的存儲空間。
[0025] 另外,在現(xiàn)有的虛擬機鏡像文件分發(fā)中單純依賴鏡像文件服務(wù)器,限制了虛擬機 的建立及運行速度和魯棒性。針對該問題,在本發(fā)明實施例提供的虛擬機鏡像文件分發(fā)方 案中,采用P2P協(xié)議在虛擬機客戶端間進行鏡像文件的快速克隆、分發(fā),因為利用P2P虛擬 機鏡像文件的分發(fā)方法,所有的鏡像文件服務(wù)器和客戶端節(jié)點均可作為鏡像文件塊的提供 者,相互交換存儲的鏡像文件塊,有效將鏡像文件服務(wù)器的數(shù)據(jù)傳輸負載轉(zhuǎn)移到客戶端節(jié) 點上,平衡了數(shù)據(jù)傳輸?shù)呢撦d,避免了網(wǎng)絡(luò)熱點的出現(xiàn),有效縮短了拷貝鏡像文件所需等待 的時間和10開銷,提升了虛擬機鏡像文件分發(fā)的效率和速度。
【專利附圖】
【附圖說明】
[0026] 下面將參照附圖描述本發(fā)明的具體實施例,其中:
[0027] 圖1為本發(fā)明實施例中虛擬機鏡像文件存儲方法的流程示意圖;
[0028] 圖2為本發(fā)明實施例中不同鏡像文件切塊大小下系統(tǒng)實現(xiàn)的去冗余壓縮比示意 圖;
[0029] 圖3為本發(fā)明實施例中不同鏡像文件切塊大小參數(shù)下系統(tǒng)的10性能結(jié)果示意 圖;
[0030] 圖4為本發(fā)明實施例中鏡像文件塊存儲方案10性能測試結(jié)果示意圖;
[0031] 圖5為本發(fā)明實施例中指紋計算的MD5算法與SHA-1算法的性能比較示意圖;
[0032] 圖6為本發(fā)明實施例中鏡像文件塊文件存儲示意圖;
[0033] 圖7為本發(fā)明實施例中虛擬機鏡像文件分發(fā)方法的流程示意圖;
[0034] 圖8為本發(fā)明實施例中虛擬機鏡像文件分發(fā)方法的應(yīng)用場景示意圖;
[0035] 圖9為本發(fā)明實施例中虛擬機鏡像文件存儲裝置示意圖;
[0036] 圖10為本發(fā)明實施例中虛擬機鏡像文件分發(fā)裝置示意圖;
[0037] 圖11為本發(fā)明實施例中Bonnie++系統(tǒng)性能測試結(jié)果示意圖;
[0038] 圖12為本發(fā)明實施例中PostMark系統(tǒng)性能測試結(jié)果示意圖;
[0039] 圖13為本發(fā)明實施例中Linux虛擬機性能測試結(jié)果示意圖;
[0040] 圖14為本發(fā)明實施例中傳輸虛擬機鏡像文件花費的時間對比示意圖;
[0041] 圖15為本發(fā)明實施例中按需傳輸時虛擬機的啟動速度對比示意圖。
【具體實施方式】
[0042] 為了使本發(fā)明的技術(shù)方案及優(yōu)點更加清楚明白,以下結(jié)合附圖對本發(fā)明的示例性 實施例進行進一步詳細的說明,顯然,所描述的實施例僅是本發(fā)明的一部分實施例,而不是 所有實施例的窮舉。
[0043] 圖1為本發(fā)明實施例中虛擬機鏡像文件存儲方法的流程示意圖,如圖1所示,在虛 擬機鏡像文件存儲時可以包括如下步驟:
[0044] 步驟101 :將鏡像文件分割成定長的鏡像文件塊;
[0045] 步驟102 :對鏡像文件塊進行存儲。
[0046] 實施中,定長的鏡像文件塊大小可以為4KB的N倍,其中N為自然數(shù)。
[0047] 具體的,采用定長的鏡像文件塊分割方案,使用4KB或者4KB整數(shù)倍大小作為鏡像 文件塊作為文件系統(tǒng)在磁盤上保存的基本數(shù)據(jù)塊大小,保證了所有寫入磁盤的數(shù)據(jù)可以按 照磁盤簇邊界進行對齊。由于操作系統(tǒng)鏡像和應(yīng)用程序鏡像均為只讀,一旦寫入鏡像文件 之后不能再修改,因此,定長切分的方案可以保證較高的壓縮比。
[0048] 由于鏡像文件塊的大小,將直接影響到系統(tǒng)的10性能以及存儲壓縮比。因此需要 選取一個最佳的數(shù)據(jù)塊大小參數(shù),以便獲得10性能以及存儲壓縮比之間的平衡。
[0049] 圖2為本發(fā)明實施例中不同鏡像文件切塊大小下系統(tǒng)實現(xiàn)的去冗余壓縮比示意 圖,如圖2所示,通過對常用的183個總大小為2. 31TB的虛擬機鏡像文件進行去冗余而得 至IJ,這些鏡像文件包括了多個版本的Windows操作系統(tǒng)以及Linux操作系統(tǒng),應(yīng)用軟件包括 了科學計算軟件、生物信息學分析軟件、數(shù)據(jù)庫管理系統(tǒng)、辦公系統(tǒng)、網(wǎng)絡(luò)服務(wù)系統(tǒng)、集成開 發(fā)環(huán)境等多種組合,基本涵蓋了絕大部分的虛擬機應(yīng)用需求。所有的虛擬機文件系統(tǒng)存儲 的磁盤簇大小都是4KB,因此,小于4KB的去冗余鏡像文件塊并不能對去冗余壓縮比帶來很 明顯的提高。當鏡像文件塊大小增加時,系統(tǒng)整體的去冗余壓縮比迅速下降。
[0050] 圖3為本發(fā)明實施例中不同鏡像文件切塊大小參數(shù)下系統(tǒng)的10性能結(jié)果示意圖, 如圖3所示,實驗數(shù)據(jù)來自Liquid,其中,Liquid是將本發(fā)明實施例中提供的虛擬機鏡像文 件存儲方法應(yīng)用到實際中后,得到相應(yīng)的虛擬機鏡像文件存儲系統(tǒng),為了稱呼方便,命名該 裝置為"Liquid"。圖3中標記了 Raw數(shù)據(jù),是對本地的鏡像文件塊存儲進行讀寫操作的性 能,因為讀寫的鏡像文件塊經(jīng)過去冗余操作,只能是不相同的鏡像文件塊,其數(shù)量要比實際 寫入鏡像的數(shù)據(jù)要少。標記了去冗余的數(shù)據(jù),則是考慮了去冗余壓縮比而得到的結(jié)果,也即 表明了客戶端文件系統(tǒng)給虛擬機所提供的實際10性能的指標。較小的數(shù)據(jù)塊將會導致更 多的磁盤隨機讀寫操作,因此將會破壞系統(tǒng)的10性能。隨著鏡像文件塊的增長,10性能逐 漸提升,而在鏡像文件塊大小達到256KB之后逐漸穩(wěn)定下來。
[0051] 基于本發(fā)明實施例中的實驗結(jié)果以及實際使用經(jīng)驗表明,使用256KB至1MB范圍 的鏡像文件塊大小可以取得良好的系統(tǒng)10性能以及去冗余壓縮比,達到兩者之間的平衡, 能夠滿足絕大部分的應(yīng)用需求。
[0052] 實施中,定長的鏡像文件塊大小可以為256KB。
[0053] 具體實施中,在鏡像文件塊大小的選擇方面,可自定義切塊的大小,可以實現(xiàn)不同 大小切塊的壓縮存儲,一般來說較大的切塊方案意味著各鏡像塊之間的重復度更小,壓縮 比更小,而較小的切塊方案則由于元數(shù)據(jù)量的增量導致了系統(tǒng)10性能的下降。經(jīng)過試驗測 試,合適的切塊大小為256KB,能夠達到10性能與存儲壓縮比的平衡。
[0054] 圖4為本發(fā)明實施例中鏡像文件塊存儲方案10性能測試結(jié)果示意圖,如圖4所 示,采用本發(fā)明實施例中的虛擬機鏡像文件存儲方案與普通的Ext4(The fourth extended file system,擴展日志式文件系統(tǒng)第四版)文件系統(tǒng)設(shè)計進行比較對照,實驗環(huán)境為32核 主頻為2GHz的Intel(R)Xeon CPU E5-2640處理器,32GB內(nèi)存服務(wù)器1臺,安裝本發(fā)明實施 中提供的虛擬機鏡像文件存儲系統(tǒng)Liquid,然后以256KB為默認鏡像文件的切塊大小,分 別寫入1GB?160GB大小的鏡像文件進行讀寫性能測試。測試結(jié)果顯示,經(jīng)過優(yōu)化過的本 發(fā)明實施例中提供的存儲方案,性能優(yōu)于Ext4文件系統(tǒng)的存儲性能,兩者在鏡像讀取方面 的性能區(qū)別不大,但是在寫入性能中可以明顯看到,Ext4隨著系統(tǒng)中存儲鏡像文件規(guī)模的 逐漸擴大,系統(tǒng)中元數(shù)據(jù)規(guī)模將顯著增多,導致其在存儲量大于10G后寫入性能直線下降, 而本發(fā)明實施例中提供的存儲方案中對于鏡像文件寫入的性能則支持相對穩(wěn)定,在對于鏡 像文件的大規(guī)模增長,其寫入速度都穩(wěn)定在40MB/S以上,讀取性能則穩(wěn)定在30MB/S左右, 整體上在支持海量鏡像文件存儲方面優(yōu)于基于Ext4的方案。
[0055] 實施中,對鏡像文件塊進行存儲時,可以按照磁盤簇邊界對齊存儲。
[0056] 具體實施中,分割成定長的鏡像文件塊可以為4KB或者4KB整數(shù)倍大小,在存儲至 磁盤上可以按磁盤簇邊界對齊存儲,以有效利用磁盤空間。
[0057] 實施中,可以對存儲的鏡像文件塊進行去冗余。
[0058] 具體實施中,對存儲的鏡像文件塊去冗余,可以對鏡像文件變長切塊或者定長切 塊,從效果來看,變長切塊的效果更好,但實現(xiàn)復雜,計算量也大;本發(fā)明實施例中的鏡像文 件塊修改不多,定長切塊易于實現(xiàn),且能實現(xiàn)較好的壓縮效果。
[0059] 實施中,可以對鏡像文件塊進行MD5 (Message Digest Algorithm MD5,消息摘要 算法第五版)指紋特征計算,確定鏡像文件塊的指紋特征;根據(jù)指紋特征對存儲的鏡像文 件塊去冗余;在存儲鏡像文件塊的同時存儲其指紋特征。
[0060] 具體實施中,考慮到在存儲虛擬機鏡像文件過程中去冗余,需要檢測鏡像文件中 是否含有重復的鏡像文件塊??梢圆捎肕D5加密算法來進行鏡像文件指紋特征的計算,對 于具備相同指紋特征的鏡像文件塊,則被認為是重復冗余的鏡像文件塊。針對指紋特征算 法的選取,本發(fā)明實施例中,對MD5加密算法和SHA-1 (Secure Hash Algorithm,安全散列算 法)算法的性能進行測試比較,將二者應(yīng)用于計算各定長鏡像文件塊的指紋特征,找出具 備相同數(shù)據(jù)的鏡像塊實施去冗余存儲的過程。在本發(fā)明實施例中,使用了 1?16個線程并 發(fā)的計算測試,計算兩種算法在相同線程數(shù)下所表現(xiàn)出的吞吐量性能差異性能。圖5為本 發(fā)明實施例中指紋計算的MD5算法與SHA-1算法的性能比較示意圖,具體測試比較結(jié)果如 圖5所示:MD5算法在計算吞吐量上明顯優(yōu)于SHA-1算法,并在一定程度下會隨著線程數(shù)目 的增加計算速度優(yōu)勢更為明顯,而SHA-1算法則對于CPU計算資源的敏感程度不夠,多線程 條件下計算吞吐量依然維持在較低的水平。因此,MD5是計算指紋特征的一種更加優(yōu)異算 法。當然,除了 MD5算法,也可以采用可以實現(xiàn)同樣功能其他算法。
[0061] 具體實施中,在完成一個應(yīng)用程序或操作系統(tǒng)的鏡像文件存儲后,運行該鏡像文 件時,對該鏡像文件分塊并進行MD5指紋特征計算,可以包括:
[0062] 將在不同虛擬機中需進行修改的鏡像文件塊存儲在第一級緩存區(qū),將最近讀取的 只讀鏡像文件塊存儲在第二級緩存區(qū);
[0063] 對第二級緩存區(qū)里的鏡像文件塊進行MD5指紋特征計算。
[0064] 具體實施中,可以在內(nèi)存中維護兩級緩存區(qū),將在不同虛擬機中需進行修改的鏡 像文件塊存儲在第一級緩存區(qū),這里,第一級緩存區(qū)主要緩存各虛擬機客戶端運行鏡像文 件過程中需要頻繁修改的鏡像文件塊,即,第一級緩存區(qū)可以命名為私有緩存,在第一級緩 存區(qū)中的鏡像文件塊不計算指紋特征。第二級緩存區(qū)主要保存最近讀取的只讀數(shù)據(jù)塊,對 第二級緩存區(qū)中的鏡像文件塊進行指紋特征的計算。即,第一級緩存區(qū)中的鏡像文件塊只 有被刷入第二級緩存區(qū)中,才需要計算指紋特征,采用兩級緩存可以有效減少鏡像文件塊 的指紋特征計算量,第一級緩存中的鏡像文件塊是針對不同虛擬機修改的,不能供其他虛 擬機使用,因此不需要計算其指紋特征,這樣處理保證了對于頻繁修改的鏡像文件塊能夠 快速的完成,極大的提升系統(tǒng)的運打效率。
[0065] 實施中,可以根據(jù)LRU(Least Recently Used,近期最少使用算法)算法確定第二 緩存區(qū)中的鏡像文件塊。
[0066] 具體實施中,可以使用LRU算法進行緩存管理,加快虛擬機訪問速度。LRU算法,即 最少使用頁面置換算法,是為虛擬頁式存儲管理服務(wù)的。關(guān)于操作系統(tǒng)的內(nèi)存管理,如何節(jié) 省利用容量不大的內(nèi)存為最多的進程提供資源,一直是研究的重要方向。而內(nèi)存的虛擬存 儲管理,是現(xiàn)在較為通用的方式,具體為:在內(nèi)存有限的情況下,擴展一部分外存作為虛擬 內(nèi)存,真正的內(nèi)存只存儲當前運行時所用得到信息。這無疑極大地擴充了內(nèi)存的功能,極大 地提高了計算機的并發(fā)處理能力。虛擬頁式存儲管理,則是將進程所需空間劃分為多個頁 面,內(nèi)存中只存放當前所需頁面,其余頁面放入外存的管理方式。
[0067] 虛擬頁式存儲管理減少了進程所需的內(nèi)存空間,卻也帶來了運行時間變長這一缺 點:進程運行過程中,不可避免地要把在外存中存放的一些信息和內(nèi)存中已有的進行交換, 由于外存的低速,這一步驟所花費的時間不可忽略。因而,通過采取優(yōu)秀的算法以減少讀取 外存的次數(shù),還可以進一步取得更好的效果。
[0068] 實施中,可以將鏡像文件塊合并為大數(shù)據(jù)塊BLK(Block,數(shù)據(jù)塊)文件后進行存 儲。
[0069] 實施中,可以獲取BLK文件的大小、空閑位置以及鏡像文件塊的指紋特征所對應(yīng) 的位置偏移量;根據(jù)BLK文件的大小、空閑位置以及鏡像文件塊的指紋特征所對應(yīng)的位置 偏移量,存儲鏡像文件塊。
[0070] 實施中,可以采用位圖文件bitmap記錄BLK文件已使用和/或未使用的位置。
[0071] 具體實施中,圖4為本發(fā)明實施例中鏡像文件塊存儲方案10性能測試結(jié)果示意 圖,圖6為本發(fā)明實施例中鏡像文件塊文件存儲示意圖,通過對海量鏡像文件塊文件進行 合并管理,減少系統(tǒng)中海量的元數(shù)據(jù)操作,提高系統(tǒng)10性能,具體如圖6和圖5所示,傳統(tǒng) 的虛擬機鏡像文件存儲方法是將所有的鏡像文件塊作為單獨的存儲文件放置在指定的目 錄下,這樣該目錄下將產(chǎn)生大量的鏡像文件塊文件,同時伴隨著大量的文件元數(shù)據(jù)管理,降 低系統(tǒng)性能。本發(fā)明實施中可以借鑒Haystack的原理來實現(xiàn)虛擬機鏡像文件存儲,S卩,將 多個鏡像文件塊進行合并,將其存在一個的大數(shù)據(jù)塊BLK文件中。
[0072] 文件系統(tǒng)的上層需要對大數(shù)據(jù)塊BLK的元數(shù)據(jù)進行管理,包括BLK文件的大小、空 閑位置、指紋特征對應(yīng)偏移量等。這里可以采用BMP(Bitmap,圖像文件格式)文件記錄BLK 文件中使用與空閑記錄的bitmap表,IDX(Index,索引)文件記錄指紋特征對應(yīng)鏡像文件塊 在BLK文件中的偏移位置,三個文件都以指紋的首個Byte字符作為其文件名前綴,具體可 以如下:
[0073] BMP文件:在每次進行新鏡像文件塊寫入或數(shù)據(jù)刪除時,需要用到BMP文件,該文 件以bit位的方式記錄了 BLK文件中對應(yīng)偏移量中的數(shù)據(jù)空間是否已經(jīng)使用,寫入鏡像文 件塊前,首先查看BMP文件中空閑的空間,刪除的鏡像文件塊則將將其對應(yīng)的bit位置為0。
[0074] IDX文件:記錄對應(yīng)BLK文件中的元數(shù)據(jù)內(nèi)容,主要用于找到指紋特征對應(yīng)的鏡像 文件塊在BLK文件中的偏移位置,所有鏡像文件塊的讀取首先需要從IDX中讀取對應(yīng)偏移 位置,然后再從BLK文件中對應(yīng)的偏移位置讀取鏡像文件塊,為提高鏡像文件塊讀取的速 度,可以將IDX文件內(nèi)容緩存在內(nèi)存中。
[0075] BLK文件:放置指紋特征對應(yīng)的鏡像文件塊數(shù)據(jù),BLK為一個類似鏡像文件塊集合 的數(shù)組,每個數(shù)組元素長度固定為鏡像塊的切塊長度,即,在本發(fā)明實施例中為4KB或其整 數(shù)倍,對于鏡像文件塊位置的查找,由IDX文件指紋特征對應(yīng)的鏡像文件塊位置來確定。
[0076] 如圖6所示,基于上述三個文件,可以將大量的鏡像文件塊內(nèi)容合并在同一個文 件中。在虛擬機用戶在寫入新的鏡像塊數(shù)據(jù)時,可以首先從BMP文件中獲取可讀寫的位置 BLK_ID,BMP文件將該BLK_ID置為1,然后在IDX文件中寫入對應(yīng)指紋塊到BLK_ID的映射, 同時將BLK文件中對應(yīng)BLK_ID的偏移位置提供給用戶進行寫入操作。當鏡像塊已經(jīng)存在于 Liquid中時,只需要從IDX文件中讀取對應(yīng)BLK_ID號,然后從BLK文件中讀取相關(guān)數(shù)據(jù)。
[0077] 在解決虛擬機鏡像文件存儲的基礎(chǔ)上,本發(fā)明實施例針對在現(xiàn)有的虛擬機鏡像文 件分發(fā)中單純依賴鏡像文件服務(wù)器,限制了虛擬機的建立及運行速度和魯棒性的問題,提 供了一種虛擬機鏡像文件分發(fā)方法,圖7為本發(fā)明實施例中虛擬機鏡像文件分發(fā)方法實施 的流程示意圖,如圖7所示,該方法可以包括如下步驟:
[0078] 步驟701 :確定歸屬本客戶端節(jié)點虛擬機的鏡像文件塊;
[0079] 步驟702 :基于P2P協(xié)議與其他客戶端節(jié)點建立連接;
[0080] 步驟703 :在確定其他客戶端節(jié)點中存在本客戶端節(jié)點虛擬機所需的鏡像文件塊 時,從其他客戶端節(jié)點中獲取該鏡像文件塊,否則從數(shù)據(jù)服務(wù)器獲取所需的鏡像文件塊;或 者,在確定本客戶端節(jié)點虛擬機中存在其他客戶端節(jié)點虛擬機所需的鏡像文件塊時,將該 鏡像文件塊發(fā)送至其他客戶端節(jié)點,其中,鏡像文件塊是將虛擬機鏡像文件按定長分割后 得到的。
[0081] 其中,步驟701和步驟702沒有嚴格的時序要求,本領(lǐng)域技術(shù)人員應(yīng)該明白,步驟 702既可以在步驟701之后執(zhí)行,也可以在步驟701之前進行,本發(fā)明對上述步驟的執(zhí)行順 序不作限制。
[0082] 具體實施中,圖8為本發(fā)明實施例中虛擬機鏡像文件分發(fā)方法的應(yīng)用場景示意 圖,如圖8所示,本發(fā)明實施例中基于P2P的數(shù)據(jù)分發(fā)模式,將鏡像服務(wù)器上的數(shù)據(jù)傳輸負 載轉(zhuǎn)移到客戶端節(jié)點上,系統(tǒng)中所有的鏡像文件服務(wù)器節(jié)點以及客戶端節(jié)點都可以作為鏡 像文件塊的提供節(jié)點,互相之間通過交換存儲的數(shù)據(jù)塊指紋集合來實現(xiàn)信息的分發(fā),實施 中,各個節(jié)點(包括鏡像文件服務(wù)器節(jié)點和客戶端節(jié)點)可以通過心跳包將節(jié)點負載相關(guān) 信息發(fā)送給與其連接的節(jié)點,以平衡系統(tǒng)中的負載分布,有效規(guī)避了網(wǎng)絡(luò)熱點的出現(xiàn),避免 系統(tǒng)中瓶頸的出現(xiàn)。
[0083] 具體實施中,客戶端節(jié)點會優(yōu)先從與其連接的客戶端節(jié)點中獲取鏡像文件塊,只 有當所有與其連接的客戶端節(jié)點中都不包含需要的鏡像文件塊對應(yīng)的指紋特征時,客戶端 節(jié)點才會向鏡像文件服務(wù)器中發(fā)起讀取請求,以獲得所需要的鏡像文件塊,有效將鏡像文 件服務(wù)器的數(shù)據(jù)傳輸負載轉(zhuǎn)移到客戶端節(jié)點上,平衡了數(shù)據(jù)傳輸?shù)呢撦d,避免了網(wǎng)絡(luò)熱點 的出現(xiàn)。
[0084] 實施中,可以進一步將從其他客戶端或數(shù)據(jù)服務(wù)器獲取的鏡像文件塊存放在緩存 區(qū)中。
[0085] 實施中,將從其他客戶端或數(shù)據(jù)服務(wù)器獲取的鏡像文件塊存放在緩存區(qū)中,可以 通過根據(jù)近期最少使用算法LRU確定緩存區(qū)中的鏡像文件塊。
[0086] 具體實施中,可以使用LRU算法進行緩存管理,加快虛擬機訪問速度。LRU算法,即 最少使用頁面置換算法,是為虛擬頁式存儲管理服務(wù)的。關(guān)于操作系統(tǒng)的內(nèi)存管理,如何節(jié) 省利用容量不大的內(nèi)存為最多的進程提供資源,一直是研究的重要方向。而內(nèi)存的虛擬存 儲管理,是現(xiàn)在較為通用的方式,具體為:在內(nèi)存有限的情況下,擴展一部分外存作為虛擬 內(nèi)存,真正的內(nèi)存只存儲當前運行時所用得到信息。這無疑極大地擴充了內(nèi)存的功能,極大 地提高了計算機的并發(fā)處理能力。虛擬頁式存儲管理,則是將進程所需空間劃分為多個頁 面,內(nèi)存中只存放當前所需頁面,其余頁面放入外存的管理方式。
[0087] 虛擬頁式存儲管理減少了進程所需的內(nèi)存空間,卻也帶來了運行時間變長這一缺 點:進程運行過程中,不可避免地要把在外存中存放的一些信息和內(nèi)存中已有的進行交換, 由于外存的低速,這一步驟所花費的時間不可忽略。因而,通過采取優(yōu)秀的算法以減少讀取 外存的次數(shù),還可以進一步取得更好的效果。
[0088] 實施中,可以計算鏡像文件塊的MD5指紋特征;根據(jù)指紋特征確定其他客戶端節(jié) 點中是否存在本客戶端節(jié)點虛擬機所需的鏡像文件塊,或者,根據(jù)指紋特征確定本客戶端 節(jié)點虛擬機中是否存在其他客戶端節(jié)點虛擬機所需的鏡像文件塊。
[0089] 具體實施中,在通過虛擬機鏡像文件分發(fā)方法獲取一個應(yīng)用程序或操作系統(tǒng)的鏡 像文件后,運行該鏡像文件時,對該鏡像文件分塊并進行MD5指紋特征計算,可以包括:
[0090] 將在不同虛擬機中需進行修改的鏡像文件塊存儲在第一級緩存區(qū),將最近讀取的 只讀鏡像文件塊存儲在第二級緩存區(qū);
[0091] 對第二級緩存區(qū)里的鏡像文件塊進行MD5指紋特征計算。
[0092] 具體實施中,可以在內(nèi)存中維護兩級緩存區(qū),將在不同虛擬機中需進行修改的鏡 像文件塊存儲在第一級緩存區(qū),這里,第一級緩存區(qū)主要緩存各虛擬機客戶端運行鏡像文 件過程中需要頻繁修改的鏡像文件塊,即,第一級緩存區(qū)可以命名為私有緩存,在第一級緩 存區(qū)中的鏡像文件塊不計算指紋特征。第二級緩存區(qū)主要保存最近讀取的只讀數(shù)據(jù)塊,對 第二級緩存區(qū)中的鏡像文件塊進行指紋特征的計算。即,第一級緩存區(qū)中的鏡像文件塊只 有被刷入第二級緩存區(qū)中,才需要計算指紋特征,采用兩級緩存可以有效減少鏡像文件塊 的指紋特征計算量,第一級緩存中的鏡像文件塊是針對不同虛擬機修改的,不能供其他虛 擬機使用,因此不需要計算其指紋特征,這樣處理保證了對于頻繁修改的鏡像文件塊能夠 快速的完成,極大的提升系統(tǒng)的運打效率。
[0093] 實施中,可以根據(jù)LRU算法確定第二緩存區(qū)中的鏡像文件塊。
[0094] 實施中,根據(jù)指紋特征確定其他客戶端節(jié)點中是否存在本客戶端節(jié)點虛擬機所需 的鏡像文件塊,可以包括:向其他客戶端節(jié)點發(fā)送本客戶端節(jié)點虛擬機所需的鏡像文件塊 指紋特征集合;指紋特征集合用于供其他客戶端節(jié)點根據(jù)該指紋特征集合確定是否存在本 客戶端節(jié)點虛擬機所需的鏡像文件塊;或者,根據(jù)指紋特征確定本客戶端節(jié)點虛擬機中是 否存在其他客戶端節(jié)點虛擬機所需的鏡像文件塊,包括:接收其他客戶端節(jié)點發(fā)送的該客 戶端節(jié)點虛擬機所需的鏡像文件塊指紋特征集合;根據(jù)指紋特征集合確定是否存在該客戶 端節(jié)點虛擬機所需的鏡像文件塊。
[0095] 具體實施中,系統(tǒng)中每個客戶端節(jié)點可以都向元數(shù)據(jù)服務(wù)器節(jié)點尋問其他節(jié)點的 位置,并維持與這些客戶端節(jié)點的連接,并且會周期的向這些客戶端節(jié)點獲取最新的鏡像 文件塊指紋特征集合,保證其維護客戶端節(jié)點信息足夠準確。當需要獲取具有某個指紋特 征對應(yīng)的鏡像文件塊時,客戶端節(jié)點首先隨機的選取幾個其他客戶端節(jié)點,檢測這些與其 連接的客戶端節(jié)點中是否包含了需要的鏡像文件塊對應(yīng)的指紋特征,如果找到了需要的鏡 像文件塊對應(yīng)的指紋特征,則從該客戶端節(jié)點獲取該鏡像文件塊。
[0096] P2P鏡像文件分發(fā)協(xié)議中尋找Peer數(shù)據(jù)節(jié)點的算法,如下所示:
[0097]
【權(quán)利要求】
1. 一種虛擬機鏡像文件存儲方法,其特征在于,包括如下步驟: 將鏡像文件分割成定長的鏡像文件塊; 對鏡像文件塊進行存儲。
2. 如權(quán)利要求1所述的方法,其特征在于,定長的鏡像文件塊大小為4KB的N倍,其中 N為自然數(shù)。
3. 如權(quán)利要求2所述的方法,其特征在于,定長的鏡像文件塊大小為256KB。
4. 如權(quán)利要求1至3任一所述的方法,其特征在于,對鏡像文件塊進行存儲時,按照磁 盤簇邊界對齊存儲。
5. 如權(quán)利要求1所述的方法,其特征在于,進一步包括: 對存儲的鏡像文件塊進行去冗余。
6. 如權(quán)利要求5所述的方法,其特征在于,進一步包括: 對鏡像文件塊進行消息摘要算法第五版MD5指紋特征計算,確定鏡像文件塊的指紋特 征; 根據(jù)指紋特征對存儲的鏡像文件塊去幾余; 在存儲鏡像文件塊的同時存儲其指紋特征。
7. 如權(quán)利要求1所述的方法,其特征在于,將鏡像文件塊合并為大數(shù)據(jù)塊BLK文件后進 行存儲。
8. 如權(quán)利要求7所述的方法,其特征在于,包括: 獲取BLK文件的大小、空閑位置以及鏡像文件塊的指紋特征所對應(yīng)的位置偏移量; 根據(jù)BLK文件的大小、空閑位置以及鏡像文件塊的指紋特征所對應(yīng)的位置偏移量,存 儲鏡像文件塊。
9. 如權(quán)利要求8所述的方法,其特征在于,包括: 采用位圖文件bitmap記錄BLK文件已使用和/或未使用的位置。
10. -種虛擬機鏡像文件分發(fā)方法,其特征在于,包括如下步驟: 確定歸屬本客戶端節(jié)點虛擬機的鏡像文件塊; 基于對等網(wǎng)絡(luò)P2P協(xié)議與其他客戶端節(jié)點建立連接; 在確定其他客戶端節(jié)點中存在本客戶端節(jié)點虛擬機所需的鏡像文件塊時,從其他客戶 端節(jié)點中獲取所述鏡像文件塊,否則從數(shù)據(jù)服務(wù)器獲取所需的鏡像文件塊;或者,在確定本 客戶端節(jié)點虛擬機中存在其他客戶端節(jié)點虛擬機所需的的鏡像文件塊時,將所述鏡像文件 塊發(fā)送至其他客戶端節(jié)點,其中,所述鏡像文件塊是將虛擬機鏡像文件按定長分割后得到 的。
11. 如權(quán)利要求10所述的方法,其特征在于,進一步包括:將從其他客戶端或數(shù)據(jù)服務(wù) 器獲取的鏡像文件塊存放在緩存區(qū)中。
12. 如權(quán)利要求11所述的方法,其特征在于,將從其他客戶端或數(shù)據(jù)服務(wù)器獲取的鏡 像文件塊存放在緩存區(qū)中包括:根據(jù)近期最少使用算法LRU確定緩存區(qū)中的鏡像文件塊。
13. 如權(quán)利要求10所述的方法,其特征在于,進一步包括: 計算鏡像文件塊的MD5指紋特征; 根據(jù)指紋特征確定其他客戶端節(jié)點中是否存在本客戶端節(jié)點虛擬機所需的鏡像文件 塊,或者,根據(jù)指紋特征確定本客戶端節(jié)點虛擬機中是否存在其他客戶端節(jié)點虛擬機所需 的的鏡像文件塊。
14. 如權(quán)利要求13所述的方法,其特征在于,根據(jù)指紋特征確定其他客戶端節(jié)點中是 否存在本客戶端節(jié)點虛擬機所需的鏡像文件塊,包括:向其他客戶端節(jié)點發(fā)送本客戶端節(jié) 點虛擬機所需的鏡像文件塊指紋特征集合;指紋特征集合用于供其他客戶端節(jié)點根據(jù)該指 紋特征集合確定是否存在本客戶端節(jié)點虛擬機所需的鏡像文件塊; 或者,根據(jù)指紋特征確定本客戶端節(jié)點虛擬機中是否存在其他客戶端節(jié)點虛擬機所需 的的鏡像文件塊,包括:接收其他客戶端節(jié)點發(fā)送的該客戶端節(jié)點虛擬機所需的鏡像文件 塊指紋特征集合;根據(jù)指紋特征集合確定是否存在該客戶端節(jié)點虛擬機所需的鏡像文件 塊。
15. 如權(quán)利要求14所述的方法,其特征在于,進一步包括:鏡像文件塊指紋特征集合在 傳輸前采用Bloom Filter數(shù)據(jù)結(jié)構(gòu)壓縮處理。
16. 如權(quán)利要求10所述的方法,其特征在于,進一步包括: 以壓縮速度高于網(wǎng)絡(luò)帶寬速度的壓縮算法壓縮所述鏡像文件塊。
17. 如權(quán)利要去16所述的方法,其特征在于,包括: 所述壓縮算法為Google Snappy壓縮算法。
18. -種虛擬機鏡像文件存儲裝置,其特征在于,包括: 分割單元,用于將鏡像文件分割成定長的鏡像文件塊; 存儲單元,用于對鏡像文件塊進行存儲。
19. 如權(quán)利要求18所述的裝置,其特征在于,分割單元進一步用于按4KB的N倍將鏡像 文件分割成定長的鏡像文件塊,其中N為自然數(shù)。
20. 如權(quán)利要求19所述的裝置,其特征在于,分割單元進一步用于將鏡像文件分割成 256KB大小的定長鏡像文件塊。
21. 如權(quán)利要求18至20任一所述的裝置,其特征在于,存儲單元進一步用于按照磁盤 簇邊界對齊的方式存儲鏡像文件塊。
22. 如權(quán)利要求18所述的裝置,其特征在于,存儲單元進一步用于對存儲的鏡像文件 塊進行去冗余。
23. 如權(quán)利要求22所述的裝置,其特征在于,進一步包括: 指紋特征單元,用于對鏡像文件塊進行MD5指紋特征計算,確定鏡像文件塊的指紋特 征; 存儲單元進一步用于根據(jù)指紋特征對存儲的鏡像文件塊去冗余,并在存儲鏡像文件塊 的同時存儲其指紋特征。
24. 如權(quán)利要求18所述的裝置,其特征在于,存儲單元進一步用于將鏡像文件塊合并 為大數(shù)據(jù)塊BLK文件后進行存儲。
25. 如權(quán)利要求24所述的裝置,其特征在于,存儲單元進一步用于根據(jù)BLK文件的大 小、空閑位置以及鏡像文件塊的指紋特征所對應(yīng)的位置偏移量,存儲鏡像文件塊。
26. 如權(quán)利要求25所述的裝置,其特征在于,存儲單元進一步用于采用位圖文件 bitmap記錄BLK文件已使用和/或未使用的位置。
27. -種虛擬機鏡像文件分發(fā)裝置,其特征在于,包括: 確定單元,用于確定歸屬本客戶端節(jié)點虛擬機的鏡像文件塊; 連接單元,用于基于對等網(wǎng)絡(luò)P2P協(xié)議與其他客戶端節(jié)點建立連接; 分發(fā)單元,用于在確定其他客戶端節(jié)點中存在本客戶端節(jié)點虛擬機所需的鏡像文件塊 時,從其他客戶端節(jié)點中獲取所述鏡像文件塊,否則從數(shù)據(jù)服務(wù)器獲取所述鏡像文件塊;或 者,在確定本客戶端節(jié)點虛擬機中存在其他客戶端節(jié)點虛擬機所需的鏡像文件塊時,將所 述鏡像文件塊發(fā)送至其他客戶端節(jié)點,其中,所述鏡像文件塊是將虛擬機鏡像文件按定長 分割后得到的。
28. 如權(quán)利要求27所述的裝置,其特征在于,進一步包括:緩存單元,用于將從其他客 戶端或數(shù)據(jù)服務(wù)器獲取的鏡像文件塊存放在緩存區(qū)中。
29. 如權(quán)利要求28所述的裝置,其特征在于,緩存單元,進一步用于根據(jù)近期最少使用 算法LRU確定緩存區(qū)中的鏡像文件塊。
30. 如權(quán)利要求27所述的裝置,其特征在于,進一步包括: 指紋特征計算單元,用于計算所述鏡像文件塊的MD5指紋特征; 分發(fā)單元進一步用于根據(jù)指紋特征確定其他客戶端節(jié)點中是否存在本客戶端節(jié)點虛 擬機所需的鏡像文件塊,或者,根據(jù)指紋特征確定本客戶端節(jié)點虛擬機中是否存在其他客 戶端節(jié)點虛擬機所需的的鏡像文件塊。
31. 如權(quán)利要求30所述的裝置,其特征在于,分發(fā)單元進一步用于在根據(jù)指紋特征確 定其他客戶端節(jié)點中是否存在本客戶端節(jié)點虛擬機所需的鏡像文件塊時,向其他客戶端節(jié) 點發(fā)送本客戶端節(jié)點虛擬機所需的鏡像文件塊指紋特征集合;指紋特征集合用于供其他客 戶端節(jié)點根據(jù)該指紋特征集合確定是否存在本客戶端節(jié)點虛擬機所需的鏡像文件塊;或 者,在根據(jù)指紋特征確定本客戶端節(jié)點虛擬機中是否存在其他客戶端節(jié)點虛擬機所需的的 鏡像文件塊時,接收其他客戶端節(jié)點發(fā)送的該客戶端節(jié)點虛擬機所需的鏡像文件塊指紋特 征集合;根據(jù)指紋特征集合確定是否存在該客戶端節(jié)點虛擬機所需的鏡像文件塊。
32. 如權(quán)利要求31所述的裝置,其特征在于,分發(fā)單元進一步用于在向其他客戶端節(jié) 點發(fā)送本客戶端節(jié)點虛擬機所需的鏡像文件塊指紋特征集合前,對所述鏡像文件塊指紋特 征集合進行Bloom Filter數(shù)據(jù)結(jié)構(gòu)壓縮處理。
33. 如權(quán)利要求27所述的裝置,其特征在于,分發(fā)單元進一步用于以壓縮速度高于網(wǎng) 絡(luò)帶寬速度的壓縮算法壓縮所述鏡像文件塊。
34. 如權(quán)利要求33所述的裝置,其特征在于,分發(fā)單元進一步用于采用Google Snappy 壓縮算法壓縮所述鏡像文件塊。
【文檔編號】H04L29/08GK104239575SQ201410524284
【公開日】2014年12月24日 申請日期:2014年10月8日 優(yōu)先權(quán)日:2014年10月8日
【發(fā)明者】姜進磊, 武永衛(wèi), 楊廣文, 趙勛, 何川 申請人:清華大學