我参考了Twelve-Factor app" manifesto"可在此处找到:http://12factor.net
在eighth factor中,作者写道:
十二因素应用程序进程永远不应该守护或写入PID文件。 相反,依赖于操作系统的流程管理器(例如 Upstart,云平台上的分布式流程管理器或工具 像Foreman在开发中)来管理输出流,响应 崩溃的进程,并处理用户启动的重启和关闭。
我不确定" 进程应该永远不会守护"这意味着什么。
有人可以解释守护进程的优缺点 - 特别是在java进程的上下文中吗?另外,守护进程是否可以由进程管理器管理?
答案 0 :(得分:6)
如果一个流程去了代码,那就意味着它有效地试图自己管理它的生命周期。这对于某些应用程序类型是有用的,但对于分布式Web应用程序,这是12因素宣言所涉及的那种应用程序,它通常意味着麻烦。如果某个应用程序试图管理自己,它可能不会被外部流程管理员轻松管理,或者在最好的情况下,它可能意味着需要自定义插件或这些管理器的扩展,这使部署变得复杂。
您希望对应用程序执行的操作以及守护程序可以阻止的示例将是自动扩展。使用诸如Mesos之类的工具,您基本上想要告诉系统:“这是我的50台机器,现在将我的应用程序放在这些机器上”。您不会手动管理其中的内容,而是让集群管理器自动处理它。它可以根据条件自动设置更多或更少的实例,例如您的系统正在接收多少流量,并且可以在一台计算机上放置多个实例。如果一个应用程序试图管理自己,它会干扰并使这种外部管理变得不可能或非常复杂。