【问题标题】:What stops us from running multiple applications on the same server? [closed]是什么阻止我们在同一台服务器上运行多个应用程序? [关闭]
【发布时间】:2021-03-09 05:36:54
【问题描述】:
在阅读 Docker 时,我了解到早期的 IT 公司过去常常在每台服务器上运行单个应用程序,并且由于他们不知道应用程序的扩展规模,因此他们购买了性能超群的服务器,而这些服务器的运行潜力只是其潜力的一小部分容量导致资源和金钱的浪费。
但我想知道,是什么阻止了他们在同一台服务器上运行多个应用程序?为什么一台服务器不能像我们的个人计算机一样运行多个应用程序并共享其资源?
【问题讨论】:
标签:
docker
server
containers
virtual-machine
virtualization
【解决方案1】:
使用 docker,您通常可以制作更小、更具体的服务。它们的容器化使它们更容易扩展,并且您会被引导以不同的方式设计系统以适应这些属性。
组合多个 docker 镜像和容器来替换单个老式服务的功能并不少见。
过去的服务规模很大,有很多活动部件、资源匮乏的依赖项,并且您必须扩展硬件以服务于系统的峰值资源消耗。这意味着,如果您在一个月中的某一天必须处理数百万个请求,即使您只需要在剩余的几天内提供几百个请求,这意味着您必须在能够提供服务的硬件上运行该服务在任何给定时间的峰值水平。在同一个节点上运行多个服务会使您面临在重要高峰期出现中断的风险。这是采用单一职责服务器的原因之一。
这只是其中一个原因,增加每个节点运行一个应用程序的好处的其他原因是维护、可部署性和开发。例如,如果您在一个节点上运行多个应用程序,而您必须关闭该节点进行维护,那么现在您的整个系统都已关闭。你已经失去了优雅地处理这种情况的能力。在部署方面,在一台机器上很好地配置多个应用程序可能会变得非常复杂。如果出现问题,您可能会破坏整个系统,并且很难实现自动化。因为您必须确保不会破坏同一台机器上另一个正在运行的应用程序的状态。还记得 Windows 上的 DLL 地狱吗?由于两个版本之间的不兼容,使两个应用程序使用具有不同版本的相同组件在运行时相互干扰的情况并不少见。每个盒子一个应用程序可以减轻这种风险。如果您正在使用多个团队进行开发,那么如果这些团队拥有不同的基础架构,那么您可以让它们彼此独立工作。
现在,出现了一些新事物,改变了我们在网络中传播应用程序的方式。虚拟化使更容易更有效地利用硬件。我们不会将我们的应用程序分布在多个物理服务器上,而是使用在同一台机器上运行的虚拟机对相同的结构进行建模。与以前的服务器相比,这些机器将是真正的野兽,但综合成本会大大降低,更不用说维护要求会大大降低。
现在,随着时间的推移,这种方法发展成为容器。您不仅将应用程序分布在同一块硬件上,还将任务分布在该应用程序中。这与使用最少的运行时环境资源相结合,例如您只需要运行需要运行的操作系统部分,那么您可以构建许多超轻量级的专用微型应用程序。不同机器上不同应用程序的分离推动了这一创新,朝着可以独立运行、扩展、销毁、开发、维护和生命周期的单一职责功能发展。