是什么阻止我们在同一台服务器上 运行 多个应用程序?

What stops us from running multiple applications on the same server?

阅读 docker 时,我了解到早期的 IT 公司过去常常 运行 每台服务器一个应用程序,由于他们不知道应用程序可以扩展到多大,所以他们购买了执行服务器 运行 其潜在容量的一小部分导致资源和金钱的浪费。

但我想知道,是什么阻止了他们 运行在同一台服务器上安装多个应用程序?为什么服务器不能像我们的个人计算机一样运行多个应用程序共享其资源?

使用 docker,您通常会制作更小、更具体的服务。它们的容器化使它们更容易扩展,并且您会被引导以不同的方式设计系统以适应这些属性。

组合多个 docker 图像和容器来替换单个老式服务的功能并不少见。

过去的服务很大,有很多移动部件、资源匮乏的依赖项,您必须扩展硬件以满足系统的峰值资源消耗。意思是,如果您在一个月中的某一天必须处理数百万个请求,即使在剩余的几天里您只需要处理几百个请求,这意味着您必须 运行 支持硬件的服务在任何给定时间以最高水平服务。 运行 同一节点上的多个服务会使您面临在重要高峰期中断的风险。这是采用单一职责服务器的原因之一。

这只是其中一个原因,运行每个节点一个应用程序的好处的其他原因是维护、可部署性和开发。例如,如果您 运行 在一个节点上运行多个应用程序,而当您必须关闭该节点进行维护时,那么现在您的整个系统都已关闭。你已经失去了优雅地处理这种情况的能力。在部署方面,在一台机器上配置多个应用程序会变得非常复杂。如果出现问题,您将面临破坏整个系统的风险,而且很难实现自动化。因为您必须确保不会破坏同一台机器上另一个 运行ning 应用程序的状态。还记得 Windows 上的 DLL 地狱吗?由于两个版本之间的不兼容,两个使用相同组件但版本不同的应用程序在 运行 时间相互干扰的情况并不少见。每盒一个应用程序可以减轻这种风险。如果您正在使用多个团队进行开发,那么如果团队具有独立的基础架构,那么您可以让他们彼此独立工作。

现在,出现了一些新事物,改变了我们在网络上传播应用程序的方式。虚拟化使得更容易、更有效地利用硬件变得更加容易。我们不会在多个物理服务器上分布我们的应用程序,而是在同一台机器上使用虚拟机 运行ning 对相同的结构进行建模。与以前的服务器相比,这些机器将是真正的野兽,但综合成本会大大降低,更不用说维护要求也会大大降低。

现在,随着时间的推移,这种方法发展成为容器。在这种情况下,您不仅可以将应用程序分布在同一块硬件上,还可以在该应用程序中分布您的任务。这与使用你的 运行 时间环境资源的最低限度相结合,就像你只带来你需要运行的 OS 部分一样,你可以构建许多超轻量级的专用微型应用程序.不同机器上的不同应用程序的分离推动了这项创新朝着单一职责功能的方向发展,这些功能可以 运行、扩展、销毁、开发、维护和生命周期相互独立。