借HTTP://www.aliyun.com/zixun/aggregation/9847.html">國慶長假的機會寫了這篇長文,全面地整理了個人從虛擬化到雲計算各個層面的看法。 主要的內容涉及虛擬化、虛擬化管理、資料中心虛擬化、雲計算、公有雲與私有雲、以及開放原始碼。 本文的全部內容均屬於作者的個人觀點,而不代表任何公司的觀點。 歡迎討論。
A、虛擬化
虛擬化是指在同一台物理機器上類比多台虛擬機器的能力。 每台虛擬機器在邏輯上擁有獨立的處理器、記憶體、硬碟和網路介面。 使用虛擬化技術能夠提高硬體資源的利用率,使得多個應用能夠運行在同一台物理機上各自擁有彼此隔離的運行環境。
虛擬化的也有不同的層次,例如硬體層面的虛擬化和軟體層面的虛擬化。 硬體虛擬化指的是通過類比硬體的方式獲得一個類似于真實電腦的環境,可以運行一個完整的作業系統。 在硬體虛擬化這個層面,又有Full Virtualization(全虛擬化,幾乎是完整地類比一套真實的11585.html">硬體設備。 大部分作業系統無須進行任何修改即可直接運行在全虛擬化環境中。 )、Partial Virtualization(部分虛擬化,僅僅提供了對關鍵性計算元件或者指令集的類比。 作業系統可能需要做某些修改才能夠運行在部分虛擬化環境中。 )和Paravirtualization(半虛擬化,不對硬體設備進行類比,虛擬機器擁有獨立的運行環境,通過虛擬機器管理程式共用底層的硬體資源。 大部分作業系統需要進行修改才能夠運行在辦虛擬化環境中。 )等不同的實現方式。 軟體層面的虛擬化,往往是指在同一個作業系統實例的基礎上提供多個隔離的虛擬運行環境,也常常被稱為容器技術。
在硬體虛擬化的層面,現代的虛擬化技術通常是全虛擬化和半虛擬化的混合體。 常見的虛擬化技術例如VMWare、Xen和KVM都同時提供了對全虛擬化和半虛擬化的支援。 以硬體虛擬化的方式所提供的虛擬機器,通常都在運行一個完整的作業系統,在同一台宿主機上存在大量相同或者相似的進程和記憶體頁,從而導致明顯的性能損耗。 目前,通過KSM等技術可以識別與合併含有相同內容的記憶體頁,但是還沒有對大量相同或者相似的進程進行優化處理的有效手段。 因此,硬體虛擬化也往往被稱為重量級虛擬化,在同一宿主機上能夠同時運行的虛擬機器數量是相當有限的。 在軟體虛擬化的層面,同一宿主機上的所有虛擬機器共用同一個作業系統實例,不存在由於運行多個作業系統實例所造成的性能損耗。 因此,軟體虛擬化也往往被稱為羽量級虛擬化,在同一宿主機上能夠同時運行的虛擬運行環境數量是比較寬鬆的。 以Solaris作業系統上的Container為例,一個Solaris作業系統的實例理論上可以支援多達8000個Container(實際能夠運行的Container數量取決於系統資源和負載)。 與此類似,Linux作業系統上的LXC可以輕鬆地在同一宿主機上同時支援數量可觀的虛擬運行環境。
在虛擬化這個領域,國內的公司對硬體虛擬化的興趣較大,在研發和生產環境中也大都採用硬體虛擬化技術。 淘寶是國內較早地研究並應用軟體虛擬化技術的,他們在淘寶主站的實踐經驗表明使用cgroup替代Xen能夠提升資源利用率。 至於在一個實際的應用場景中到底應該選擇硬體虛擬化還是軟體虛擬化,則應該重點考慮最終使用者是否需要對作業系統的完全控制權(例如升級內核版本)。 如果最終使用者僅僅需要對運行環境的控制權(例如PaaS層面的各種App Engine服務),軟體虛擬化可能性價比更高。 對於為同一應用提供橫向擴展能力的應用場景,軟體虛擬化也是比較好的選擇。
對於需要深入瞭解虛擬化技術的技術人員來說,VMWare發表的白皮書《 Understanding Full Virtualization, Paravirtualization, and Hardware Assist》 是一份很好的參考資料。
通常來講,能夠直接使用虛擬化技術的使用者數量是比較少的。 以Linux作業系統為例,能夠進行虛擬機器生命週期管理的使用者,一般就是具有訪問libvirt許可權的使用者。 在一個公司或者其他實體中,這些使用者通常是系統管理員。
(責任編輯:杜慶先)