【容器技术】在裸机与虚拟机上运行容器:性能和优点

简介: 【容器技术】在裸机与虚拟机上运行容器:性能和优点

根据最近的研究,Docker正在像野火一样蔓延,特别是在企业中,它的采用率从2015年的13%上升到了65%以上;另有35%的公司计划使用Docker。根据这些报告,容器采用的主要驱动因素是需要提高研发团队的效率和速度,以及容器是微服务的基本组成部分。

有了这些巨大的好处,问容器是否要杀死虚拟机是很自然的。这个争论引起了一个相对平凡的问题,为什么不直接在裸机上运行容器呢?在这篇文章中,我们不会认为你需要转向裸机。实际上,我们认为大型企业环境应该有虚拟化服务器,裸机物理主机和容器的组合。

作为研究这篇文章的副产品,我们很高兴与大家分享一些测试的结果,这些测试在裸机上运行容器化的工作负载时,与在虚拟机上运行容器化工作负载相比,性能显着提高。我们也将讨论这两个选项的好处和机会。


容器的好处


容器为虚拟机(VM)提供了一个轻量级的替代方案。一个容器将你的应用程序从你运行的任何地方隔离开来。你只安装你需要运行你的应用程序的东西,而不是更多。容器允许开发人员使用相同的开发环境和堆栈。您也可以直接在容器中开发,因为它可以为您提供独立的网络堆栈和存储,而无需构建和运行虚拟机。另外,容器有助于持续集成和交付过程,并鼓励使用无状态设计。

虚拟机也可以像容器一样使用,但虚拟机有几个显着的缺点。最关键的是虚拟化有一个开销,无论部署的guest虚拟机的操作系统(OS)有多精简,在建立新的虚拟机时仍然需要完全复制该操作系统及其整个配置。容器运行自己的初始化进程,文件系统和网络堆栈,在虚拟机或裸机主机操作系统之上进行虚拟化。就其性质而言,容器使用的内存少于虚拟机。这是由于它们固有地共享OS内核,并且在大多数情况下它们也使用相同的相同的库。


要了解容器和虚拟化带来的好处和挑战,请观看本次网络研讨会。

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组织都应该能够轻松地将资源与工作负载进行混合和匹配。但是说起来容易做起来难。企业应该寻找支持与容器并行运行虚拟机的云解决方案,并且能够创建混合云环境,从而轻松弥合本地企业与使用虚拟化,可扩展的公共云环境之间的差距。


相关文章
|
20天前
|
Kubernetes Cloud Native 微服务
探索云原生技术:容器化与微服务架构的融合之旅
本文将带领读者深入了解云原生技术的核心概念,特别是容器化和微服务架构如何相辅相成,共同构建现代软件系统。我们将通过实际代码示例,探讨如何在云平台上部署和管理微服务,以及如何使用容器编排工具来自动化这一过程。文章旨在为开发者和技术决策者提供实用的指导,帮助他们在云原生时代中更好地设计、部署和维护应用。
|
3天前
|
Unix Linux Docker
CentOS停更沉寂,RHEL巨变限制源代:Docker容器化技术的兴起助力操作系统新格局
操作系统是计算机系统的核心软件,管理和控制硬件与软件资源,为用户和应用程序提供高效、安全的运行环境。Linux作为开源、跨平台的操作系统,具有高度可定制性、稳定性和安全性,广泛应用于服务器、云计算、物联网等领域。其发展得益于庞大的社区支持,多种发行版如Ubuntu、Debian、Fedora等满足不同需求。
16 4
|
25天前
|
存储 缓存 监控
Docker容器性能调优的关键技巧,涵盖CPU、内存、网络及磁盘I/O的优化策略,结合实战案例,旨在帮助读者有效提升Docker容器的性能与稳定性。
本文介绍了Docker容器性能调优的关键技巧,涵盖CPU、内存、网络及磁盘I/O的优化策略,结合实战案例,旨在帮助读者有效提升Docker容器的性能与稳定性。
65 7
|
25天前
|
开发框架 安全 开发者
Docker 是一种容器化技术,支持开发者将应用及其依赖打包成容器,在不同平台运行而无需修改。
Docker 是一种容器化技术,支持开发者将应用及其依赖打包成容器,在不同平台运行而无需修改。本文探讨了 Docker 在多平台应用构建与部署中的作用,包括环境一致性、依赖管理、快速构建等优势,以及部署流程和注意事项,展示了 Docker 如何简化开发与部署过程,提高效率和可移植性。
54 4
|
25天前
|
负载均衡 网络协议 算法
Docker容器环境中服务发现与负载均衡的技术与方法,涵盖环境变量、DNS、集中式服务发现系统等方式
本文探讨了Docker容器环境中服务发现与负载均衡的技术与方法,涵盖环境变量、DNS、集中式服务发现系统等方式,以及软件负载均衡器、云服务负载均衡、容器编排工具等实现手段,强调两者结合的重要性及面临挑战的应对措施。
58 3
|
27天前
|
运维 Kubernetes Docker
深入理解容器化技术:Docker与Kubernetes的协同工作
深入理解容器化技术:Docker与Kubernetes的协同工作
48 1
|
27天前
|
运维 Kubernetes Docker
深入理解容器化技术及其在微服务架构中的应用
深入理解容器化技术及其在微服务架构中的应用
57 1
|
28天前
|
安全 持续交付 Docker
深入理解并实践容器化技术——Docker 深度解析
深入理解并实践容器化技术——Docker 深度解析
54 2
|
29天前
|
持续交付 开发者 Docker
探索容器化技术Docker及其在现代软件开发中的应用
探索容器化技术Docker及其在现代软件开发中的应用
|
29天前
|
持续交付 开发者 Docker
探索容器化技术Docker及其在现代软件开发中的应用
探索容器化技术Docker及其在现代软件开发中的应用

热门文章

最新文章