我們知道云計算平臺上面的云主機實際上都是虛擬機,但我們感覺不出來,用起來和一臺真實的服務器沒什么區(qū)別,這都要歸功于虛擬化技術(Virtualization)??梢哉f虛擬化技術是實現(xiàn)云計算基礎架構層面(IaaS)的核心技術。那么這種虛擬化技術究竟是怎么回事?
云計算所使用的虛擬化技術,其實并不是一項新技術。1998年成立的VMWare(威睿)公司就是做虛擬機軟件的,后來被數(shù)據(jù)存儲技術公司EMC(易安信)收購了,再后來EMC又被Dell收購了。
我們先不談VMware公司的歷史,重點說一下他們的虛擬機軟件:VMware Workstation。這個軟件允許多個x86虛擬機同時被創(chuàng)建和運行。每個虛擬機實例可以運行其自己的客戶機操作系統(tǒng)(Guest OS),如Windows、Linux、BSD等。說白了就是,VMware Workstation允許一臺真實的計算機同時運行好幾個操作系統(tǒng)。
從底層操作系統(tǒng)來看,每個虛擬機都是一個用戶進程;從虛擬機中的的Guest OS來看,自己擁有整個計算機。
虛擬機的工作原理
虛擬機軟件解決了一個關鍵的技術問題:就是如何讓Guest OS認為自己正運行在一個真實的計算機上。
VMware的架構圖
管理多個虛擬機的軟件叫做VMM(Virtual Machine Monitor),或者叫hypervisor。VMM做了三件事來欺騙Guest OS:分別是虛擬CPU、虛擬內(nèi)存、虛擬I/O。
虛擬CPU:為每個虛擬機的CPU準備了一個虛擬寄存器的數(shù)據(jù)結構,跟蹤著CPU所有寄存器中的值。CPU的全部狀態(tài)其實就是所有寄存器的值,只要在Guest OS看來寄存器的值沒問題,Guest OS就可以正常執(zhí)行。
Guest OS作為一個用戶進程,實際上運行在CPU的ring3模式(最低權限),但VMM讓它以為自己運行在CPU的ring0模式(特權模式)。如果Guest OS訪問ring3模式的寄存器,VMM是不會管的。但如果Guest OS試圖訪問一些ring3模式的寄存器,VMM就直接修改虛擬寄存器的值,讓Guest OS認為自己真的操作了這些特權模式下才能訪問的寄存器。
虛擬內(nèi)存:VMM實現(xiàn)了從虛擬內(nèi)存到虛擬機物理內(nèi)存再到物理內(nèi)存的 三級地址轉(zhuǎn)換,解決了Guest OS訪問內(nèi)存的問題,在Guest OS看來,地址還是從虛擬內(nèi)存映射到物理內(nèi)存。
虛擬I/O:如果VMM發(fā)現(xiàn)Guest OS要對某個I/O設備進行操作,那么就用軟件模擬這個過程,比如要對磁盤進行讀寫,VMM就把這個操作改成對文件的讀寫。
總的來說,Guest OS的運行在VMM的嚴密監(jiān)控下,在權限允許的范圍內(nèi),Guest OS干啥都行,但如果超出了權限,VMM就要干預。
虛擬化技術與云計算
目前比較常用的虛擬機技術有VMWare,Xen,KVM,雖然虛擬化的思路差不多,但具體所使用的虛擬化技術還是有所區(qū)別的。
VMWare是商用軟件,需要付費,且不開源。Xen和KVM都是開源的。不過Xen的操作復雜,維護成本較高,Linux官方內(nèi)核已經(jīng)去掉了對Xen的支持。KVM是Linux Kernel的一部分,因此會隨著Linux內(nèi)核的升級而不斷優(yōu)化和改進。在云計算領域目前用的虛擬機技術最多的也是KVM。
云計算管理軟件通過libvirt接口管理虛擬機
目前比較流行的云計算管理軟件是Openstack,支持各種虛擬機技術。libvirt是一套免費、開源的支持Linux下主流虛擬化工具的C函數(shù)庫。libvirt 起初是專門為 Xen 設計的一種管理 API,后來被擴展為可支持多個虛擬機監(jiān)控程序。云計算管理軟件通過libvirt接口就可以控制各種虛擬化技術創(chuàng)建的虛擬機了。