◎結論:文章所使用的範例只是最簡單的架構,在機房實作前則要仔細規畫,網友可以發覺不論是VMware ESX Server或Virtual Iron,所有硬體設備在虛擬化後都隱藏在Hypervisor這個虛擬層之下;硬體與軟體彼此間抽離後,基礎架構顯得非常抽象,與傳統伺服器服務與主機間一對一對應的管理方式顯著不同,而在資訊安全、備份、災難復原或性能調校等也採用虛擬化專屬的工具,對虛擬化新手管理員來說,得先學習如何跨過這個門檻。
我們很幸運地使用一般零售市場的個人電腦零組件,就可以安裝VMware ESX Server虛擬化軟體,在更早之前這是難以想像的事。不過,文章只是個開始,尚未談到虛擬化前如何規畫、ESX Server如何組成Resource Pool、以及伺服器如何平均地分配在各部ESX Server上,後續更重要的性能調校、偵錯與除錯等,這些都是虛擬化的關鍵之一。很可惜目前硬體不足以展示這些技術,或者網友能分享相關經驗。
至少我們已經有簡單的學習平臺,不必停留在看文章、憑空想像基礎架構虛擬化的模樣。接下來,除了官方網站的技術文件(白皮書實用性不高)、相關學術研究,建議網友參考作業系統書籍,以及Wiki英文網站上關於虛擬化的文章,特別是文末所列的參考資料等,我們在偵錯、除錯時會需要這些文件。
在這裡提醒網友,就目前來說,不是所有伺服器服務都適合x86虛擬化,因為許多技術還在發展與驗證中,這方面訊息建議參考Oracle官方網站的資料,其產品幾乎對x86虛擬化都是極大的挑戰(吃處理器與記憶體資源)。
◎補充:Microkernel的效率與安全性
VMware ESX Server使用自行開發的「vmkernerl」做為Hypervisor,負責處理器指令運算與記憶體管理等核心作業,也就是執行特權指令。
在作業系統分類上,vmkernerl是一種「microkernel」,可以看成是一種簡化的作業系統核心,也是許多虛擬化軟體常用來當成Hypervisor。接下來所要探討的是ESX Server採用microkernel的原因,同樣的理論也適用於採用microkernel做為Hypervisor的虛擬化軟體,例如XenServer、Virtual Iron等。
Microkernel.tif
一般作業系統核心區分為microkernel與monolithic kernel(請參考比較圖)。microkernel只包括處理器所需的執行緒管理(thread management)、記憶體管理與內行程通訊(Inter-process communication,IPC)等,真正作業系統所需的功能如驅動程式(Device Driver)或檔案管理(File Management)等,則由User-mode Servers提供相關服務,其IPC便是用於溝通這些服務。
一般常用的Linux、Windows則是hybrid kernel,混合microkernel與monolithic kernel兩種核心架構。作業系統所需的行程管理、記憶體管理、檔案管理與裝置驅動程式等都封裝在核心內,屬於Privileged-mode,只有應用程式屬於User-mode。
相對於monolithic kernel或hybrid kernel,microkernel較為穩定,當某一個提供服務的Server當機了,不至於造成核心也崩潰(crash),或影響其他Server的服務;而且核心僅包含最少的特權指令,所以相對地安全。不過,microkernel在效率上比monolithic/hybrid kernel略差,因為後者的特權指令都在核心內溝通(同一個kernel-mode),但microkernel卻透過IPC溝通,所以核心將會經過2次的mode switches,也就是user-mode→kernel-mode→user-mode,但mode switches需要context switch,造成較低的效率。(相關技術說明請參考作業系統教科書)
雖然XenServer、Virtual Iron、VMware ESX Server等這類產品常使用microkernel做為Hypervisor,主要也是穩定與安全考量大於效率。VMware ESX Server 3.0版開始,vmkernerl是由Linux Kernel中的「initrd」行程載入的,有時會誤以為ESX只採用Linux Kernel。這個Linux Kernel用來提供ESX Server管理所需的Service Console,與vmkernel用於執行特權指令是不同的。
(未完,待續...)