虚拟化从根本上改变了数据中心的运作方式,这过去还不是很久。2002 年,VMware 发布了首款虚拟机管理程序 ESX Server 1.5,一定程度上引领了企业级虚拟机的主流应用。对于千禧一代来说,这一切都仿佛发生在昨天。
这项技术使基础设施的利用率发生了革命性的变化,用户可以在同一个硬件上运行多个操作系统,使硬件资源的应用最大化。随后,比虚拟机更年轻时尚、Z 世代也更熟悉的容器,在 2013 年随着 Docker 的发布而大放异彩,也刺激了容器主流应用产品的研发。容器允许多个孤立的应用程序共享同一个操作系统内核。
虽然虚拟机和容器的工作方式不同,但这两种技术非常相似。这也就产生了一个问题:容器会取代虚拟机吗?今天,我们来分析下这个问题。
虚拟机是由软件定义的计算机,运行在 Hypervisor(虚拟机监视器)之上,允许多个操作系统共享同一底层的物理硬件,并在相互隔离的情况下运行。Hypervisor 将底层硬件虚拟化,每个虚拟机都运行自己的操作系统(OS)。
在虚拟机之前,一台服务器仅能支持一个操作系统,用户无法实现在同一台服务器上运行不同操作系统下的业务应用,或者这些应用在运行时不会互相干涉。每个运行的业务应用,比如电子邮件或者 CRM,都必须拥有自己的(通常配置过高,利用率低)硬件集。有了虚拟机后,一台服务器就能同时支持多个操作系统和多个应用,大大降低了企业在硬件和硬件管理方面的开支。
容器同样是由软件定义的计算实例,但是它们在一个共享的主机操作系统上运行。容器将软件打包成可移植的、可执行的单元,具有所有必需的依赖关系,能够在任何地方运行,包括笔记本计算机、服务器、云端等。下表列出了虚拟机和容器的不同之处:
因为无须拖动全部的操作系统代码,所以容器更加轻便(兆字节,相对于虚拟机的千兆字节),启动速度也比虚拟机更快。在一台服务器上,用户可以使用容器来运行比虚拟机多两到三倍的应用。
仅凭这一点,或许就可以说明容器是未来的趋势,而虚拟机则是旧闻。
容器是否会取代虚拟机,这个问题看起来简单,但并不容易作出预言。我们可以看一下支持虚拟机和支持容器的人分别都有哪些理由。
尽管容器更小、更快,但容器永远不会杀死虚拟机,理由如下:
熟悉度和成熟度。尽管科技行业对新技术的接受很快,但虚拟机在许多组织中的应用已经非常成熟。大多数企业都有固定的流程、程序和团队来管理虚拟机的部署,包括备份和监控。虽然“我们一直在用的方式”并不总是继续做某件事的最佳理由,但是还有一个理论是“如果它没有坏,就不要去修复”。某个能够在虚拟机上正常工作的单体应用,为了保证其能在容器环境下工作,用户就必须对其进行重构,但有时这种努力并不值得。
拥有完整的操作系统功能。使用虚拟机与所有操作系统服务一起工作,有时比更协调的“Docker Compose”或具有不必要复杂性的 Kubernetes 集群更可取,特别是对于一些复杂的应用程序。
异质环境。虚拟机的作用就是可以运行多个操作系统。容器共享同一个操作系统内核,因此需要一个同质的环境。有一种观点认为,企业数据中心正朝着更加同质化的环境发展,以实现标准化,从而提高运营效率。但这种情况尚未大规模发生,许多企业仍然需要运行多个操作系统,并且在可预见的将来也会如此。
安全性。容器的安全性经常被虚拟机拥趸者攻击。虚拟机支持者认为,容器共享主机操作系统资源而更容易受到攻击,虚拟机则在其虚拟墙内包含操作系统。如果一个容器被攻击了,它可能会感染其他共享主机操作系统的容器。如果一个虚拟机被攻击,虚拟机、主机服务器和其他虚拟机之间则会形成一道额外的屏障。
两者不是非此即彼的,企业可以兼而有之。用户可以在虚拟机上运行容器,这样就可以让已经拥有虚拟机的企业能够采用容器。他们可以在不必完全放弃虚拟机的情况下,充分利用容器的速度和敏捷性。
容器也有很多优势,是什么让它们成为取代虚拟机的竞争者?容器的支持者通常持以下观点:
速度和可移植性。容器启动只需几秒钟,而虚拟机则需要几分钟,但容器带来的速度优势并不限于启动时间。容器解决了环境一致性问题,开发人员在配置环境和处理错误上花费的时间少很多。像 Docker 这样的容器引擎也有容器镜像库,加快了开发者们的工作,而像开放容器标准(Open Container Initiative,OCI)这样的项目已经制定了容器的标准,从而简化了部署。
可扩展性。通过 Kubernetes 或 Cycle.io 等容器编排器,容器可以根据流量需求自动扩展,并在需要的时候复制容器镜像,不需要的时候将其关闭。容器的小尺寸和启动速度意味着其扩展速度比虚拟机更快。
模块化。容器彻底改变了应用开发,使应用可以作为单独的微服务松散地耦合在一起进行开发。DevOps 和 CI/CD 实践大大加快了应用程序的交付速度。正如一位高级软件工程师所说,整个环境像乐高那样堆叠起来,这样的能力很强大。容器的小尺寸和可移植性意味着应用程序可以在小的组件中构建,这些部分可以堆叠在一起,构建一个完整的应用程序。
易于更新。为容器中微服务而构建的应用程序中的更新和重新部署,要比具有更新和停机需求的全功能操作系统更容易管理。抽象的操作系统。由于容器对操作系统进行了抽象,所以在处理虚拟机化问题上,容器要比虚拟机简单得多。在 Mac OS 和 M1 操作系统中,虚拟化非常棘手,但是容器可以使虚拟环境在它们上面轻松运行。
容器会在开发环境中取代虚拟机吗?似乎已经有定论了。但是容器会全面取代虚拟机吗?事实可能并非如此。
开发者不会再像以前那样构建一个单一的应用。通过使用容器,他们能够从以前环境的不一致中解脱出来,更多地关注在代码构建、创建更好的软件以及更快速地编写代码。容器在开发者中已经成为了一种主流的虚拟化技术。
但是,容器究竟是应用程序的传递还是基础结构,两者有很大的区别。虚拟机运行缓慢、可移植性较差而且很重,但在部署企业的基础设施和运行传统单体应用时,虚拟机依然是优先考虑的技术。比如,尽管容器是应用程序开发的首选技术,但其他领域的 IT 团队,比如教育行业,不大会愿意花时间来将其定制化的学生信息系统重构为微服务架构,这些企业也无法用一个容器来取代其为学生提供的数以千计的虚拟机。
最终答案是什么?在当今的数据中心里,容器和虚拟机器都占有一席之地。
原文链接:
https://www.backblaze.com/blog/will-containers-replace-virtual-machines/
点击底部阅读原文访问 InfoQ 官网,获取更多精彩内容!
解读数据库的2021:资本进来添了一把火,开源已占据半壁江山
下载量和Vue一样大的开源软件被作者恶意破坏,数千款应用受到牵连
点个在看少个 bug 👇