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

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
简介: 【容器技术】在裸机与虚拟机上运行容器:性能和优点

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


相关文章
|
2月前
|
移动开发 前端开发 HTML5
Twaver-HTML5基础学习(20)数据容器(3)_数据的批量加载(节省性能方法)
本文介绍了Twaver HTML5中数据的批量加载方法,通过使用`box.startBatch()`可以在大量数据加载时提高性能。文章通过示例代码展示了如何在React组件中使用批量加载功能,以减少界面重绘次数并提升效率。
56 2
Twaver-HTML5基础学习(20)数据容器(3)_数据的批量加载(节省性能方法)
|
3月前
|
Kubernetes Cloud Native Java
云原生之旅:从容器到微服务的演进之路Java 内存管理:垃圾收集器与性能调优
【8月更文挑战第30天】在数字化时代的浪潮中,企业如何乘风破浪?云原生技术提供了一个强有力的桨。本文将带你从容器技术的基石出发,探索微服务架构的奥秘,最终实现在云端自由翱翔的梦想。我们将一起见证代码如何转化为业务的翅膀,让你的应用在云海中高飞。
|
20天前
|
存储 数据安全/隐私保护 数据中心
Incus 6.4 容器和虚拟机管理器发布
【10月更文挑战第26天】
28 2
Incus 6.4 容器和虚拟机管理器发布
|
21天前
|
存储 持续交付 虚拟化
|
1月前
|
监控 应用服务中间件 nginx
详细解释容器以及虚拟机centos7.9容器化部署基础服务(容器化部署nginx)
容器是一种轻量级、可移植的软件打包和隔离技术,将应用程序及其依赖项打包,确保在任何环境中一致运行。容器共享主机操作系统内核,相比虚拟机更高效、轻量,具有快速启动和高资源利用率的特点。容器的关键技术包括命名空间(如 PID、NET 等)、控制组(cgroups)和联合文件系统(UnionFS)。使用容器可以提高开发和部署效率,简化管理,确保环境一致性。例如,在 CentOS 7.9 上部署 Nginx 时,可以通过 Docker 下载和运行 `nginx:1.20` 镜像,并通过端口映射使外部请求访问 Nginx 服务。此外,还可以将测试页面复制到容器中,进一步验证容器的功能。
|
3月前
|
存储 缓存 监控
在Linux中,如何优化虚拟机和容器的性能和资源使用?
在Linux中,如何优化虚拟机和容器的性能和资源使用?
|
9天前
|
Kubernetes Cloud Native Docker
云原生时代的容器化实践:Docker和Kubernetes入门
【10月更文挑战第37天】在数字化转型的浪潮中,云原生技术成为企业提升敏捷性和效率的关键。本篇文章将引导读者了解如何利用Docker进行容器化打包及部署,以及Kubernetes集群管理的基础操作,帮助初学者快速入门云原生的世界。通过实际案例分析,我们将深入探讨这些技术在现代IT架构中的应用与影响。
36 2
|
18天前
|
Kubernetes 监控 开发者
掌握容器化:Docker与Kubernetes的最佳实践
【10月更文挑战第26天】本文深入探讨了Docker和Kubernetes的最佳实践,涵盖Dockerfile优化、数据卷管理、网络配置、Pod设计、服务发现与负载均衡、声明式更新等内容。同时介绍了容器化现有应用、自动化部署、监控与日志等开发技巧,以及Docker Compose和Helm等实用工具。旨在帮助开发者提高开发效率和系统稳定性,构建现代、高效、可扩展的应用。
|
14天前
|
关系型数据库 MySQL API
|
7天前
|
缓存 监控 开发者
掌握Docker容器化技术:提升开发效率的利器
在现代软件开发中,Docker容器化技术成为提升开发效率和应用部署灵活性的重要工具。本文介绍Docker的基本概念,并分享Dockerfile最佳实践、容器网络配置、环境变量和秘密管理、容器监控与日志管理、Docker Compose以及CI/CD集成等技巧,帮助开发者更高效地利用Docker。