虛擬化,看這篇文章就夠了
一、什么是虛擬化?
虛擬化,是指通過虛擬化技術將一臺計算機虛擬為多臺邏輯計算機。在一臺計算機上同時運行多個邏輯計算機,每個邏輯計算機可運行不同的操作系統,并且應用程序都可以在相互獨立的空間內運行而互不影響,從而顯著提高計算機的工作效率。
虛擬化使用軟件的方法重新定義劃分IT資源,可以實現IT資源的動態分配、靈活調度、跨域共享,提高IT資源利用率,使IT資源能夠真正成為社會基礎設施,服務于各行各業中靈活多變的應用需求。
二、Hypervisor是什么?
Hypervisor一種運行在基礎物理服務器和操作系統之間的中間軟件層,可允許多個操作系統和應用共享硬件。也可叫做VMM( virtual machine monitor ),即虛擬機監視器。
Hypervisor是一種在虛擬環境中的“元”操作系統。他們可以訪問服務器上包括磁盤和內存在內的所有物理設備。Hypervisor不但協調著這些硬件資源的訪問,也同時在各個虛擬機之間施加防護。當服務器啟動并執行Hypervisor時,它會加載所有虛擬機客戶端的操作系統同時會分配給每一臺虛擬機適量的內存,CPU,網絡和磁盤。
三、虛擬化有哪些分類?
1. 完全虛擬化
***的虛擬化方法,使用Hypervisor這種中間層軟件,在虛擬服務器和底層硬件之間建立一個抽象層。
Hypervisor可以捕獲CPU指令,為指令訪問硬件控制器和外設充當中介。因而,完全虛擬化技術幾乎能讓任何一款操作系統不用改動就能安裝到虛擬服務器上,而它們不知道自己運行在虛擬化環境下。主要缺點是,性能方面不如裸機,因為Hypervisor需要占用一些資源,給處理器帶來開銷。
在完全虛擬化的環境下,Hypervisor運行在裸硬件上,充當主機操作系統,而由Hypervisor管理的虛擬服務器運行客戶端操作系統(Guest OS)。
2. 準虛擬化
完全虛擬化是處理器密集型技術,因為它要求Hypervisor管理各個虛擬服務器,并讓它們彼此獨立。減輕這種負擔的一種方法就是,改動客戶操作系統,讓它以為自己運行在虛擬環境下,能夠與Hypervisor協同工作,這種方法就叫準虛擬化。
準虛擬化技術的優點是性能高。經過準虛擬化處理的服務器可與Hypervisor協同工作,其響應能力幾乎不亞于未經過虛擬化處理的服務器。它的客戶操作系統(Guest OS)集成了虛擬化方面的代碼。該方法無需重新編譯或引起陷阱,因為操作系統自身能夠與虛擬進程進行很好的協作。
3. 操作系統層虛擬化
實現虛擬化還有一個方法,那就是在操作系統層面增添虛擬服務器功能。就操作系統層的虛擬化而言,沒有獨立的Hypervisor層。相反主機操作系統本身就負責在多個虛擬服務器之間分配硬件資源,并且讓這些服務器彼此獨立。一個明顯的區別是,如果使用操作系統層虛擬化,所有虛擬服務器必須運行同一操作系統。
雖然操作系統層虛擬化的靈活性比較差,但本機速度性能比較高。此外,由于架構在所有虛擬服務器上使用單一、標準的操作系統,管理起來比異構環境要容易。
4. 桌面虛擬
服務器虛擬化主要針對服務器而言,而虛擬化最接近用戶的還是要算的上桌面虛擬化了,桌面虛擬化主要功能是將分散的桌面環境集中保存并管理起來,包括桌面環境的集中下發,集中更新,集中管理。桌面虛擬化使得桌面管理變得簡單,不用每臺終端單獨進行維護,每臺終端進行更新。終端數據可以集中存儲在中心機房里,安全性相對傳統桌面應用要高很多。桌面虛擬化可以使得一個人擁有多個桌面環境,也可以把一個桌面環境供多人使用,節省了license。另外,桌面虛擬化依托于服務器虛擬化。沒有服務器虛擬化,這個桌面虛擬化的優勢將完全沒有了。不僅如此,還浪費了許多管理資本。
5. 硬件虛擬化
英特爾虛擬化技術(IVT,Intel Virtualization Technology)是由英特爾開發的一種虛擬化技術,利用IVT可以對在系統上的客操作系統,通過虛擬機查看器(VMM,Virtual Machine Monitor)來虛擬一套硬件設備,以供客操作系統使用。這些技術以往在VMware與Virtual PC上都通過軟件實現,而通過IVT的硬件支持可以加速此類軟件的進行。
AMD虛擬化(AMD Virtualization),縮寫為“AMD-V”,是AMD為64位的x86架構提供的虛擬化擴展的名稱,但有時仍然會用“Pacifica”(AMD開發這項擴展時的內部項目代碼)來指代它。
四、有哪些虛擬化技術?
虛擬化技術指的是軟件層面的實現虛擬化的技術,整體上分為開源虛擬化和商業虛擬化兩大陣營。典型的代表有:Xen,KVM,WMware,Hyper-V、Docker容器等。
Xen和KVM,是開源免費的虛擬化軟件;WMware是付費的虛擬化軟件;Hyper-V微軟的收費虛擬化技術;Docker是一種容器技術,屬于一種輕量級虛擬化技術。
虛擬化軟件產品有很多,無論是開源還是商業的,上面只是列舉了很少的幾款,每款軟件產品有其優缺點以及應用場景,需要根據業務場景選擇,下面簡單介紹一下KVM和Xen。
1. KVM(Kernel-based Virtual Machine)基于內核的虛擬
KVM是集成到Linux內核的Hypervisor,是X86架構且硬件支持虛擬化技術(Intel VT或AMD-V)的Linux的全虛擬化解決方案。它是Linux的一個很小的模塊,利用Linux做大量的事,如任務調度、內存管理與硬件設備交互等。
2. Xen
Xen是***類運行在裸機上的虛擬化管理程序(Hypervisor)。它支持全虛擬化和準虛擬化,Xen支持hypervisor和虛擬機互相通訊,而且提供在所有Linux版本上的免費產品,包括Red Hat Enterprise Linux和SUSE Linux Enterprise Server。
Xen最重要的優勢在于準虛擬化,此外未經修改的操作系統也可以直接在Xen上運行(如Windows),能讓虛擬機有效運行而不需要仿真,因此虛擬機能感知到Hypervisor,而不需要模擬虛擬硬件,從而能實現高性能。
五、還是不明白嗎?
講了那么多,你可能有點暈,因為概念比較接近,容易混淆。下面重點解釋一下幾個關鍵概念。
1. 虛擬化類型
虛擬化類型,比如完全虛擬化、準虛擬化等指的是設計層面的實現虛擬化的方案和思想,而不涉及具體的虛擬化技術。
2. 虛擬化技術
虛擬化技術指的是軟件層面的實現虛擬化的技術,整體上分為開源虛擬化和商業虛擬化兩大陣營。部分商業虛擬化的技術也是在開源技術的基礎之上發展而來的。
3. 虛擬機軟件
基于虛擬化技術的單機版虛擬機管理軟件,如:
- KVM: Linux的虛擬機基于KVM虛擬技術的單機版虛擬機管理軟件。
- VirtualBox:oracle公司的直接基于Intel VT及AMD-V的虛擬機管理軟件。
- VMware Workstation:Wmware公司的基于Wmware虛擬技術的虛擬機管理軟件。
4. 云計算
云計算中的虛擬化指的是IaaS層虛擬化解決方案,而不是虛擬機技術。IaaS層虛擬化解決方案,要符合IaaS層的基礎特點,除了最基礎的虛擬化軟件之外,還包括,共享存儲服務,鏡像服務,身份認證服務,統一監控服務,以及收費管理等其他配套的服務。當然,既然是IaaS服務,必須支持對外API接口開放,支持定制開發。一般來說不是一個軟件,而是一組軟件組成的整理解決方案。
VMware vSphere是基于VMware虛擬化技術的虛擬化管理軟件,目前在行業內來說算是最成熟,生產環境應用度最廣的IaaS層虛擬化技術的解決方案。目前對整個集群的虛擬機監控管理也是***的。(vSphere本身收費,而且監控軟件還需要單獨收費)。
Openstack是基于linux的IaaS層解決方案(支持多種虛擬化技術,比如KVM),是目前用戶最多,影響***的開源解決方案,得到了HP,IBM等知名廠商的大力支持,國內的虛擬化解決方案也大部分是基于Openstack開發定制。主要運行在cent os和ubuntu server操作系統上。
CloudStack是使用 java開發的基于linux的IaaS層解決方案(支持多種虛擬化技術,比如KVM),目前發展潛力非常不錯,也得到了很多知名廠商的認可,不過相對起步比較晚,在國內的推廣度也不如Openstack。
對比一下Openstack與VMware Workstation,我們可以看出云計算與虛擬機軟件之間的不同。
5. Docker等Container技術
Q1:Container技術和服務器虛擬化是一樣的技術嗎?
A:不是。兩者雖然都屬于虛擬化的技術,目標都是為了將一套應用程序所需的執行環境打包起來,建立一個孤立環境,方便在不同的硬件中移動,但兩者的運作思維截然不同。簡單來說,常見的傳統虛擬化技術如vSphere或Hyper-V是以操作系統為中心,而Container技術則是一種以應用程序為中心的虛擬化技術。
傳統虛擬化技術從操作系統層下手,目標是建立一個可以用來執行整套操作系統的沙盒獨立執行環境,習慣以虛擬機(Virtual Machine)來稱呼。而Container技術則是直接將一個應用程序所需的相關程序代碼、函式庫、環境配置文件都打包起來建立沙盒執行環境,為了和傳統虛擬化技術產生的虛擬機區分,Container技術產生的環境就稱為Container。
Q2:一般常見的虛擬機和Container有何不同?
A:最明顯的差別是,虛擬機需要安裝操作系統(安裝Guest OS)才能執行應用程序,而Container內不需要安裝操作系統就能執行應用程序。Container技術不是在OS外來建立虛擬環境,而是在OS內的核心系統層來打造虛擬執行環境,透過共享Host OS的作法,取代一個一個Guest OS的功用。Container也因此被稱為是OS層的虛擬化技術。
Q3:為何Container是輕量級虛擬化技術?
A:因為Container技術采取共享Host OS的作法,而不需在每一個Container內執行Guest OS,因此建立Container不需要等待操作系統開機時間,不用1分鐘或幾秒鐘就可以啟用,遠比需要數分鐘甚至數十分鐘才能開啟的傳統虛擬機來的快。
Q4:Container技術是全新的技術嗎?
A:不是,早在1982年,Unix系統內建的chroot機制也是一種Container技術。其他如1998年的FreeBSD jails、2005年出現的Solaris Zones和OpenVZ,或像是Windows系統2004年就有的Sandboxie機制都屬于在操作系統內建立孤立虛擬執行環境的作法,都可稱為是Container的技術。
直到2013年,dotCloud這家PaaS服務公司開源釋出了一套將Container標準化的平臺Docker,大受歡迎,所以,dotCloud決定以Docker為名成立新公司力推。
【本文為51CTO專欄作者“朱國立”的原創稿件,轉載請通過作者微信公眾號“開發者圓桌”獲取聯系和授權】
































