[技術深度]雲伺服器IaaS的資源虛擬化
隨著雲伺服器技術和廠商的迅猛發展,越來越多的企業選擇將業務系統部署在雲伺服器上,通常他們會選擇成熟的廠商比如亞馬遜,阿里雲,騰訊雲等.談到雲伺服器,就避免不了涉及IaaS(Infratructureas a service)技術.
IaaS(Infrastructure as aService)基礎架構即服務,是雲計算的一種類型,它是PaaS(Platformas a Service平台即服務)和SaaS(softwareasaservice軟體即服務)的基礎。IaaS軟體通常用於管理大規模的物理硬體(IaaS可以管理小到一台物理主機,多到成千上萬的物理伺服器)並把客戶所需的軟硬體資源(CPU,內存,網路,存儲等)以「主機」的形式提供.
IaaS的根本就是將計算資源進行池化,這裡的計算單元包括但不限於cpu,內存,網路.這些資源被邏輯切割成更小的可管理單元,然後根據客戶需要被靈活的組裝成可運作的主機,很明顯這裡的主機並不是一台真的物理主機,而是虛擬機.這個虛擬機通常都會包含一個可以連上網路的操作系統,用戶可以通過網路連接上虛擬主機並且能靈活的進行資源配置以及按照配置及時間來付費.而用戶操作這台虛擬主機就像操作一台物理伺服器一樣,可以在上面安裝軟體,搭建資料庫以及應用伺服器,部署web應用.由於這些提供給用戶的功能都是最基礎的計算功能,所以這種服務形式也被稱作基礎架構及服務(IaaS)
上面我們提到IaaS的根本是將資源進行池化,這些資源我們把它分為三個大類:計算資源(CPU),存儲資源(內存和存儲),網路資源;下面我們詳細地分析這三類資源的池化,也可以稱為虛擬化.
CPU虛擬化
對於CPU來說,它具有極高的計算能力,可以在一秒鐘內可以運算上千萬條指令。另外,由於客戶的虛擬機往往運行的並不是計算密集型的應用程序(如瀏覽網頁,訪問資料庫,存儲文件等等),換句話說它的程序功能可以在很短時間(毫秒級別)內計算完成,當計算完成或等待其他網路、硬碟等IO操作時,如果沒有其他計算任務,CPU便會進入空閑(IDLE)狀態。經過統計,通常情況我們的CPU繁忙的時間很短,例如CPU有95%的時間都處於空閑狀態。如果我們讓CPU在等待的時候,也能給別人提供服務,便可以讓資源利用率最大化,所以CPU的虛擬化技術的本質就是以分時復用的方式,讓所有的虛擬機能夠共享CPU的計算能力。因為CPU運算的速度非常快,而且這種分時的單元非常的小,以至於用戶完全不會察覺到自己的虛擬機是在CPU上輪流運算的,所以在宏觀的世界裡,這些虛擬機看起來就是在同時工作的。當然IaaS軟體還需要通過一些手段保證每個虛擬機申請的CPU可以分到足夠的時間片
內存虛擬化
我們知道,物理內存在計算機上通常是一段以零地址開始以全部內存空間為截止地址的空間。例如4個8GB內存條組成的32GB內存,它在物理伺服器上看起來就是0~32GB的空間。CPU在訪問內存時的,只要提供內存地址,就可以訪問到地址內的數據。對於每個虛擬機來說,不論給它分配1G的內存,還是分配4GB的內存,它通常都認為自己的內存是從零開始的。但實際上,它們都會被映射到物理機上的不同地址段,有的可能是從2G開始的,有的可能是從4G開始的。而且不僅僅是內存的起始地址在物理機上不同,甚至虛擬機的內存在物理機內存上的分布也不是連續的。他們可能會被映射到不同的內存空間。虛擬機管理程序(Hypervisor)負責維護虛擬機內存在物理內存上的映射。當虛擬機訪問一段自己的內存空間時,會被映射到真實的物理地址。這種映射對虛擬機的操作系統來說是完全透明的。因為一台物理機上運行了多個虛擬機,所以虛擬機管理程序需要保證,不論在任何時候,來自虛擬機A的訪問內存請求不能到達虛擬機B的內存空間裡面。這就是所謂的資源隔離。
存儲虛擬化
IaaS虛擬存儲資源的方法和虛擬內存類似,主要也是通過把一個大的存儲空間劃分成多個小的存儲空間分配給虛擬機使用。但是與內存虛擬化不同,存儲虛擬化通常並不是直接發生在硬碟的定址層面,也就是不會在具體訪問硬碟驅動的時候才轉化訪問的地址。存儲虛擬化是以文件為單位來進行資源的存儲和隔離的。這個文件不是虛擬機里看到每個具體文件,而是在物理機上用於模擬虛擬機硬碟的一個超大文件,對硬碟地址的訪問就是對文件的某個偏移量的訪問。這點看似複雜,其實更容易理解。例如一個大小為20GB的獨立文件,可以被看成是一個20GB的硬碟空間,當需要訪問0地址的時候,也就是訪問文件的開頭,當需要訪問3G這個地址的時候,也就是訪問文件的3G偏移量的地方。使用這種靈活分配的方法,理論上可以讓一個2TB的物理硬碟,化身身成接近100個20GB或者接近20個100GB的硬碟。需要說明的是,看似一個完整的20GB文件,它在硬碟上可能並不是連續存放的,這完全取決於虛擬機管理程序的文件系統是如何分配硬碟空間的。當然虛擬機本身並不會意識到這點,具體訪問硬碟的時候,會由虛擬機管理程序的文件系統來保證訪問的準確性。
網路虛擬化
通常用戶通常熟悉的計算機網路概念包含,網卡、IP地址,主機名等等。例如在一台物理機上,可能有一個或幾個網卡,每個網卡在工作的時候會分配不同的IP地址,對外可能有一個或多個網路主機名。網路連接速度取決於網卡的能力以及網路接入(例如交換機)的能力。在網路上通過IP地址或者網路主機名可以連接不同的物理主機,所以在一個可以路由的網段內IP地址和主機名必須是唯一的。在每個網卡上,還有一個MAC地址,用來標識在相同網段上不同的網卡。用戶通常不會注意MAC地址,因為它並不需要用戶手動配置。那麼什麼是網路虛擬化呢?假如原本的物理機只有一個網卡,那麼它有一個MAC地址,並且可以分配一個IP地址,其他機器就可以通過IP地址訪問這個物理主機。當創建N個虛擬機後,每個虛擬機都需要有獨立的網路配置,以便他們可以像物理機一樣的處理各種網路連接。但是這個時候物理機上依然只有一個網卡,N個虛擬機通過這一個物理網卡都能進行順暢的網路連接的過程即為網路虛擬化。
虛擬機上的網路概念和物理機一樣。在一個物理機上創建多個虛擬機,就是要創建多份虛擬機的虛擬網卡,並且保證它們能夠正確的聯通到網路上。這是如何做到的呢?這主要是通過虛擬機管理程序在虛擬層面創建了一個虛擬的網橋(Bridge)。這個網橋就和我們我們看到的交換機一樣,上面有很多「介面」可以連接不同的虛擬網卡,當然物理機的真實網卡也需要連在這個網橋上,並且設置了一種特殊的混雜模式(可以允許不論該物理網卡是否為網路包的目的地址都能通過該網卡接收或者發送)。在同一個網橋上的不同虛擬機之間進行的網路通信,只會在本網橋內發生。只有當虛擬機的網路通信的對象不在本機(比如物聯網上的其他主機)上的時候,他們就會通過物理機的網卡向外進行傳輸。由於物理機的網卡帶寬能力是固定的,所以在一個網橋上的虛擬網卡也是分時共享相同的網路帶寬(如果網路包的交換之發生在本網橋內,速度不會受到物理網卡的影響)。雖然他們在自己傳輸的時間段內是獨佔全部帶寬(例如1Gbps),但是同時會導致其他虛擬網卡暫時無法傳輸數據,以至於在宏觀範圍(秒)來看,虛擬機是沒有辦法在共享網路的時候佔用全部帶寬的。如果假設有4個虛擬機都在進行大規模的網路操作(例如大文件的下載和上傳),那麼理論上他們的實際連接速度最多就只能達到250Mbps。由於網路速度對雲計算中虛擬機的能力非常重要,晶元公司也在不斷推出各種針對網路連接的硬體虛擬化解決方案(例如SR-IOV,VMDq等等)。
如果物理機去上只有一個物理網卡,那麼不同的虛擬機的網路都是通過同一個網卡連接出去,這是會導致網路安全問題的。例如一個虛擬機可以監聽整個網路上的所有數據包,並分析截獲感興趣的別的虛擬機的網路數據。為了解決這個問題,計算機網路提供了一種叫做VLan的技術。通過對網路編輯指定的VLan編號,一個物理網卡可以拓展多達4095個獨立連接能力。例如,如果原本的物理網卡為eth0,VLan1的網卡設備在操作系統就變成eth0.1,VLan1000的網卡設備就是eth0.1000,eth0.1和eth0.1000之間都無法看到對方的網路包。有了VLan的支持,在相同物理機上的虛擬機就可以分配不同的VLan編號的網路設備,從而進行了網路隔離。
有了資源的虛擬化,並且提供將虛擬化資源靈活管理的能力,IaaS廠商便可以採購成千上萬台物理伺服器,並且通過虛擬化技術將這些資源重新拆分,然後按需租賃給客戶使用.在IaaS的基礎上,PaaS和SaaS產品也如雨後春筍般出現,接下來的文章我們將對PaaS和SaaS技術做深入探討.
推薦閱讀:
※阿里雲專有宿主機(公測)發布
※為什麼說八爪魚雲採集才是真正的雲採集
※雲計算、大數據和物聯網三者之間有哪些區別和聯繫?
※巔峰之證!首位阿里雲ACE認證專家產生
※雲計算未來發展的6大趨勢分析
TAG:雲服務 |