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



我指的是Twelve Factor应用程序"宣言",可以在这里找到:http://12factor.net

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

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

我不确定这里所说的"进程永远不应该守护"是什么意思。

有人能解释一下守护进程的利弊吗?尤其是在java进程的上下文中?另外,进程管理器不能管理守护进程吗?

如果一个流程取消了监控,则意味着它正在有效地尝试自己管理其生命周期。这对某些类型的应用程序来说是好的,但对于分布式web应用程序,这是12因素宣言所涉及的应用程序,通常意味着麻烦。如果一个应用程序试图自我管理,外部流程管理器可能无法轻松管理它,或者在最好的情况下,这可能意味着需要这些管理器的自定义插件或扩展,这会使部署变得复杂。

自动缩放是一个例子,说明你想对应用程序做什么,以及守护进程可以阻止什么。使用Mesos等工具,你基本上想告诉系统:"这是我的50台机器,现在把我的应用程序放在这些机器上"。您不想手动管理要去的地方,而是让集群管理器自动处理它。它可能会根据情况自动设置更多或更少的实例,例如系统接收的流量,并且它可能会在一台机器上放置多个实例。如果一个应用程序试图自我管理,它会干扰并使这种外部管理变得不可能或非常复杂。

相关内容

最新更新