Node.js 过程管理与容器

Node.js 过程管理与容器,node.js,docker,microservices,pm2,lxc,Node.js,Docker,Microservices,Pm2,Lxc,当可以通过流程管理器(如PM2)部署微服务时,在容器中隔离/封装微服务的最大优势是什么(如果有的话)?为了使问题更清楚、更有意义,假设一个面向服务的环境具有各种微服务(例如,所有微服务都是在节点中编写的),其中水平可伸缩性非常重要,并且每个微服务都需要复制来分发处理并增加处理能力 在此环境中,有两个选项可用于堆叠这些微服务: 1-每个微服务都可以停靠(通过docker、LXC、LXD等) 2-每个微服务都可以进行后台监控(通过PM2、Forever等) 如果我们选择第一个选项,dockeriza

当可以通过流程管理器(如PM2)部署微服务时,在容器中隔离/封装微服务的最大优势是什么(如果有的话)?为了使问题更清楚、更有意义,假设一个面向服务的环境具有各种微服务(例如,所有微服务都是在节点中编写的),其中水平可伸缩性非常重要,并且每个微服务都需要复制来分发处理并增加处理能力

在此环境中,有两个选项可用于堆叠这些微服务:

1-每个微服务都可以停靠(通过docker、LXC、LXD等)

2-每个微服务都可以进行后台监控(通过PM2、Forever等)

如果我们选择第一个选项,dockerization需要更多的磁盘空间、更复杂的路由和更长的设置时间。虽然第二个选项允许使用全局安装的依赖项,这使得更新此类依赖项更容易,但它将消耗更少的磁盘空间(仅与微服务的物理大小相同),更简单的路由/集群


如果我想决定,我会选择第二个选项,而不是容器,我会在需要的地方添加虚拟机/物理机器(数据库服务器、缓存服务器、HTTP服务器)。但我真的遗漏了什么吗?这两者真的有可比性吗?最后,容器提供了什么使其优于进程?

我认为这是一个可靠性问题:如果带有pm2的服务器和所有微服务实例崩溃,您的应用程序将脱机。在容器环境中,您有一个orchestrator来管理更新、崩溃(按区域)等等。@ManuelSpigolon:True,但当主机操作系统崩溃时,容器也会发生这种情况。我相信基于容器的托管比使用虚拟机便宜得多。容器被称为“高密度”托管,与计算机上的托管进程相比,它在计算和内存资源方面更经济。在AWS或Azure中托管时尤其如此。成本节约可能是巨大的。@tomredfern:但是虚拟机和物理机器有专用的资源,可以优化每个特定子系统所需的资源。然而,问题是单台机器中的流程管理与容器。在单台机器上,我认为没有好处。