大型網站技術學習-1. 虛擬化技術概述

牛人就不要看了~    html

1.1        引言


先舉個例子,一臺物理主機有16G內存,用戶A的程序只須要2G內存,用戶B的程序只須要4G內存,若是沒有用虛擬化技術,他們的解決方案以下:前端

  1. 兩用戶程序放到同一臺物理機器上,各自配置運行環境。資源都能知足了。問題是,程序的運行環境一個是Linux,一個是windows呢?如何防止用戶A的程序不會竊取用戶B數據呢?
  2. 再買一臺2G的物理主機,這樣就解決了上面兩個問題,呵呵。問題是,好浪費啊!若是再有個須要1G內存的用戶來了,就買個1G的物理主機?若是老闆有的是錢,沒問題~

有個更加省錢的方法:採用虛擬化的技術,在那臺物理主機上生成兩個操做系統出來,一個4G內存,一個2G內存,操做系統的類型任選,虛擬化可以提供資源隔離的功能。這樣就完美解決了上述的問題。對普通人來說,可能VMware虛擬計算機是最瞭解的吧。linux

1.2   虛擬化是什麼?

 

虛擬化是雲計算技術的基礎。web

百度百科上說:是指經過虛擬化技術將一臺計算機虛擬爲多臺邏輯計算機。虛擬化使用軟件的方法從新定義劃分IT資源,能夠實現IT資源的動態分配、靈活調度、跨域共享,提升IT資源利用率,使IT資源可以真正成爲社會基礎設施,服務於各行各業中靈活多變的應用需求。windows

 

維基百科上說:In computing, virtualization refers to the act of creating a virtual (rather than actual) version of something, including virtual computer hardware platforms, operating systems, storage devices, and computer network resources.後端

由於虛擬化本質不是對硬件的改變,而是用軟件的方法抽象,虛擬出的IT資源與底層硬件相隔離,因此虛擬化技術可以實現IT資源的自動化分配、調度、共享、遷移、監控。這種特性對於大型網站運維來講很是有用,誰不想啥事都是自動化的?人老是比較容易馬虎出錯。另外,有些業務是IO密集型,有些業務是計算密集型,需求各有不一樣,虛擬化可讓IT資源按需分配。虛擬IT資源與硬件無關,因此當須要更多的資源的時候,只須要增長一些物理計算機便可,小型機與普通機器能夠混合使用。跨域

服務器虛擬化主要有如下四方面的功能:安全

  lip_image001[4]

1.3     虛擬化的好處



lip_image002[4]

效率:將本來一臺服務器的資源分配給了數臺虛擬化的服務器,有效的利用了閒置資源,確保企業應用程序發揮出最高的可用性和性能。服務器

隔離:雖然虛擬機能夠共享一臺計算機的物理資源,但它們彼此之間仍然是徹底隔離的,就像它們是不一樣的物理計算機同樣。所以,在可用性和安全性方面,虛擬環境中運行的應用程序之因此遠優於在傳統的非虛擬化系統中運行的應用程序,隔離就是一個重要的緣由。網絡

可靠:虛擬服務器是獨立於硬件進行工做的,經過改進災難恢復解決方案提升了業務連續性,當一臺服務器出現故障時可在最短期內恢復且不影響整個集羣的運做,在整個數據中心實現高可用性。

成本:下降了部署成本,只須要更少的服務器就能夠實現須要更多服務器才能作到的事情,也間接下降了安全等其餘方面的成本。

兼容:全部的虛擬服務器都與正常的x86系統相兼容,他改進了桌面管理的方式,可部署多套不一樣的系統,將因兼容性形成問題的可能性降至最低。

便於管理:,提升了服務器/管理員比率,一個管理員能夠輕鬆的管理比之前更多的服務器而不會形成更大的負擔。

經過實現 IT 基礎架構的虛擬化,能夠下降 IT 成本,同時提升現有資產的效率、利用率和靈活性。在全世界,各類規模的公司都享受着服務器的虛擬化帶來的好處。數千家組織都在採用服務器虛擬化解決方案。

1.4   虛擬化程度分類


網上盜個圖

lip_image003[4]

1.4.1        全虛擬化(Full Virtulization


簡介:全虛擬化中,VMM以純軟件的形式翻譯執行虛擬機執行的指令,該過程不須要Guest OS感知,使客戶操做系統無需修改就能運行,速度會根據不一樣的實現而不一樣,但大體能知足用戶的需求。這種方式是業界現今最成熟和最多見的,並且屬於 Hosted 模式和 Hypervisor 模式的都有,知名的產品有VirtualBoxKVMVMware WorkstationVMware ESX(它在其4.0版,被更名爲VMware vSphere),Xen(也支持全虛擬化)

優勢:Guest OS無需修改,速度和功能都很是不錯,使用很是簡單。

缺點:基於Hosted模式的全虛擬產品性能方面不是特別優異,特別是I/O方面。

1.4.2        半虛擬化或者叫準虛擬化(Para-virtualization


它與徹底虛擬化有一些相似,它也利用Hypervisor來實現對底層硬件的共享訪問,可是因爲在Hypervisor 上面運行的Guest OS已經集成與半虛擬化有關的代碼,使得Guest OS可以很是好地配合Hypervisor來實現虛擬化。經過這種方法將無需從新編譯或捕獲特權指令,其最經典的產品就是Xen,並且由於微軟的Hyper-V所採用技術和Xen相似,因此也能夠把Hyper-V歸屬於半虛擬化。

這種虛擬技術以Xen爲表明,其特色是修改操做系統的內核,加入一個Xen Hypervisor層。它容許安裝在同一硬件設備上的多個系統能夠同時啓動,由Xen Hypervisor來進行資源調配。在這種虛擬環境下,依然須要模擬硬件設備,安裝Guest操做系統,而且還須要修改操做系統的內核。Xen相對於傳統的Virtual MachineMonitor,性能稍有提升,但並不十分顯著。爲了進一步提升性能,IntelAMD分別開發了VTPacifica虛擬技術,將虛擬指令加入到了 CPU中。使用了CPU支持的硬件虛擬技術,將再也不須要修改操做系統內核,而是由CPU指令集進行相應的轉換操做。

優勢:這種模式和全虛擬化相比,架構更精簡,並且在總體速度上有必定的優點。

缺點:須要對Guest OS進行修改,因此在用戶體驗方面比較麻煩。

在徹底虛擬化模式中,hypervisor必須模擬設備硬件,它是在會話的最低級別進行模擬的(例如:網絡驅動程序,磁盤,顯卡等等).儘管在該抽象中模擬很乾淨,但它同時也是最低效,最複雜的.在半虛擬化中,來賓操做系統和hypervisor可以共同合做,讓模擬更加高效.缺點是操做系統知道它被虛擬化,而且須要修改才能工做.

1.4.3        硬件輔助虛擬化(Hardware Assisted Virtualization

Intel/AMD等硬件廠商經過對部分全虛擬化和半虛擬化使用到的軟件技術進行硬件化(具體將在下文詳述)來提升性能。硬件輔助虛擬化技術經常使用於優化全虛擬化和半虛擬化產品,而不是首創一派,最出名的例子莫過於VMware Workstation,它雖然屬於全虛擬化,可是在它的6.0版本中引入了硬件輔助虛擬化技術,好比IntelVT-xAMDAMD-V。如今市面上的主流全虛擬化和半虛擬化產品都支持硬件輔助虛擬化,包括VirtualBoxKVMVMware ESXXen

優勢:經過引入硬件技術,將使虛擬化技術更接近物理機的速度。

1.4.4        操做系統級虛擬化(Operating System Level Virtualization

這種技術經過對服務器操做系統進行簡單地隔離來實現虛擬化,主要用於VPS,以SWsoftVirtuozzo/OpenVZSun基於Solaris平臺的Container技術爲表明,其中Virtuozzo是商業解決方案,而OpenVZ是以Virtuozzo爲基礎的開源項目。他們的特色是一個單一的節點運行着惟一的操做系統實例。經過在這個系統上加裝虛擬化平臺,能夠將系統劃分紅多個獨立隔離的容器,每一個容器是一個虛擬的操做系統,被稱爲虛擬環境(即VEVirtualEnvironment),也被稱爲虛擬專用服務器(即VPSVirtual Private Server)。以下圖所示:

 

ip_image004[3]

 

在操做系統虛擬化技術中,每一個節點上只有惟一的系統內核,不虛擬任何硬件設備。此外,多個虛擬環境以模板的方式共享一個文件系統,性能得以大幅度提高。在生產環境中,一臺服務器可根據環境須要,運行一個VE/VPS,或者運行上百個VE/VPS。因此,操做系統虛擬化技術是面向生產環境、商業運行環境的技術。

優勢:由於它是對操做系統進行直接的修改,因此實現成本低並且性能不錯。

缺點:在資源隔離方面表現不佳,並且對Guest OS的型號和版本有限定。

1.4.5        硬件分區技術

硬件分區技術以下圖所示:硬件資源被劃分紅數個分區,每一個分區享有獨立的CPU、內存,並安裝獨立的操做系統。在一臺服務器上,存在有多個系統實例,同時啓動了多個操做系統。這種分區方法的主要缺點是缺少很好的靈活性,不能對資源作出有效調配。隨着技術的進步,如今對於資源劃分的顆粒已經遠遠提高,例如在 IBM AIX系統上,對CPU資源的劃分顆粒能夠達到0.1CPU。這種分區方式,在目前的金融領域,好比在銀行信息中心獲得了普遍採用。

可是這種方式對互聯網來講,成本高,不易統一管理。

 

ip_image005[3]

1.4.6        容器虛擬化Docker

Docker技術主要利用了Linux下的LXC技術來實現的,LXC主要是利用Linux的內核特性:命名空間和cgroups子系統。LXC在資源管理方面依賴與Linux內核的cgroups子系統,cgroups子系統是Linux內核提供的一個基於進程組的資源管理的框架,能夠爲特定的進程組限定可使用的資源。LXC在隔離控制方面依賴於Linux內核的namespace特性,namespace感受像C++的namespace,就是在內核中能夠擁有不一樣namespace的相同的進程id,聯想下C++,C++裏面不一樣namespace下的名字能夠同樣。Docker相比與上面的那些虛擬化的主要區別在於Docker提供的是運行環境,上面的那些提供的是操做系統,因此Docker適用於Paas而上面的適合Iaas。效率上,Docker比操做系統虛擬化要快。部署上,Docker能夠快速部署。

1.5   Hypervisor位置

Hypervisor安裝在宿主操做系統上,Hypervisor安裝在宿主操做系統上,經過宿主操做系統使用硬件,如VirtualBoxVMWare Workstation等。在Host系統上,加裝了Virtual MachineMonitor,虛擬層做爲應用級別的軟件而存在,不涉及操做系統內核。虛擬層會給每一個虛擬機模擬一套獨立的硬件設備,包含CPU、內存、主板、顯卡、網卡等硬件資源,在其上安裝所謂的Guest操做系統。最終用戶的應用程序,運行在Guest操做系統中。以下圖所示。

 

ip_image006[3]

這種虛擬機運行的方式有必定的優勢,好比能在一個節點上安裝多個不一樣類型的操做系統;但缺點也很是明顯,虛擬硬件設備要消耗資源,大量代碼須要被翻譯執行,形成了性能的損耗,使其更合適用於實驗室等特殊環境。

 

安裝在硬件層上:Hypervisor直接管理硬件,如VMWare ESX、微軟、KVMXEN

lip_image007[4]

安裝在內核上:Hypervisor安裝在宿主操做系統內核上,客戶操做系統調用宿主操做系統內核。

lip_image008[4]

 

1.6   虛擬機架構

目前分爲兩種,寄居架構(Hosted Architecture裸金屬架構 (「Bare Metal」 Architecture),如圖所示。

寄居架構就是在操做系統之上安裝和運行虛擬化程序,依賴於主機操做系統對設備的支持和物理資源的管理;

裸金屬架構就是直接在硬件上面安裝虛擬化軟件,再在其上安裝操做系統和應用,依賴虛擬層內核和服務器控制檯進行管理。


 

優勢

缺點

舉例

寄居架構

簡單,便於實現

安裝和運行應用程序依賴於主機操做系統對設備的支持,性能有損耗。

GSX Server, VMware Server, Workstation,KVM(linux內核)

裸金屬架構

虛擬機不依賴於操做系統,能夠支持多種操做系統,多種應用,更加靈活

虛擬層內核開發難度較大

VMWare ESX Server,Xen,KVM

 

ip_image009[3]

                                    裸金屬架構

ip_image010[3]

                                     寄居架構

 

 

1.7   KVM

Kernel-based Virtual Machine的簡稱,是一個開源的系統虛擬化模塊,自Linux 2.6.20以後集成在Linux的各個主要發行版本中。它使用Linux自身的調度器進行管理,因此相對於Xen,其核心源碼不多。KVM目前已成爲的主流VMM之一。

虛擬化性能在不少方面能夠達到非虛擬化原聲環境的95%以上的性能。RHEL 6.X系統中的一個KVM支持160個虛擬核心和2T的內存,宿主機能夠支持4096個CPU核心和多大64T內存。

KVM主要有兩個組成部分:KVM模塊和QEMU。

Kvm僅僅是一個linux內核的模塊,當在linux中安裝了kvm後,linux會變成了hypervisor,即VMM,進行CPU和內存的虛擬管理,主要功能是初始化CPU硬件,打開虛擬化模式,而後將虛擬客戶機運行在虛擬機模式下,並對虛擬客戶機的運行提供必定的支持,爲了軟件的簡介和性能,KVM僅支持硬件虛擬化。

 

而運行在用戶空間的QEMU工具,實現虛擬機的建立管理,monitor管理各個IO設備。QEMu自己並非KVM的一部分,自身就是一個著名的虛擬機軟件,與KVM不一樣,QEMU是純軟件的實現,性能低下,QEMU的代碼中有整套的虛擬機實現,包括處理器虛擬化、內存虛擬化、設備虛擬化,KVM對QEMU進行了修改,QEMU會經過KVM系統調用進入內核,由KVM模塊負責將虛擬機置於處理器的特殊模式運行。從QEMU的角度看,QEMU使用了KVM模塊的虛擬化功能,爲本身提供硬件虛擬化的加速,極大的提升了虛擬機的性能。除此以外,一系列虛擬機的技術都是由QEMU本身實現的。

lip_image012[4]

1.8   XEN

XEN是一個開放的源代碼虛擬機軟件,有劍橋大學研發。Xen主要支持半虛擬化(Para-virtualization)和全虛擬化(Full-virtualization)。半虛擬化主要是透過修改 Linux 核心來達成的虛擬技術.

Xen 的半虛擬化技術主要是用在相同版本的 Linux 上面,也就是說,若是你想要使用半虛擬化的方式啓動多個虛擬機器, 那麼那些虛擬機器所有都必須是相同的系統,甚至要求相同版本與相同核心的 Linux distribution 。

若是你想要安裝不一樣版本的 Linux 或者是其餘的 OS (例如 Windows XP) 時,就得要使用全虛擬化技術了。 可是全虛擬化技術是有其限制的,當硬體知足下列需求之一時,全虛擬化技術纔可以動做:

    你的硬體支援 Intel 的 VT 技術 (Virtualization Technology, Intel-VT);

    你的硬體支援 AMD 的 SVM 技術 (Secure Virtual Machine, AMD-SVM or, AMD-V)。


既然我有多個虛擬機器,每一個虛擬機器都有本身的任務隊列, 也就是有多個任務隊列同時存在。若是全部的做業系統都可以完整的控制硬體的話, 那麼硬體到底該接受誰的指令來運做?那個系統的指令會先被執行?這是很重要的問題, 由於若是這邊搞不定,那麼只能呵呵呵了。

爲了解決這個問題,Xen用瞭如下架構。

ip_image014[3]

Xen架構分爲兩層,底層爲Xen Hypervisor,又稱虛擬機監控程序(Virtual Machien Monitor簡稱VMM),VMM工做原有linux系統內核位置,替代了linux系統內核,用於虛擬CPUMemeory等;高層爲Xen虛擬機,Xen的虛擬機稱爲Domain,爲了輔助Xen管理Domain, Xen存在一個特權Domain叫Dom0(Domain 0,Xend是其中的一個重要進程).他擁有真實的設備驅動,可以直接訪問物理硬件,能夠經過一些管理工具管理Xen的虛擬機們,他還能爲其餘Domain提供一些虛擬資源服務,特別是其餘Domain對I/O的訪問。普通Domain叫作DomU(Domain U). 半虛擬化中Domain的內核都通過了修改。

XEN虛擬化分類

(1)徹底虛擬化:DomU中的各個硬件都是由VMMDom0虛擬和模擬實現;
(2)半虛擬化: DomU中的CPUMemoryVMM模擬實現,IO等設備分爲前端(Front)和後端(Back),前端工做在DomU中,然後端工做在Dom0
中;
ip_image013[3]
DomU
中的網卡eth0Dom0中的viif#中的設備對應,再也不由Dom0模擬,這大大提高了IO性能

 

持續更新~

轉載註明出處:http://www.cnblogs.com/stonehat/p/5117217.html

相關文章
相關標籤/搜索