雲計算的理念是使人們(目前主要是企業)可以像用電一樣使用計算資源。按照我的理解雲計算就是將大量的物理伺服器的cpu,磁碟,記憶體等硬體資源集中起來,將他們組成乙個大的邏輯概念上的資源池,即進行邏輯上抽象的「池化」,從外面看上去他就是乙個整體,需要注意的是這裡的"資源池"中最小的粒度不再是物理的伺服器,而是具體的資源。這也是為什麼叫「資源池」而不是「伺服器池」。乙個更直觀的理解就是將所有的伺服器的cpu抽出來組成乙個cpu的池,所有的記憶體抽出來組成乙個記憶體池,在這個邏輯抽象的資源池裡面不再有伺服器的單位存在,他們的資源已經被完全打散,例如資源池有1t的記憶體,和1000個cpu核,外部的使用者不會知道這些資源是由多少臺物理的伺服器提供的,即俗稱的雲。你不會知道也不會想知道這個雲裡的水蒸氣是從**來的。當我們需要計算資源(cpu,記憶體,磁碟,etc)時就從各個資源池裡取,且需要多少資源就取多少資源,例如我需要1000個cpu和1t的記憶體,那就從cpu的池子裡取1000個cpu,從記憶體的池子裡撈1t的記憶體;就好像我們用電用燃氣一樣簡單,我不要自己去維護乙個發電機。使用計算資源的使用者也不需要在自己的機房維護一台臺物理伺服器。更進一步,在這個資源池的上層可以通過提供乙個類似傳統作業系統的資源管理和排程工具對這些資源進行管理,誰需要資源就去向這個「作業系統」申請。眾所周知的私有雲領域的明星級軟體openstack就是這樣的乙個「雲作業系統」。顧名思義,作業系統的主要功能就是管理和監控各種硬體資源,如cpu,ram,網路,磁碟等等。而openstack之所以叫雲作業系統,是因為他與傳統的作業系統不一樣,它管理的不再是一台物理的伺服器或者pc機,而是乙個由眾多物理伺服器組成的分布式的大集群,也就是我們上面提到的那個邏輯概念上的資源池。
虛擬化技術即virtualization,wiki上的解釋是:in computing, virtualization refers to the act of creating a virtual (rather than actual) version of something, including virtual computer hardware platforms, storage devices, and computer network resources.
我的理解,虛擬化是實現雲計算的一種手段。上面提到,當我需要計算資源的時候我們向「雲作業系統」申請資源,那它分配給我的資源以什麼形式提供呢?最簡單的,我們假設它直接從資源池中眾多的物理機器中返回給我一台完整的物理伺服器的讓我使用,但是我們前面已經提到了,在資源池裡面已經沒有物理伺服器的概念了:對使用者來說,你已經無法區分哪個cpu來自於哪台伺服器!
那"雲作業系統"以什麼樣的形式提供資源?答案就是虛擬機器,因為我們已經將資源池化了,當使用者申請計算資源的時,如10個cpu,10g記憶體,10g磁碟,此時這個"雲作業系統"就會從cpu池子裡取10個cpu,從記憶體的池子裡取10g記憶體,從磁碟的池子裡取10g儲存空間,將他們封裝成乙個虛擬機器(其實就是乙個封裝了固定資源的虛擬的作業系統)提供給使用者使用,從使用者角度他得到這個虛擬機器之後完全可以把他當做一台配置是10cpu,10g記憶體,10g儲存的物理伺服器使用。而虛擬化就是實現虛擬機器的技術。與我們常用的pc機上虛擬化軟體如vmwear,virtual box等軟體不同的是,openstack是對多台物理伺服器組成的集群資源進行管理,並封裝成虛擬機器對外提供服務,而不是針對一台伺服器或pc機,將一台伺服器或pc機虛擬化成一台或者多台虛擬機器,每台虛擬機器封裝有一定的硬體資源(cpu記憶體以及磁碟)且各個虛擬間的資源是相互隔離的。從使用者的角度上看,乙個虛擬機器就是乙個完整的作業系統,對使用者而言完全可以把它當做一台物理伺服器去使用;對於在一台伺服器或者pc機上隔離出乙個或多個虛擬機器的情況,也無非就是在乙個作業系統上虛擬化出乙個或多個作業系統,從而實現對單台物理機器的資源隔離。此外,原始的那個作業系統我們通常稱為host os即宿主機或宿主作業系統,而在他上面虛擬化出來的乙個或多個作業系統我們稱為guest os或虛擬機器。如下圖:
對於不了解虛擬化技術的大多數人,尤其是it技術人員(小白級別的),乙個很直觀的感覺就是,要達到虛擬化的目的,在實現虛擬化的過程中就需要乙個中間的軟體層來完成虛擬化這件事,其實不然,虛擬機器某些方面效能差的主要原因並不在此,甚至在有些方面它可以達到和物理機一樣的效能。我們下面以cpu的虛擬化為例(聰明的你應該已經猜到了,作業系統無非就是管理各個硬體資源的,而虛擬機器也無非就是在乙個作業系統上虛擬另乙個作業系統,必然會涉及到各個硬體的虛擬化的細分,如cpu的虛擬化,記憶體的虛擬化等等)
為了更好的說明這點,所以在講cpu虛擬化技術之前,有必要先說下模擬(simulation)技術。
如上,模擬(simulation)主要的開銷來自於指令集的翻譯,因為它要在軟體上面模擬乙個基於ram的硬體cpu,正因為模擬器(安卓模擬器)需要在x86的pc機上模擬乙個arm的cpu出來,所以模擬的開銷是比較大的。直接導致效能會比較差。
了解了模擬之後我們在回到之前的問題:虛擬機器的開銷主要在**呢?但是虛擬化(virtualization)與模擬(simulation)完全不同,以cpu的虛擬化為例,無論是傳統的xen還是現在常用的kvm(後面的文章會詳細介紹兩種虛擬化技術)都沒有類似模擬(simulation)那樣的中間軟體層進行指令集翻譯這一步,因為虛擬機器的指令集與host os(宿主機)的指令集是一樣的,都是x86的指令集,所以他的開銷比模擬小的多。此外虛擬化(virtualization)與intel的vt-x,amd的amd-v等硬體輔助虛擬化技術結合起來可以讓虛機裡面的指令直接在host os的cpu上執行,所以他的效能開銷不是因為有了虛擬化層導致的能開銷,他的效能開銷主要是因為虛機的作業系統裡面的特權指令的嵌入和退出導致的效能損耗。
到這裡有不得不提下作業系統的一些相關的概念,無需深究了解即可:計算機cpu指令的執行分為4個特權集從ring0到ring3 ,通常情況下作業系統的核心是執行在ring0這個特權集,使用者的應用程式執行在3的特權集的,即0的特權集最高,3的特權集最低,但是0特權集是獨佔模式的,而因為是獨佔模式,如果宿主機的 kernel 占用了ring0,那麼虛機的 kernel 就只能在ring1執行,而在ring1執行就會導致一些問題,所以虛機化技術主要就是解決,你的ring0如果被宿主機佔了,虛機的 kernel 怎麼去的ring0的許可權。 虛擬化做的就是讓ring0這個特權集可以被宿主機和各個虛機所共享。即當他們要執行指令的時候需要進行特權集的切換,即從ring1陷入到ring0去之後執行相關的指令,執行完成後再進行特權集的退出,從ring0退出出來。而這個陷入和退出的動作是導致虛擬化效能損耗的主要原因,與cpu類似在外部裝置,記憶體,網路和io中也有類似的問題,不完全一樣但也有類似的問題會導致效能的損耗。所以當你的指令中沒有涉及到到特權指令集的運算的時候,同樣的指令在虛擬機器中執行和在物理機中執行效率是一樣的,不會帶來額外的開銷。
未完待續。。。。(謹以此系列文章緬懷逝去的學生時代)
虛擬化技術簡介
前言 openstack作為乙個開源的雲計算平台,利用底層虛擬化技術和底層儲存服務,提供了可擴充套件 靈活 適應性強的雲計算服務。虛擬化技術有很多,在開源領域主要是kvm和zen,然而openstack對kvm的支援明顯要好於zen。傳統伺服器架構與虛擬化伺服器架構 傳統伺服器架構 以一台物理伺服器...
VMware虛擬化技術簡介
vmware虛擬化軟體產品主要針對4類使用者而設計的。這些使用者是 入門的初級使用者,企業級桌面使用者,專業的軟體開發和技術人員,以及資料中心使用者 這些產品都是基於 硬體 的軟體產品。在x86架構計算機虛擬化市場裡,知名度頗高。vmware虛擬化技術產品一覽 1.初級使用者免費產品 vmware ...
VMware虛擬化技術簡介
vmware虛擬化軟體產品主要針對4類使用者而設計的。這些使用者是 入門的初級使用者,企業級桌面使用者,專業的軟體開發和技術人員,以及資料中心使用者 這些產品都是基於 硬體 的軟體產品。在x86架構計算機虛擬化市場裡,知名度頗高。vmware虛擬化技術產品一覽 1.初級使用者免費產品 vmware ...