我参考了Twelve-Factor应用程序“宣言”,可以在这里找到:
http://12factor.net
在eighth factor,作者写道:
Twelve-factor app processes should never daemonize or write PID files.
Instead,rely on the operating system’s process manager (such as
Upstart,a distributed process manager on a cloud platform,or a tool
like Foreman in development) to manage output streams,respond to
crashed processes,and handle user-initiated restarts and shutdowns.
我不确定“流程永远不应该守护”的含义.
有人可以解释守护进程的优缺点 – 特别是在java进程的上下文中吗?此外,进程管理器不能管理守护进程吗?
解决方法
如果一个流程去了代码,那就意味着它有效地试图自己管理它的生命周期.这对于某些应用程序类型是有用的,但对于分布式Web应用程序,这是12因素宣言所涉及的那种应用程序,它通常意味着麻烦.如果某个应用程序试图管理自己,它可能不会被外部流程管理器轻松管理,或者在最好的情况下,它可能意味着需要自定义插件或这些管理器的扩展,这使部署变得复杂.
您希望对应用程序执行的操作以及守护程序可以阻止的示例将是自动扩展.使用诸如Mesos之类的工具,您基本上想告诉系统:“这是我的50台机器,现在将我的应用程序放在这些机器上”.您不希望手动管理其中的内容,而是让集群管理器自动处理它.它可以根据条件自动设置更多或更少的实例,例如您的系统正在接收多少流量,并且可以在一台计算机上放置多个实例.如果一个应用程序试图管理自己,它将干扰并使这种外部管理不可能或非常复杂.