我正在重构几个 node.js 服务。它们都是forever
从虚拟服务器开始的,如果进程崩溃了,它们就会重新启动。
现在,转向容器化和无状态应用程序结构,我认为进程应该退出并且容器应该在失败时重新启动。
那是对的吗?有好处还是坏处?
我正在重构几个 node.js 服务。它们都是forever
从虚拟服务器开始的,如果进程崩溃了,它们就会重新启动。
现在,转向容器化和无状态应用程序结构,我认为进程应该退出并且容器应该在失败时重新启动。
那是对的吗?有好处还是坏处?
我的看法是不要使用容器内进程管理器(永远,pm2),而是通过--restart=always
(或该选项的其他风格之一)使用 docker restart 策略。这更符合 docker 的整体理念,并且应该与容器内进程监督非常相似,因为 docker 容器开始运行得非常快。
如果你想探索关于这个主题的其他立场,我见过的运行容器内进程监督的最有力的倡导者是在phusion baseimage-docker README中。
虽然用作故障保护是一个好主意,但容器重启相对较慢(使用此处--restart=always
描述的简单 Hello World Node 服务器需要 5 秒以上),因此您可以使用类似.forever
在容器内重新启动进程的一个缺点是崩溃恢复现在可以通过两种方式进行,这可能会对您的监控等产生影响。
如果您在具有多个 CPU 的服务器上运行,节点需要集群设置。
使用 PM2,您无需编写任何额外代码即可实现。http://pm2.keymetrics.io/docs/usage/cluster-mode/
除非您使用一堆具有单个 CPU 实例的服务器,否则我会说在生产中使用 PM2。
pm2 也将比 docker 更快地重启