虛擬化,你造嗎?

文章轉載自「開發者圓桌」一個關於開發者入門、進階、踩坑的微信公衆號java

wKioL1i5Ck7AkeuMAAChGHetiEM164.jpg


什麼是虛擬化?linux


虛擬化,是指經過虛擬化技術將一臺計算機虛擬爲多臺邏輯計算機。在一臺計算機上同時運行多個邏輯計算機,每一個邏輯計算機可運行不一樣的操做系統,而且應用程序均可以在相互獨立的空間內運行而互不影響,從而顯著提升計算機的工做效率。ubuntu


虛擬化使用軟件的方法從新定義劃分IT資源,能夠實現IT資源的動態分配、靈活調度、跨域共享,提升IT資源利用率,使IT資源可以真正成爲社會基礎設施,服務於各行各業中靈活多變的應用需求。跨域


Hypervisor是什麼?安全


Hypervisor一種運行在基礎物理服務器和操做系統之間的中間軟件層,可容許多個操做系統和應用共享硬件。也可叫作VMM( virtual machine monitor ),即虛擬機監視器。服務器


Hypervisor是一種在虛擬環境中的「元」操做系統。他們能夠訪問服務器上包括磁盤和內存在內的全部物理設備。Hypervisor不但協調着這些硬件資源的訪問,也同時在各個虛擬機之間施加防禦。當服務器啓動並執行Hypervisor時,它會加載全部虛擬機客戶端的操做系統同時會分配給每一臺虛擬機適量的內存,CPU,網絡和磁盤。微信


虛擬化有哪些分類?網絡


徹底虛擬化架構


最流行的虛擬化方法,使用Hypervisor這種中間層軟件,在虛擬服務器和底層硬件之間創建一個抽象層。oracle


Hypervisor能夠捕獲CPU指令,爲指令訪問硬件控制器和外設充當中介。於是,徹底虛擬化技術幾乎能讓任何一款操做系統不用改動就能安裝到虛擬服務器上,而它們不知道本身運行在虛擬化環境下。主要缺點是,性能方面不如裸機,由於Hypervisor須要佔用一些資源,給處理器帶來開銷。


在徹底虛擬化的環境下,Hypervisor運行在裸硬件上,充當主機操做系統,而由Hypervisor管理的虛擬服務器運行客戶端操做系統(Guest OS)。


wKioL1jc3gzi6iETAAARM418Qvc626.gif


準虛擬化


徹底虛擬化是處理器密集型技術,由於它要求Hypervisor管理各個虛擬服務器,並讓它們彼此獨立。減輕這種負擔的一種方法就是,改動客戶操做系統,讓它覺得本身運行在虛擬環境下,可以與Hypervisor協同工做,這種方法就叫準虛擬化。


準虛擬化技術的優勢是性能高。通過準虛擬化處理的服務器可與Hypervisor協同工做,其響應能力幾乎不亞於未通過虛擬化處理的服務器。它的客戶操做系統(Guest OS)集成了虛擬化方面的代碼。該方法無需從新編譯或引發陷阱,由於操做系統自身可以與虛擬進程進行很好的協做。

wKiom1jc3ifAVsDXAAATeFBBmOc958.gif


操做系統層虛擬化


實現虛擬化還有一個方法,那就是在操做系統層面增添虛擬服務器功能。就操做系統層的虛擬化而言,沒有獨立的Hypervisor層。相反主機操做系統自己就負責在多個虛擬服務器之間分配硬件資源,而且讓這些服務器彼此獨立。一個明顯的區別是,若是使用操做系統層虛擬化,全部虛擬服務器必須運行同一操做系統。


雖然操做系統層虛擬化的靈活性比較差,但本機速度性能比較高。此外,因爲架構在全部虛擬服務器上使用單1、標準的操做系統,管理起來比異構環境要容易。 


桌面虛擬


服務器虛擬化主要針對服務器而言,而虛擬化最接近用戶的仍是要算的上桌面虛擬化了,桌面虛擬化主要功能是將分散的桌面環境集中保存並管理起來,包括桌面環境的集中下發,集中更新,集中管理。桌面虛擬化使得桌面管理變得簡單,不用每臺終端單獨進行維護,每臺終端進行更新。終端數據能夠集中存儲在中心機房裏,安全性相對傳統桌面應用要高不少。桌面虛擬化可使得一我的擁有多個桌面環境,也能夠把一個桌面環境供多人使用,節省了license。另外,桌面虛擬化依託於服務器虛擬化。沒有服務器虛擬化,這個桌面虛擬化的優點將徹底沒有了。不只如此,還浪費了許多管理資本。


硬件虛擬化


英特爾虛擬化技術(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。


KVM(Kernel-based Virtual Machine)基於內核的虛擬


KVM是集成到Linux內核的Hypervisor,是X86架構且硬件支持虛擬化技術(Intel VT或AMD-V)的Linux的全虛擬化解決方案。它是Linux的一個很小的模塊,利用Linux作大量的事,如任務調度、內存管理與硬件設備交互等。

wKiom1jc3kGhGKaMAACNZmvaHS8970.jpg


Xen


Xen是第一類運行在裸機上的虛擬化管理程序(Hypervisor)。它支持全虛擬化和準虛擬化,Xen支持hypervisor和虛擬機互相通信,並且提供在全部Linux版本上的免費產品,包括Red Hat Enterprise Linux和SUSE Linux Enterprise Server。

Xen最重要的優點在於準虛擬化,此外未經修改的操做系統也能夠直接在Xen上運行(如Windows),能讓虛擬機有效運行而不須要仿真,所以虛擬機能感知到Hypervisor,而不須要模擬虛擬硬件,從而能實現高性能。

wKiom1jc3mSTyiXoAADuRDKjRt0659.jpg


仍是不明白嗎?


講了那麼多,你可能有點暈,由於概念比較接近,容易混淆。下面重點解釋一下幾個關鍵概念。


虛擬化類型


虛擬化類型,好比徹底虛擬化、準虛擬化等指的是設計層面的實現虛擬化的方案和思想,而不涉及具體的虛擬化技術。


虛擬化技術


虛擬化技術指的是軟件層面的實現虛擬化的技術,總體上分爲開源虛擬化和商業虛擬化兩大陣營。部分商業虛擬化的技術也是在開源技術的基礎之上發展而來的。


虛擬機軟件


基於虛擬化技術的單機版虛擬機管理軟件,如:


KVM: Linux的虛擬機基於KVM虛擬技術的單機版虛擬機管理軟件。


VirtualBox:oracle公司的直接基於Intel VT及AMD-V的虛擬機管理軟件。


VMware Workstation:Wmware公司的基於Wmware虛擬技術的虛擬機管理軟件。


雲計算


雲計算中的虛擬化指的是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,咱們能夠看出雲計算與虛擬機軟件之間的不一樣。

wKioL1jc3nXDf3lnAADB8ONlP1Y627.jpg


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爲名成立新公司力推。