虛擬化主要指的是特殊的技術(shù),通過隱藏特定計(jì)算平臺(tái)的實(shí)際物理特性,為用戶提供抽象的、統(tǒng)一的、模擬的計(jì)算環(huán)境(稱為虛擬機(jī))(IBM定義)。虛擬化為有效利用大型機(jī)的資源提供了技術(shù)支持。虛擬機(jī)技術(shù)也是多種多樣,而可以虛擬的層次或者可虛擬的方面也是遍布從硬件到應(yīng)用層整個(gè)計(jì)算機(jī)系統(tǒng)。
虛擬化主要指的是特殊的技術(shù),通過隱藏特定計(jì)算平臺(tái)的實(shí)際物理特性,為用戶提供抽象的、統(tǒng)一的、模擬的計(jì)算環(huán)境(稱為虛擬機(jī))(IBM定義)。虛擬化為有效利用大型機(jī)的資源提供了技術(shù)支持。虛擬機(jī)技術(shù)也是多種多樣,而可以虛擬的層次或者可虛擬的方面也是遍布從硬件到應(yīng)用層整個(gè)計(jì)算機(jī)系統(tǒng)。
因此應(yīng)該注意到虛擬化和虛擬機(jī)指的并不是同一個(gè)概念,虛擬化是一個(gè)為了簡化管理,優(yōu)化資源的解決方案,而虛擬機(jī)簡單的可以認(rèn)為使這個(gè)解決方案的具體實(shí)現(xiàn)。
虛擬化分類
虛擬化可以分為對硬件的虛擬和對操作系統(tǒng)或者對軟件的虛擬。
硬件層面的虛擬化
從這個(gè)層面來講,有三種不同的技術(shù):
Full Virtualization(全虛擬化),幾乎是完整地模擬一套真實(shí)的硬件設(shè)備。大部分操作系統(tǒng)無須進(jìn)行任何修改即可直接運(yùn)行在全虛擬化環(huán)境中。像kvm等技術(shù)是全虛擬化。
Partial Virtualization(部分虛擬化),僅僅提供了對關(guān)鍵性計(jì)算組件或者指令集的模擬。操作系統(tǒng)可能需要做某些修改才能夠運(yùn)行在部分虛擬化環(huán)境中。
Paravirtualization(半虛擬化),不對硬件設(shè)備進(jìn)行模擬,虛擬機(jī)擁有獨(dú)立的運(yùn)行環(huán)境,通過虛擬機(jī)管理程序共享底層的硬件資源。大部分操作系統(tǒng)需要進(jìn)行修改才能夠運(yùn)行在半虛擬化環(huán)境中。它的性能要稍微高于全虛擬化。像Xen。因?yàn)樾枰膭?dòng)托管系統(tǒng)的內(nèi)核,所以xen是不支持win虛擬機(jī)的。
另外還有像硬件輔助虛擬化,就是宿
主機(jī)的硬件架構(gòu)在一定程度上提供對虛擬化的支持。像Intel-VT(Intel Virtualization Technology)與AMD-V(AMD Virtualization)都提供了這等架構(gòu)支持。
軟件層面的虛擬化
往往是指在同一個(gè)操作系統(tǒng)實(shí)例的基礎(chǔ)上提供多個(gè)隔離的虛擬運(yùn)行環(huán)境,也常常被稱為
容器技術(shù)。LXC(Linux Container)采用了這種技術(shù),它主要是采用了linux本身提供的技術(shù),在一定程度上模擬虛擬化。
軟件虛擬化也可以理解成進(jìn)程級虛擬機(jī),其他虛擬化成為系統(tǒng)級虛擬機(jī)。在進(jìn)程級虛擬機(jī)中負(fù)責(zé)虛擬化的軟件成為運(yùn)行時(shí)軟件,而系統(tǒng)級虛擬機(jī)中負(fù)責(zé)虛擬化的軟件成為VMM(Virtual Machine Monitor )
不同虛擬化的優(yōu)缺點(diǎn)對比
對于硬件與軟件虛擬化兩種技術(shù),都是存在優(yōu)點(diǎn)和缺點(diǎn)。
對于硬件虛擬化,我們討論全虛擬化和部分虛擬化
因?yàn)楝F(xiàn)在大部分的虛擬化技術(shù)Xen、kvm都支持這兩種。硬件虛擬化基本上就是在一臺(tái)宿主機(jī)上虛擬了整個(gè)系統(tǒng),各臺(tái)虛擬機(jī)之間相互不可見。這會(huì)很明顯導(dǎo)致很多重復(fù)的線程和重復(fù)的內(nèi)存頁出現(xiàn),性能上肯定會(huì)有影響。所以采用這種技術(shù),一臺(tái)宿主機(jī)上虛擬機(jī)的個(gè)數(shù)肯定會(huì)有一定限制。
對于軟件虛擬化,我們討論LXC
LXC( Linux Containers)是一種基于容器的、操作系統(tǒng)層級(內(nèi)核)的、輕量級的虛擬化技術(shù)。LXC 可以在操作系統(tǒng)層次上提供虛擬環(huán)境(即容器)以隔離進(jìn)程和資源,每個(gè)虛擬環(huán)境擁有自己的進(jìn)程和獨(dú)立的網(wǎng)絡(luò)
空間。還可以為容器綁定特定的 CPU 和 Memory 節(jié)點(diǎn),分配特定比例的 CPU 時(shí)間、IO 時(shí)間,限制可以使用的內(nèi)存大小(包括內(nèi)存和 SWAP 空間),提供 Device 訪問控制,提供獨(dú)立的 namespace(網(wǎng)絡(luò)、pid、ipc、mnt、uts)。
是通過cgroup對線程進(jìn)行隔離,對資源進(jìn)行限制;通過Namespace對調(diào)用系統(tǒng)提供的系統(tǒng)調(diào)用來進(jìn)行資源隔離。LXC介紹。通過此也可以看出,它所有虛擬化出來的虛擬機(jī)都是運(yùn)行在宿主機(jī)本身上的,它的線程和資源對宿主機(jī)都是可見的。這就不存在很多重復(fù)的線程和內(nèi)存也的問題,所以一臺(tái)宿主機(jī)上可以通過此技術(shù)虛擬出更多的虛擬機(jī)。
最近非常流行的Docker也是軟件虛擬化的一種,它的原理也是使用了linux提供的namespace對資源進(jìn)行隔離,不過它提供了比LXC更強(qiáng)大的功能實(shí)現(xiàn)。