澄清需要关于十二因素应用宣言和守护进程的第八个因素

bal*_*teo 6 linux process-management daemon 12factor

我参考了Twelve-Factor应用程序"宣言",可以在这里找到:http://12factor.net

第八个因素中,作者写道:

十二因素应用程序进程永远不应该守护或写入PID文件.相反,依靠操作系统的流程管理器(例如Upstart,云平台上的分布式流程管理器或开发中的Foreman等工具)来管理输出流,响应崩溃的流程,以及处理用户启动的重启和关闭.

我不确定这里的意思是" 流程永远不应该守护 ".

有人可以解释守护进程的优缺点 - 特别是在java进程的上下文中吗?此外,进程管理器不能管理守护进程吗?

Mic*_*ski 6

如果一个流程去了代码,那就意味着它有效地试图自己管理它的生命周期.这对于某些应用程序类型是有用的,但对于分布式Web应用程序,这是12因素宣言所涉及的那种应用程序,它通常意味着麻烦.如果某个应用程序试图管理自己,它可能不会被外部流程管理器轻松管理,或者在最好的情况下,它可能意味着需要自定义插件或这些管理器的扩展,这使部署变得复杂.

您希望对应用程序执行的操作以及守护程序可以阻止的示例将是自动扩展.使用Mesos等工具,您基本上想告诉系统:"这是我的50台机器,现在将我的应用程序放在这些机器上".您不希望手动管理其中的内容,而是让集群管理器自动处理它.它可能会根据条件自动设置更多或更少的实例,例如系统接收的流量,并且可以在一台计算机上放置多个实例.如果一个应用程序试图管理自己,它将干扰并使这种外部管理不可能或非常复杂.