在 Linux 容器中运行的应用程序在一个物理服务器上运行的单个操作系统副本中隔离。这种方法与基于 hypervisor 的虚拟化形成对比,在基于 hypervisor 的虚拟化中,每个应用程序都绑定到 guest 操作系统的完整副本,并通过中间的 hypervisor 与硬件通信。因此,容器消耗的系统资源(如内存)非常少,并且基本上不会对应用程序造成性能开销。
使用容器的含义之一是,给定环境中运行的操作系统副本往往相对同质,因为它们本质上充当所有在其上运行的应用程序的某种通用共享基底。特定的依赖项可以与应用程序一起打包(在用户空间的隔离进程中),但内核在系统上运行的容器之间共享。
因此,操作系统不再像历史常态那样被配置、调整、集成并最终与单个应用程序结合,但这种变化丝毫不减损其重要性。事实上,由于操作系统为位于其上的所有容器提供框架和支持,因此它比硬件服务器虚拟化的情况发挥着更大的作用,在硬件服务器虚拟化中,主机是 hypervisor。(当然,以 KVM 为例,hypervisor 利用操作系统来完成它需要的类似操作系统的功能,但 hypervisor 架构本身并没有要求这样做。)
所有适用于虚拟化世界的安全强化、性能调优、可靠性工程和认证仍然适用于容器化世界。而且,事实上,与 hypervisor 处理其中一些任务的情况相比,操作系统在提供安全性和资源隔离方面承担着更大的责任。我们也在朝着操作系统明确处理多主机应用程序的未来发展,充当它们的编排器和调度器。这包括跨多个主机和容器对应用程序进行建模,并提供服务和 API 以将应用程序放置到适当的资源上。换句话说,Linux 正在不断发展以支持这样一种环境,在这种环境中,“计算机”越来越像是一个由连接系统组成的复杂体,而不是单个离散的服务器。
在这样的环境中,拥有可移植地组合应用程序的机制也变得越来越重要。总体概念并不是什么新鲜事物。在整个 21 世纪初,作为一名行业分析师,我花了很多时间撰写关于当时可用的各种虚拟化和分区技术的研究报告。其中一组技术是“应用程序虚拟化”。作为一个类别,应用程序虚拟化仍然有点小众,但最近被重新构想。包括 Docker 在内的技术正在利用容器模型来创建看起来非常像应用程序虚拟化旨在完成的事情:将应用程序组合为一组层,并在环境中以低开销移动它们。
是的,操作系统绝对正在被抽象化;我们正在摆脱伴随每个应用程序实例的手工制作和硬编码的操作系统实例——就像我们之前摆脱了为每个单独的服务器精心制作的操作系统实例一样。是的,依赖于这种广泛的操作系统定制才能工作的应用程序不适合容器化环境。使容器在今天如此有趣(而不仅仅是十年前的小众)的趋势之一是全面转向更便携和更少状态的应用程序实例。操作系统的作用仍然至关重要;只是您正在所有应用程序中使用标准的 base 镜像,而不是采用该标准的 base 镜像并为每个单独的应用程序进行调整。
将所有这些加在一起,应用程序变得更加适应性强、更易于移动、更易于分发且更轻量级。它们的放置和配置变得更加自动化。但它们仍然需要运行在某些东西之上。一些坚实的东西。一些开放的东西。一些能够为新需求和新型工作负载而发展的东西。而那“某些东西”就是一个(Linux)操作系统。
7 条评论