为什么需要虚拟机来运行多个服务器实例

78次阅读
没有评论

问题描述

在学习虚拟化和容器时,看到一个教育视频中提到,引入虚拟机是一个重大突破,因为它使得公司能够在同一台机器上运行多个服务器实例,这样他们就不必购买新的机器来运行新的实例了。但是,如果我有一个Node.js服务器应用程序,我可以在同一台机器上运行多个实例而不需要任何虚拟化。为什么需要运行多个实例?为什么需要虚拟机?我最好的猜测是,Node.js被设计为支持运行多个实例(实例之间互相不知道),因此不需要虚拟机。但是,如果不使用虚拟服务器将它们分开,那么它们之间的服务器将会互相“知道”。人们在使用容器时是否也是这样做的?如果我有一个微服务架构,假设我只有一台计算机,我是不是只是使用容器来检查它们在不同环境中是否正常运行,还是会创建多个相同的微服务?

解决方案

请注意以下操作注意版本差异及修改前做好备份。

多个应用程序在同一台服务器上

如果我有一个Node.js服务器应用程序,我可以在同一台机器上运行多个实例而不需要任何虚拟化。
是的,您可以在同一台服务器上运行多个应用程序或多个相同应用程序的实例。但问题是这些应用程序会相互干扰。
一些可能会相互干扰的资源示例:
– 它们都希望监听相同的端口,例如8080。
– 如果它们需要更多的内存,它们最终会争夺相同的内存。
– 如果应用程序繁忙,它们将争夺相同的CPU资源。
– 它们都希望将日志写入文件系统上的相同文件。
– 它们都可能希望将数据保存到文件系统上的相同位置。

这些问题需要以某种方式进行管理,我们不希望手动处理。
使用虚拟机或容器,每个实例都有自己的IP地址,每个实例可以监听它想要的端口,例如所有实例都可以监听8080端口。您可以限制每个实例可以使用的内存量,例如1GB,因此如果一个应用程序泄漏内存,它不会影响其他应用程序。您还可以限制每个实例可以使用的CPU量,因此它们只使用公平份额。每个实例都有自己的文件系统视图,因此所有实例可以写入相同的路径(它们看到的路径),即使在技术上是不同的位置。

多个实例 – 可用性

为什么需要运行多个实例?
当您需要对服务器进行补丁并需要重新启动时,您会怎么做?如何将您的应用程序升级到新版本?如果服务器上的硬件崩溃会发生什么?当单个实例无法处理所有流量时会发生什么?

对于所有这些问题,通常的答案是:运行多个应用程序实例,并让负载均衡器将流量转发到活动的实例。

为什么需要虚拟化?

为什么需要虚拟机?

实际上并不是真正需要虚拟机。这更多是关于经济性,一种更有效地使用昂贵硬件的方式。

如果您启动一个新项目,购买一台服务器 – 这台服务器非常强大且昂贵。如果您只在此服务器上启动一个Node.js应用程序,那么在此Node.js应用程序变得如此受欢迎以至于需要使用整个服务器之前,可能需要很长时间。如果您在开始时只能租用服务器的一小部分,那将是更好的选择 – 这就是云计算与AWS和Google Cloud Platform的工作原理。

正文完