架構師之路 -- 虛擬化技術與容器Docker

通常架構師們爲了提高系統及硬件資源的利用率引入了虛擬化技術。

虛擬化是一種資源管理技術,它可以把各種實體資源抽像後再分隔,從而打破實體結構的限制,最大程度的提高資源的利用率。
今天我們來聊一下傳統虛擬化技術和以Docker爲代表的容器技術。

虛擬化

虛擬化就是在一臺物理服務器上,運行多臺“虛擬服務器”。這種虛擬服務器,也叫虛擬機(VM,Virtual Machine)。

虛擬化出現的初衷主要是爲了減少物理服務器的數量,提高服務器資源利用率。利用虛擬化技術將物理服務器隔離成多個小的虛擬服務器並提供部署能力。

簡單來說,虛擬化可以爲我們的工作帶來以下幾種便利:

  • 減少物理服務器數量
  • 提高資源利用率
  • 可實現環境隔離
  • 可實現資源隔離
  • 虛擬機可實現分鐘級交付
  • 虛擬機的配件可動態擴容
  • 虛擬機的計算節點可動態遷移

虛擬化技術

我們主要使用Hypervisor,也叫做VMM(Virtual Machine Monitor,虛擬機監視器)來實現服務器的虛擬化,Hypervisor它不是一款具體的軟件,而是一類軟件的統稱。像VMware、KVM、Xen、Virtual Box,都屬於Hypervisor。

VMware大家應該很熟悉,就是VMware Workstation。學習Linux的話,很多人都是在windows系統下安裝WMware,然後創建Linux虛擬機。
image.png

Linux服務器一般是使用KVM作爲虛擬化工具,KVM (全稱是 Kernel-based Virtual Machine) 是 Linux 下 x86 硬件平臺上的全功能虛擬化解決方案,包含一個可加載的內核模塊 kvm.ko 提供和虛擬化核心架構和處理器規範模塊。
image.png

虛擬化平臺架構

虛擬化平臺主要有以下三種架構:

  • 本地存儲
    image.png
    物理機上運行虛擬機,虛擬機的盤在物理機的磁盤上
  • 集中存儲
    image.png
    運行虛擬機的物理機,虛擬機的磁盤在共享存儲中。在集中存儲架構中如果一臺host掛了,VM可以通過平臺的設置去另外一臺物理機上運行,這就實現了虛擬機的動態漂移。
  • 分佈式存儲
    image.png
    分佈式存儲架構中虛擬機的磁盤位於所有服務器上,這種架構也叫“計算存儲一體化”,虛擬機的磁盤會打散成很多塊塊,這些塊塊分佈於集羣內所有的機器上,這樣就實現了存儲能力的最大化。
    虛擬機的IO不再受限於單機的磁盤,而是利用到整個集羣裏磁盤的能力。削峯填谷、提高了虛擬機的IO能力,而且通過冗餘保障了數據的安全性。
    這種架構的缺點是嚴重依賴網絡穩定性,一旦網絡掛了,所有的虛擬機就會全掛。

虛擬化平臺的高可用機制

虛擬化平臺的高可用機制是指虛擬機所在的物理機掛了後可以將虛擬機快速切換到另外一臺物理機運行。
高可用的前提條件是物理機掛了,對於虛擬機內部的故障並沒有檢測機制,屬於不完整的高可用方案,主要是基於以下兩個目標:

  • 虛擬機計算節點動態遷移
  • 虛擬機磁盤動態遷移

虛擬化原則

虛擬機的出現是爲了使一些大的計算資源分割成許多小的資源然後靈活調配 ,遵循的是分而治之的原則,如果一個虛擬機申請了物理機超過一半的資源就違背了這個原則,那樣還不如直接使用物理機來的乾脆,所以我們在使用虛擬化的時候一般要遵循以下幾個原則:

  • 某一虛擬機所佔資源不超過宿主機的40%
  • 不承載磁盤IO密集型組件(數據庫,消息隊列,搜索引擎)
  • 以雙路2U服務器來說,整合比控制在1:4 – 1:10較爲理想
  • CPU可一定程度上超量分配,最多可以超分一倍左右
  • 內存一般不可超量分配

Docker容器

在使用虛擬化一段時間後,發現它存在一些問題:

  • 虛擬機的系統層會佔用比較多物理機的資源,需要更進一步提高服務器的資源利用率
  • 當需要遷移虛擬機服務程序時,需要遷移整個虛擬機,遷移流程複雜

爲了解決這些問題,我們就引入了 容器。 而大家常聽說的 Docker,就是創建容器的工具,是應用容器引擎。
容器也是虛擬化,但是屬於“輕量級”的虛擬化。它的目的和虛擬機一樣,都是爲了創造“隔離環境”。但是,它又和虛擬機有很大的不同——虛擬機是操作系統級別的資源隔離,而容器本質上是進程級的資源隔離。

image.png
虛擬化 vs 容器

虛擬化 VS 容器

相比於傳統的虛擬機,Docker的優勢很明顯,它啓動時間很快,是秒級,而且對資源的利用率很高(一臺主機可以同時運行幾千個Docker容器)。此外,它佔的空間很小,虛擬機一般要幾GB到幾十GB,而容器只需要MB級甚至KB級。

我們可以通過下面這張圖來看虛擬化與容器之間的性能、資源利用率差距,非常明顯

image.png

容器編排

利用Docker可以很方便的創建容器,但是當容器數量達到一定規模,就需要編排工具去管理,就是容器生命週期管理工具。

容器編排工具提供調度和管理集羣的技術,提供用於基於容器應用可擴展性的基本機制。這些工具使用容器服務,並編排他們以決定容器之間如何進行交互。

容器編排工具很多,有Docker Swarm,Kubernetes,Mesos,Rancher,下面用一張圖來對比下這些容器編排工具的特點及各自的優勢。

在這裏插入圖片描述

小結

今天主要對虛擬化技術及容器做了個簡單的梳理,虛擬化和容器初衷與目的都是爲了更好的提高資源利用率,至於兩者之間的不同大家要務必記住一點:虛擬機是操作系統級別的資源隔離,而容器本質上是進程級的資源隔離。

更多精彩內容請移步至:http://javadaily.cn
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章