Performance Comparison Between Linux Containers and Virtual Machines

  • Abstract
  • INTRODUCTION
  • II. BACKGROUND
  • III. RELATED WORK
  • IV. PERFORMANCE AND SCABILITY COMPARISION
  • V. CONCLUSION
  • REFERENCES

Abstract

随着云计算和虚拟化的出现,现代分布式应用程序在虚拟环境中运行,以实现硬件资源的利用和基础设施中操作的灵活性。然而,当涉及到虚拟化时,就涉及到资源开销。Linux容器可以替代传统的虚拟化技术,因为它具有较高的资源利用率和较少的开销。本文在性能和可伸缩性方面比较了Linux容器和虚拟机。

INTRODUCTION

虚拟化在私有和公共云部署中扮演着重要角色。大多数公共云提供商,如Amazon EC2、谷歌计算引擎和Microsoft Azure,都利用虚拟化技术来支持它们的公共云基础设施。虚拟机由管理程序驱动。Hypervisor是一种为运行在物理主机上的虚拟机提供隔离的软件。它负责在物理主机上运行不同的内核。这反过来又使应用程序和进程隔离变得非常昂贵。如果能更有效地使用计算资源,将会有很大的影响。目前最流行的虚拟机监控程序是VMware、KVM、Xen和Hyper-V。典型的虚拟化数据中心架构如图1所示

Linux内核的进步导致了基于容器的虚拟化的发展。Linux容器(LXC)持有的方法与管理程序不同。它可以作为基于hypervisor的虚拟化的替代方案。Linux容器化是一种可以以隔离方式运行许多进程的方法。它只对多个隔离的环境或操作系统使用一个内核。容器的主要隔离因素是名为名称空间和对照组[9]的两个Linux特性。此外,LXC非常轻,因为它没有虚拟化硬件,而是所有物理主机上的容器都使用进程隔离的单一主机内核。以下是使容器对应用程序开发人员和基础设施管理员同样有用和有吸引力的特性:

  • A. Portable Deployments
    由于容器是可移植的,所以可以将应用程序捆绑到单个单元中,并且可以部署到各种环境中,而不需要对容器进行任何更改。
  • B. Fast application delivery
    容器的工作流程使得开发人员、系统管理员、QA和发布团队能够非常快速地协作并将应用程序部署到生产环境中。
    由于标准容器格式,只有开发人员需要担心容器内运行的应用程序,而系统管理员只需要担心将容器部署到服务器上。这种隔离良好的容器管理导致更快的应用程序交付。
    此外,构建新容器非常快,因为容器非常轻,而且构建新容器只需要几秒钟。这进而减少了测试、开发和部署的时间。容器也可以在迭代中构建。这样就可以很好地了解最终的应用程序是如何构建的。
    例如,当开发人员将应用程序打包到容器中时,它可以在其他团队成员之间共享。之后,可以将其推入测试环境进行各种测试。然后,您可以从测试环境将所有测试过的容器推入生产环境。
  • C. Scale and deploy with ease
    容器实际上可以在任何Linux系统上运行,也可以部署在云环境、桌面、数据中心、物理服务器等上。您可以轻松、快速地将容器从桌面环境移动到云环境,然后再移回物理服务器。
    关于容器的另一个有趣的因素是可伸缩性。向上和向下扩展容器的速度非常快。您可以将容器从1扩展到100,并在不需要时将其缩小。因此,容器非常适合扩展为公共云平台设计和构建的应用程序。
  • D. Higher workloads with greater density
    与虚拟机相比,可以在主机上部署更多的容器应用程序。由于容器不需要使用管理程序,因此可以很好地利用服务器资源,并降低额外服务器资源的成本。因为容器不使用完整的操作系统,所以与虚拟机相比,资源需求更少。

II. BACKGROUND

与虚拟化相比,使用容器在性能和可伸缩性方面有很多优势。如果您打算使用特定的操作系统运行数百个客户机,那么基于容器的解决方案可以很好地工作,因为它们的开销更小。与虚拟化相比,容器方法可用的虚拟机数量可能要高得多,因为应用程序可以使用资源,而不是由运行在主机上的多个来宾操作系统实例使用。

容器比vm弱的一个方面是隔离。VMs可以利用ring-1硬件隔离,比如Intel的VT-d和VT-x技术[8]提供的ring-1硬件隔离。这种隔离可以防止vm“爆发”并相互干扰。VM和容器之间的区别如图2所示

在本文中,使用了一个名为Docker的工具来运行容器。为了测试容器的可伸缩性,使用了一个名为kubernetes的集群管理器。

  • A. Namespaces and Cgroups
    在Linux中,有六种名称空间可以为Linux资源提供进程级隔离。名称空间确保每个容器只看到自己的环境,不会影响或访问其他容器中运行的进程。此外,通过为容器提供目录结构,名称空间提供了对chroot等文件系统的受限访问。
    容器只能看到那个目录结构,不能访问它上面的任何层。名称空间还允许容器拥有自己的网络设备
    每个容器可以有自己的IP地址和主机名。这使得每个容器独立于其他容器运行。

  • B. Docker
    Docker利用LXC (Linux容器),它由诸如cgroups和名称空间等Linux内核特性组成,用于高效的进程隔离和资源控制[1]。Docker利用一个即写即拷的文件系统,这允许Docker快速实例化容器,因为它利用了指向现有文件的指针。即写即拷文件系统还提供了容器的分层,因此您可以创建一个基本容器,然后使用另一个基于基本容器的容器。典型的基于名称空间和控制组的容器体系结构如图3所示

  • C. Kubernetes
    Kubernetes是谷歌开发的用于管理容器化应用程序的集群管理工具。您可以将一组节点作为一台大型计算机显示,并将容器应用程序部署到您的公共云和私有云。它抽象出离散的节点并优化计算资源。
    Kubernetes使用声明式方法来获得用户提到的应用程序所需的状态。当应用程序部署在kubernetes集群上时,kubernetes主节点将决定应用程序部署在哪个底层主机上。Kubernetes调度器执行应用程序部署[2]的工作。此外,kubernetes的自愈、自动重启、复制和重调度机制使其更加健壮,适合于基于容器的应用程序。

  • D. Copy on write file system
    在ext4这样的普通文件系统中,所有新数据都将覆盖在现有数据之上,并创建一个新的副本。与其他Linux文件系统不同的是,文件系统从不覆盖活动数据,而是使用磁盘中现有的未使用的块,使用写时拷贝功能(COW)进行所有更新。只有当所有数据都更新到磁盘时,新数据才会是活动的。
    例如,文件系统按块的数量划分,比如16个块。所以每个innode会有16个指针指向block。如果存储的文件小于16个块,innode会直接指向这个块。如果数据超过16个块,16个块将成为指向更多块的指针,创建一个间接指针,如图4所示

    当您修改现有数据时,它将被写入文件系统中未使用的块,而原始数据则未被修改。为了指向新的数据块,必须修改所有的间接块指针,如图5所示。但是文件系统将复制所有现有的指针来修改副本。然后,文件系统将再次更新innode,修改副本以引用新的间接指针块。修改完成后,指向原始数据的指针保持不变,更新后的数据将会有新的指针、块和innode。

    当多个任务使用相同的数据时,使用写时复制(COW)来处理资源。当应用程序从文件请求数据时,数据被发送到内存或缓存。每个应用程序都有自己的内存空间。在多个应用程序请求相同数据的情况下,COW只允许一个内存空间,并且所有应用程序都指向这个内存空间。正在更改数据的应用程序被赋予自己的内存空间,其中包含更新后的新信息。其他应用程序继续使用带有原始数据的旧指针。

III. RELATED WORK

在之前的文献中,将VMware虚拟化技术与VServer容器技术进行了比较。结果报告了基于虚拟机监控程序的VMware虚拟机[3]所涉及的开销。

另一个研究是基于使用OpenVZ容器的虚拟环境进行高性能计算。在他的研究中,他得出结论,基于容器的网络和内存隔离还不成熟,但它在CPU利用率[4]方面表现良好。
最近一项关于Xen虚拟化Amazon计算云上的网络性能的研究显示,即使网络没有被过度使用,虚拟化也会对吞吐量[5]产生巨大的影响。

另外,还比较了主要管理程序,并发现了基于管理程序的网络吞吐量和磁盘I/O性能的差异,使用的是[6]。

通过对Xen、KVM和OpenVZ容器技术使用微基准的比较,我们可以发现这一点。OpenVZ被认为是Linux容器(LXC)[7]的前身。

  • A. Contribution

过去的研究主要集中在比较虚拟机环境和虚拟机内部应用程序的性能。在性能和可伸缩性方面对虚拟机和Linux容器进行比较的宏基准测试在这些研究中没有涉及。特定虚拟机上的负载会影响与其他虚拟机的通信。此外,在虚拟机故障时,虚拟机的垂直扩展时间会影响应用程序的性能。为了在网络延迟和容错性方面处理虚拟机和容器之间的差异,使用宏基准测试来集中处理整个应用程序基础结构。

虚拟机的可伸缩性取决于应用程序体系结构。虚拟机可以是集群的,也可以根据CPU负载设置为自动伸缩。同样,可以根据资源需求对Linux容器进行集群和扩展。Docker使得Linux容器在支持Linux内核的机器上更加便携和易于部署。测试在虚拟机和容器环境上运行的相同应用程序的性能,以测试这两个环境中涉及的延迟。可伸缩性是根据虚拟机和容器根据故障伸缩所花费的时间来度量的。

IV. PERFORMANCE AND SCABILITY COMPARISION

用于比较虚拟机和Linux容器的设置包括AWS ec2云和两个物理服务器。Ubuntu 14.04服务器操作系统每个都有2GB内存,用于ec2虚拟机和物理服务器上的Docker。

  • A. Application perfomace comparision

应用程序性能比较的设置包括前端应用程序服务器托管Joomla php应用程序和后端服务器托管postgreSQL数据库,用于存储和检索Joomla应用程序的数据。Joomla应用程序充满了测试数据。Jmeter实用程序用于同时对应用程序进行压力测试
向Joomla应用程序发送请求,直到服务器出现性能[10]问题

在600秒内,JMeter尝试完成尽可能多的请求,并发请求的数量也在不断增加。在初始时间t=0ms,测试软件从一个并发请求开始,只有前一个请求结束时才发送下一个请求。同步请求的数量直线增加,直到520秒,达到大约80个并发请求。

图6显示了在600秒内成功的请求数。该图显示Docker容器能够在400秒内处理更多的请求,是虚拟机的三倍多。

图7显示,即使是处理一个请求,虚拟机也需要更多的时间。在数据点之间绘制的趋势线取20个数据点的平均值。此外,还发现虚拟机的执行不像Docker那样一致,即使它可以访问物理内存。当链接的数量增加到服务器无法使用物理内存处理的程度时,主机就开始在硬盘和物理内存之间交换内存。

  • B. Scalability comparision

在虚拟机可伸缩性测试中,使用了AWS ec2自动伸缩特性[11]。当虚拟机实例达到最大的CPU负载时,自动扩展特性将扩展虚拟机实例。这里,自动缩放实例计数被设置为1。为了测试Linux容器的可伸缩性,使用了kubernetes集群工具。使用kubernetes,两个物理服务器与Docker主机是集群的。


在这个实验中,虚拟机和容器环境都运行一个负载均衡的WordPress应用程序。Jmeter用于通过将CPU利用率提高到80%以上来触发扩展,从而扩展虚拟机。使用kubernetes集群管理器向前端WordPress应用程序发送并发请求以触发容器伸缩,也使用了相同的Jmeter。

结果表明,容器扩展和处理服务请求所需的时间比扩展新虚拟机处理请求所需的时间要少得多。扩展虚拟机的计算时间是3分钟,而容器只需要8秒来扩展和处理请求。从可伸缩性的角度来看,这是一个很大的不同。如图8所示,容器在可伸缩性方面比虚拟机快22倍。

V. CONCLUSION

本文通过比较虚拟机和Linux容器给出了宏基准。容器在性能和可伸缩性方面优于虚拟机。由于其更好的可伸缩性和资源利用率,可以将容器用于应用程序部署以减少资源开销。但是,在某些用例中,虚拟机比Linux容器更适合。其中一个用例是运行具有业务关键数据的应用程序。容器以root权限运行.

REFERENCES

[1] Docker. URL https://www.docker.io/
[2] Kubernetes URL https://www.kubernetes.io
[3] J. Clerk Maxwell, A Treatise on Electricity and Magnetism, 3rd ed., vol. 2. Oxford: Clarendon, 1892, pp.68-73.
[4] Benjamin, Vincent Neri and Frank Cappello. Scalability comparison of four host virtualization tools. Journel of Grid The Computing.
[5] Miguel G Xavier, Marcelo V Neves, Fabio D Rossi and Cesar AFDe Rose. Performance Evaluation of container based virtualization for high performance computing environment.
[6] Guohui Wang and TS Eugene Ng. The impact of virtualization on network performance of amazon ec2 data center.
[7] J.Hwang, S.Zeng, F.Wu and T.Wood. A component based performance comparison of four hypervisors. In Integrated Network Management, 2013.
[8] Jianhua Che, Yong Yu, Congcong Shi and Weimin Lin. A synthetical performance evaluation of openvz,xen and kvm. In Services Computing Conference , 2010 IEEE.
[9] LXC URL https://linuxcontainers.org/
[10] Jmeter URL http://jmeter.apache.org/ [11] AWS autoscaling http://aws.amazon.com/autoscaling/

论文阅读 Performance Comparison Between Linux Containers and Virtual Machines相关推荐

  1. azure linux 配置端口,快速入门 - 在 Azure 门户中创建 Linux VM - Azure Virtual Machines | Microsoft Docs...

    您现在访问的是微软AZURE全球版技术文档网站,若需要访问由世纪互联运营的MICROSOFT AZURE中国区技术文档网站,请访问 https://docs.azure.cn. 快速入门:在 Azur ...

  2. Harmonzing Performance and Isolation in Microkernels论文阅读

    Harmonizing Performance and Isolation in Microkernels with Efficient Intra-kernel Isolation and Comm ...

  3. 【论文阅读】Systematic Comparison of Respiratory Signals for the Automated Detection of Sleep Apnea

    论文阅读:Systematic Comparison of Respiratory Signals for the Automated Detection of Sleep Apnea 一.摘要 对这 ...

  4. [论文阅读] (14)英文论文实验评估(Evaluation)如何撰写及精句摘抄(上)——以入侵检测系统(IDS)为例

    <娜璋带你读论文>系列主要是督促自己阅读优秀论文及听取学术讲座,并分享给大家,希望您喜欢.由于作者的英文水平和学术能力不高,需要不断提升,所以还请大家批评指正,非常欢迎大家给我留言评论,学 ...

  5. 【论文阅读】Learning Traffic as Images: A Deep Convolutional ... [将交通作为图像学习: 用于大规模交通网络速度预测的深度卷积神经网络](1)

    [论文阅读]Learning Traffic as Images: A Deep Convolutional Neural Network for Large-Scale Transportation ...

  6. YOLOv4论文阅读(附原文翻译)

    YOLOv4论文阅读(附原文翻译) 论文阅读 论文翻译 Abstract摘要 1.Introduction 引言 2.Related work相关工作 2.1.Object detection mod ...

  7. [论文阅读] (13)英文论文模型设计(Model Design)如何撰写及精句摘抄——以入侵检测系统(IDS)为例

    <娜璋带你读论文>系列主要是督促自己阅读优秀论文及听取学术讲座,并分享给大家,希望您喜欢.由于作者的英文水平和学术能力不高,需要不断提升,所以还请大家批评指正,非常欢迎大家给我留言评论,学 ...

  8. 深度学习论文阅读目标检测篇(四)中英文对照版:YOLOv1《 You Only Look Once: Unified, Real-Time Object Detection》

    深度学习论文阅读目标检测篇(四)中英文对照版:YOLOv1< You Only Look Once: Unified, Real-Time Object Detection> Abstra ...

  9. 深度学习论文阅读目标检测篇(一):R-CNN《Rich feature hierarchies for accurate object detection and semantic...》

    深度学习论文阅读目标检测篇(一):R-CNN<Rich feature hierarchies for accurate object detection and semantic segmen ...

最新文章

  1. java 编码过滤器_Java编码过滤器
  2. 哈希--直接定值法和除留取余法
  3. python并发编程之多进程理论部分
  4. Coursera吴恩达《卷积神经网络》课程笔记(3)-- 目标检测
  5. Shiro简介+核心概念
  6. css如何重置触发动画,如何通过JavaScript重新触发WebKit CSS动画?
  7. l2-029 特立独行的幸福 (25分)_霜降后盆栽幸福树,调整4个地方,不用再怕掉叶子了...
  8. bzoj 1670: [Usaco2006 Oct]Building the Moat护城河的挖掘(凸包)
  9. 我坚决不能容忍_出轨坚决不能忍,3星座女对出轨0容忍,敢出轨就等着吧
  10. 稳扎稳打 Silverlight 4.0 教程
  11. 小程序毕设作品之微信酒店预订小程序毕业设计(8)毕业设计论文模板
  12. python运行中更改代码_运行时更改python源代码
  13. Python基础(8)字符串及常用操作
  14. element提交图片限制一张_ElementUI 上传文件以及限制
  15. .shtml网站解析UnicodeError
  16. 有道云笔记设置界面 占满全屏(右侧)
  17. 手把手教你搭APM之Skywalking搭建指南(支持Java/C#/Node.js)
  18. initWithFrame/initWithCode/awakeFromNib调用
  19. HTML5CSS3笔记:响应式设计中的 HTML5
  20. (一)傅里叶变换:傅里叶级数(Fourier Series)

热门文章

  1. web服务器、Web中间件和Web容器的区别(转载)
  2. 学好Python,为你喜欢的抖音小姐姐疯狂打call
  3. 算法 {哈密顿路径,哈密顿环}
  4. Checkpoint r77升级后界面改变好多
  5. 一文搞懂什么是 PostCSS
  6. VM安装Arch全程记录-2012-5
  7. 全国计算机考试vb二级通过率,想知道计算机二级考试VB的到底通过率咋样???考过的请指教咋样复习...
  8. 湖北武汉材料员报考提高工程材料把控力度建筑七大员报考
  9. html点击 css样式,HTML css a标签点击后样式
  10. 照片分色滤镜处理软件