1. 程式人生 > >虛擬化技術中,不同層級結構間的虛擬化運用

虛擬化技術中,不同層級結構間的虛擬化運用

ava cto 運用 時間 部署 共存 hyper 容器 適應

容器技術和虛擬機將會處於一個長期共存的狀態。容器技術的技術出發點雖然更加輕量級,部署運行快速,但其共用了底層的kernel,因此與虛擬機方式在資源隔離性方面有先天的劣勢,將暫時無法取代虛擬機模式。雖然每一個虛擬機都是一個完整的操作系統,卻因為需要給其分配物理資源,當虛擬機數量增多時,操作系統本身消耗的資源勢必增多。

所以容器可以和虛擬機結合在一起使用,而且這也是目前主流的做法:

虛擬化技術出現以後,虛擬化技術會在本地操作系統之上加多一層 Hypervisor層,Hypervisor是一種運行在物理服務器和操作系統之間的中間軟件層,可以虛擬化硬件資源,例如cpu、硬盤、內存資源等。然後我們可以基於通過虛擬化出來的資源之上安裝操作系統,這也就是所謂的虛擬機。

通過Hypervisor層,我們可以創建不同的虛擬機,並且可以限定每個虛擬機的物理資源,並且每個虛擬機都是分離、獨立的。例如A虛擬機給它使用2個cpu、8g內存、100g磁盤,B虛擬機給它使用4個cpu、16g內存、300g磁盤。。。等等,這樣就可以實現物理資源利用率的最大化。

如此一來:

一臺物理機就可以部署多個應用,每個應用都可以獨立運行在一個虛擬機裏。

虛擬化技術

有了上面的理念,就可以重新認識我們熟知的虛擬化技術:

虛擬機:存在於硬件層和操作系統層間的虛擬化技術。

虛擬機通過“偽造”一個硬件抽象接口,將一個操作系統以及操作系統層以上的層嫁接到硬件上,實現和真實物理機幾乎一樣的功能。

虛擬化技術的優點:

資源池——一個物理機的資源分配到了不同的虛擬機裏

很容易擴展——增加物理機或者虛擬機即可,因為虛擬機是可以復制的

很容易雲化——亞馬孫AWS,阿裏雲,谷歌雲等

即然虛擬化技術已經很強大了,為什麽還需要容器技術呢?這就涉及到虛擬化技術所帶來的局限性了:

每一個虛擬機都是一個完整的操作系統,所以需要給其分配物理資源,當虛擬機數量增多時,操作系統本身消耗的資源勢必增多

容器:存在於操作系統層和函數庫層之間的虛擬化技術。

容器通過“偽造”操作系統的接口,將API抽象層,函數庫層以上的功能置於操作系統上,以Docker為例,就是基於Linux操作系統的Namespace和CGroup功能實現的隔離容器,模擬操作系統的功能,因為它比虛擬機高了一層,也就需要少一層東西,所以容器占用資源少。

容器可以幫我們把開發環境及應用整個打包帶走,打包好的容器可以在任何的環境下運行,這樣就可以解決開發與運維環境不一致的問題了,所以:

容器解決了開發和運維之間的矛盾

在開發和運維之間搭建了一個橋梁,是實現devops的最佳解決方案

以上只是描述是容器解決了什麽問題,但是還沒有說明什麽是容器,不過其實簡單幾句話就可以說明容器了:

對軟件和其依賴環境的標準化打包

應用之間相互隔離

共享一個OS Kernel

可以運行在很多主流操作系統上

JVM:存在於函數庫層和應用程序之間的虛擬化技術。

Java虛擬機具有跨平臺特性,所謂跨平臺特性實際上就是虛擬化的功勞,我們Java語言是調用操作系統函數庫的,然而不同操作系統的函數庫互不相同,JVM就是建立一個虛擬化層,對下通過不同的版本適應不同的操作系統,對上提供統一的運行環境交給程序和開發者。通過虛擬化實現了如今蔚為壯觀的Java生態圈以及建立在JVM基礎上的其他語言,如Scala,Clojure,Kotlin等。

技術分享圖片

幾乎所有的計算機遵守著相同的層級結構:硬件層>>硬件抽象層>>操作系統層>>API抽象層>>函數庫層>>應用程序層

由此,我們可知虛擬化技術中,不管虛擬機,還是容器,還是JVM的跨平臺,只是計算機不同層級結構間的虛擬化運用。在未來很長的一段時間裏,它們會根據實際的應用場景,互相***,互相支持。

虛擬化技術中,不同層級結構間的虛擬化運用