天天看點

中關于虛拟機複制與遷移(上)

這是我曾經在 <<the architecture of open source applications>> 中的一篇文章試譯。

SnowFlock

羅伊科比

安德烈斯

雲計算提供了一個令人難以置信的計算平台。使用者通過點選幾下使用者可以以每小時不到10美分的價格租用在雲中的伺服器,節約了使用實體裝置的所有相關時間,精力和前期成本。雲供應商提供虛拟機(虛拟機),而不是實體計算機來實作低成本營運。雲計算的關鍵是虛拟化軟體,被稱為虛拟機螢幕(虛拟機M),用來模拟一台實體機器。使用者們非常安全地使用互相的客戶虛拟機,而沒有意識到他們通常與許多人共享實體機(“主機”)。

18.1 SnowFlock簡介

雲計算是靈活組織的福音。對于使用實體伺服器而言,使用者需要焦急地等待着緩慢的審批流程,準許購買伺服器,下訂單,直至伺服器出貨,然後安裝和配置作業系統(OS)和應用程式組。而雲使用者不需要等待數周的購買流程,隻專注過程控制,并可以在幾分鐘内建立一個新的獨立伺服器。

不幸的是,雲伺服器很少是獨立的。在快速執行個體化和按次使用模式的帶動下,雲伺服器通常是在配置相似的伺服器可變池中的一個執行個體,能夠執行動态和可擴充的并行計算,資料挖掘,或web等任務。因為需要多次從相同的靜态模闆中啟動新的執行個體,商業雲還不能兌現真正的按需計算的承諾。伺服器執行個體化後,雲使用者仍然必須管理群內建員及通過增加新的伺服器來調整。

SnowFlock通過虛拟機克隆技術解決了這些問題,這就是我們所提出的雲API調用。應用程式代碼經常通過一個系統調用接口調用OS服務,它現在也可以以同樣的方式通過類似的接口調用雲服務。通過SnowFlock的虛拟機克隆技術,我們可以将資源配置設定,叢集管理和應用程式邏輯可程式設計等諸多方面交織在一起,并作為一個單一的邏輯操作。

根據父虛拟機,虛拟機克隆技術執行個體化了雲伺服器的多個完全相同副本。從邏輯上講,克隆的虛拟機繼承了其父節點的所有狀态,包括作業系統和應用程式級緩存。此外,虛拟機的克隆都将被自動添加到一個内部私有網絡中,進而有效地加入了這個動态可擴充的群集。新的計算資源,被封裝為相同的虛拟機,進而可以按需動态建立。

就實際使用而已,虛拟機克隆技術是可用,高效,而且快速的。在這一章中,我們将描述SnowFlock中對虛拟機克隆技術的實作,包括如何有效地在多個不同的程式設計模型和架構實作克隆,如何在應用程式運作時使伺服器的開銷最少,以及如何在5秒或更少的時間内來創造幾十個新的虛拟機,等等。

SnowFlock非常靈活,能夠使用C, C + +,Python和Java的API來實作虛拟機克隆的程式控制。我們已經成功地将SnowFlock移植到多個不同系統的原型實作中。在并行計算中,我們通過精确克隆技術有效地分擔了在許多實體主機的負載,并取得了良好的效果。對于在一個專用的伺服器叢集上運作的使用了消息傳遞接口(MPI)的多個并行應用,需要修改MPI的啟動管理器,進而提供了良好的性能和更少的開銷,并且不需要修改應用就能夠在每個新的克隆叢集上運作。最後,在一些完全不同的應用案例中,我們使用SnowFlock來提高彈性伺服器的效率和性能。今天,基于雲服務的新業務一般需要啟動新的伺服器。而通過克隆運作中的虛拟機,SnowFlock帶來了新的伺服器功能。由于克隆的虛拟機繼承他們的父節點的熱緩沖區,進而使性能迅速達到峰值,使上線速度快了20倍。

18.2 虛拟機克隆

顧名思義,虛拟機克隆與父虛拟機幾乎是相同的。實際上,還是有一些輕微且必要的差異的,例如避免MAC位址沖突等問題,但我們會稍後讨論。建立一個整個本地磁盤和記憶體狀态的虛拟機克隆是必須的,這也是我們第一個主要的設計權衡:應該如何按需複制前端的狀态?

實作虛拟機克隆最簡單的方式是采用标準的虛拟機“遷移”能力。通常情況下,遷移是指将運作中的虛拟機服務移動到不同的主機上,例如如當主機超載或需要維修的情況下。但是,因為虛拟機是純粹的軟體,是以可以被封裝在一個資料檔案,然後将其複制到一個新的主機上,在短暫中斷後重新執行。要做到這一點,現有的VMMS要包含一個“檢查點”來建立檔案,該檔案包括本地檔案系統,記憶體映像,虛拟CPU(VCPU)寄存器等等。在遷移過程中,新啟動的副本替換原來的虛拟機,但這個過程是可以改變的,例如離開原來的虛拟機運作時可以産生一個虛拟機克隆。在這種所謂的“渴望”程序中,因為整個虛拟機處于狀态轉移前的執行狀态,是以整個虛拟機提供了最好的初始性能。這種複制的缺點是在開始執行前必須費力地複制整個虛拟機,這嚴重地影響了執行個體化的過程。

SnowFlock采用了另一種極端方式,即是延遲狀态複制。不再複制全部虛拟機,而是複制虛拟機轉移時所需得重要資料,在虛拟機轉移後,SnowFlock在複制克隆中所需的其他資料。這有兩個好處,首先,它最大限度地減少了工作量,盡可能執行個體化延遲加載。其次,它隻複制真正使用的狀态資料,實際上是提高了虛拟機克隆的效率。當然,這樣做的好處取決于克隆的行為,但少量的應用程式需要通路記憶體和在本地檔案系統的每個檔案的每一頁時就效果不大了。

然而,延時複制的好處不是免費的。由于狀态轉移被推遲到最後,需要在狀态到達時,才能繼續執行克隆。在時間共享工作站内将記憶體交換到磁盤,而并行的應用程式從高延遲的資料源擷取狀态可能被阻塞。在SnowFlock的用例中,這些阻塞降低了克隆的性能,其嚴重程度取決于應用程式。對于高性能計算應用,我們已經發現這種退化的影響不大,但可能會首先克隆的資料庫伺服器性能。應當指出的是,這是一個瞬态影響:在幾分鐘之内,大多數必要的狀态已被轉移且性能父節點比對。

順便說一句,如果你熟悉虛拟機,你可能考慮在這裡使用實時遷移的優化。實時遷移的優化,可以縮短原始虛拟機的暫停和恢複執行新副本之間的間隔。要做到這一點,虛拟機螢幕(VMM)需要在父節點仍在運作時預拷貝它的狀态,進而使隻有最近更改過的頁才遷移。這項技術不會影響之間的遷移要求和副本開始執行的時間間隔,是以不會降低虛拟機克隆的執行個體化延遲。

繼續閱讀