在裸機與虛擬機上運行容器:性能和優點

根據最近的研究,Docker正在像野火一樣蔓延,特別是在企業中,它的採用率從2015年的13%上升到了27%以上;另有35%的公司計劃使用Docker。根據這些報告,容器採用的主要驅動因素是需要提高研發團隊的效率和速度,以及容器是微服務的基本組成部分。

有了這些巨大的好處,問容器是否要殺死虛擬機是很自然的。這個爭論引起了一個相對平凡的問題,為什麼不直接在裸機上運行容器呢?在這篇文章中,我們不會認為你需要轉向裸機。實際上,我們認為大型企業環境應該有虛擬化伺服器,裸機物理主機和容器的組合。

作為研究這篇文章的副產品,我們很高興與大家分享一些測試的結果,這些測試在裸機上運行容器化的工作負載時,與在虛擬機上運行容器化工作負載相比,性能顯著提高。我們也將討論這兩個選項的好處和機會。

Advertisements

容器的好處

容器為虛擬機(VM)提供了一個輕量級的替代方案。一個容器將你的應用程序從你運行的任何地方隔離開來。你只安裝你需要運行你的應用程序的東西,而不是更多。容器允許開發人員使用相同的開發環境和堆棧。您也可以直接在容器中開發,因為它可以為您提供獨立的網路堆棧和存儲,而無需構建和運行虛擬機。另外,容器有助於持續集成和交付過程,並鼓勵使用無狀態設計。

虛擬機也可以像容器一樣使用,但虛擬機有幾個顯著的缺點。最關鍵的是虛擬化有一個開銷,無論部署的guest虛擬機的操作系統(OS)有多精簡,在建立新的虛擬機時仍然需要完全複製該操作系統及其整個配置。容器運行自己的初始化進程,文件系統和網路堆棧,在虛擬機或裸機主機操作系統之上進行虛擬化。就其性質而言,容器使用的內存少於虛擬機。這是由於它們固有地共享OS內核,並且在大多數情況下它們也使用相同的相同的庫。

Advertisements

要了解容器和虛擬化帶來的好處和挑戰,請觀看本次網路研討會。

https://www.stratoscale.com/resources/webinar/webinar-virtualization-vs-containers/

虛擬化開銷

管理程序用於共享硬體基礎架構,允許多個租戶,孤立的虛擬機在同一台物理機器上運行。虛擬機模擬基於計算機體系結構的計算機系統,並提供物理計算機的功能。這可以提高底層物理機器的利用率。相比之下,裸機伺服器是單租戶,這意味著沒有資源共享,可用的CPU和RAM專用於您的進程。

例如,使用Hyper-V的報告開銷介於9-12%之間,這意味著Hyper-V下的客戶機操作系統通常從可用CPU的88-91%開始。當在Hyper-V下運行的操作系統被觀察到在主存儲器的大約340MB時,存儲器開銷。當然,在客戶操作系統上運行進程可能會因缺乏資源而受到影響,並且效率低於直接在主機(物理伺服器)操作系統上運行相同進程的效率。

考慮到這種虛擬化開銷,容器的工作方式及其好處提示我們檢查直接在主機上運行容器的選項。

我們來討論一下性能

我們運行的基準測試使用了Amazon EC2 m4.2xlarge實例,它具有32 GB的RAM和8vCPU。我們對CPU型號為Intel Core i7-3770,3.40GHz速度(和8個CPU核心),32 GB RAM和SSD磁碟的裸機使用相同規格。在我們的測試中,我們測量了文件系統和CPU操作的性能。

對於前兩種類型的測試,我們使用已經構建的容器來運行計算和文件系統寫入性能的簡單基準測試。一旦部署,我們使用以下命令:docker run -d -m 256m -name = container-benchmark-vm simple-container-benchmarks

如下所示,與在CPU和IO操作中在VM上運行相同的工作負載相比,裸機上運行的容器性能提高了25%-30%。從下面的結果示例中可以看出,VM上的複製操作速率大約為125MB / s,而大約為165MB / s。虛擬機上的數據處理速度幾乎是13MB / s,而裸機上的速度是19MB / s

----------

文件系統寫入性能

----------

1073741824位元組(1.1 GB)複製,8.65288 s,124 MB / s

1073741824位元組(1.1 GB)複製,8.44858 s,127 MB / s

1073741824位元組(1.1 GB)複製,8.32321 s,129 MB / s

1073741824位元組(1.1 GB)複製,8.48442 s,127 MB / s

1073741824位元組(1.1 GB)複製,8.47191 s,127 MB / s

1073741824位元組(1.1 GB)複製,8.43977 s,127 MB / s

1073741824位元組(1.1 GB)複製,8.48138 s,127 MB / s

1073741824位元組(1.1 GB)複製,8.45923 s,127 MB / s

1073741824位元組(1.1 GB)複製,8.47802 s,127 MB / s

1073741824位元組(1.1 GB)複製,8.54732秒,126 MB /秒

----------

CPU性能

----------

268435456位元組(268 MB)複製,21.0134秒,12.8 MB /秒

268435456位元組(268 MB)複製,20.9979秒,12.8 MB /秒

268435456位元組(268 MB)複製,20.9207 s,12.8 MB / s

268435456位元組(268 MB)複製,21.0908秒,12.7 MB /秒

268435456位元組(268 MB)複製,21.0547秒,12.7 MB /秒

268435456位元組(268 MB)複製,20.9105 s,12.8 MB / s

268435456位元組(268 MB)複製,20.8068秒,12.9 MB /秒

268435456位元組(268 MB)複製,20.8462秒,12.9 MB /秒

268435456位元組(268 MB)複製,20.9656秒,12.8 MB /秒

268435456位元組(268 MB)複製,20.8076秒,12.9 MB /秒

VM的基準測試結果

在裸機上運行相同的命令時,文件系統和CPU在相同數據量下的性能顯示如下:

----------

FS寫入性能

----------

1073741824位元組(1.1 GB)複製,6.63242 s,162 MB / s

1073741824位元組(1.1 GB)複製,6.55013 s,164 MB / s

1073741824位元組(1.1 GB)複製,6.6611 s,161 MB / s

1073741824位元組(1.1 GB)複製,6.42406秒,167 MB /秒

1073741824位元組(1.1 GB)複製,6.88436 s,156 MB / s

1073741824位元組(1.1 GB)複製,6.39726 s,168 MB / s

1073741824位元組(1.1 GB)複製,6.52477 s,165 MB / s

1073741824位元組(1.1 GB)複製,6.61627 s,162 MB / s

1073741824位元組(1.1 GB)複製,6.95134 s,154 MB / s

1073741824位元組(1.1 GB)複製,6.56434 s,164 MB / s

----------

文件系統性能

----------

268435456位元組(268 MB),13.789秒,19.5 MB /秒

268435456位元組(268 MB),14.1166秒,19.0 MB /秒

268435456位元組(268 MB),13.6356秒,19.7 MB /秒

268435456位元組(268 MB)複製,13.9786秒,19.2 MB /秒

268435456位元組(268 MB)複製,13.6349 s,19.7 MB / s

268435456位元組(268 MB)複製,14.397 s,18.6 MB / s

268435456位元組(268 MB),13.7385秒,19.5 MB /秒

268435456位元組(268 MB)複製,14.5623 s,18.4 MB / s

268435456位元組(268 MB)複製,14.6485 s,18.3 MB / s

268435456位元組(268 MB)複製,13.9463秒,19.2 MB /秒

裸機的基準測試結果

在另一份運行相同測試的基準測試報告中,與在虛擬機上運行Docker容器相比,在裸機上運行Docker容器的性能差異達到了7x-9x。

有關容器安排,協調和管理的問題? 在這裡發現12 Kubernetes的關鍵功能。

https://www.stratoscale.com/kubernetes/container-orchestration-kubernetes-12-key-features

在裸機上運行Kubernetes

另一個有趣的性能測試是由運行Kubernetes的CenturyLink完成集群創建,其中一個集群由裸機伺服器組成,另一個集群由虛擬機組成。 這個測試使用netperf-tester測量了這兩類群集的網路延遲。 您可以在下表中看到兩種情況的結果:

從上面的表格可以看出,在裸機上運行Kubernetes和容器,實現了顯著降低的延遲 - 比在虛擬機上運行Kubernetes低大約3倍。我們還可以看到,在幾種情況下,與裸機相比,在虛擬機上運行時,CPU利用率可能相當高。

看看這些結果,毫無疑問,如果你的系統是敏感的,例如,頁面載入時間或Web服務響應時間,在裸機上運行你的容器是值得考慮的。

需要直接訪問物理硬體的應用程序和工作負載(如企業資料庫和計算密集型應用程序)可以從裸機雲的性能中大大受益。上述結果非常重要,例如運行分析和BI流程時,這會轉化為更快的結果和更高的數據處理吞吐量。這也適用於機器學習(ML)演算法,當需要大量的數據來訓練ML模型時需要大量的計算。

容器監控是否重要? 在這裡找到。https://www.stratoscale.com/blog/containers/importance-container-monitoring

虛擬機與裸機

結果很有趣,但並不令人驚訝。儘管如此,使用裸機資源評估績效應該是管理工作的一部分,並且要考慮資源成本和利用方面的考慮。

除了上面提到的好處,虛擬機使用戶能夠使用訪客映像輕鬆地在主機之間移動工作負載(即容器),而裸機則更難以升級或移動。一個很好的例子就是回滾。使用裸機伺服器,回滾機器狀態是一項艱巨的任務。現代雲平台(如Amazon雲)支持的版本控制和回滾功能可以定期獲取VM的時間點快照,並在需要時輕鬆回滾到該快照。

另一個例子接受容器有限制,比如官方Docker安裝需要Windows 10 Pro,以及其他Windows Server版本,比如2012或者甚至2008,都不被支持。當您需要升級和配置操作系統時,這可能會使裸機伺服器很痛苦。

另一方面,單租戶裸機伺服器可以為受到合規措施限制的組織提供更好的選擇,這可能需要嚴格的數據安全和隱私控制。

最後的注意

在一天結束的時候,每個IT組織都應該能夠輕鬆地將資源與工作負載進行混合和匹配。但是說起來容易做起來難。企業應該尋找支持與容器并行運行虛擬機的雲解決方案,並且能夠創建混合雲環境,從而輕鬆彌合本地企業與使用虛擬化,可擴展的公共雲環境之間的差距。

Advertisements

你可能會喜歡