【问题标题】:Erlang: Who supervises the supervisor?Erlang:谁监督主管?
【发布时间】:2011-08-07 16:56:02
【问题描述】:

在我见过的所有 Erlang 主管示例中,通常有一个“主”主管负责监督整个树(或者至少是主管树中的根节点)。如果“主人”主管坏了怎么办? “主人”——主管应该如何监管??有什么典型的模式吗?

【问题讨论】:

    标签: erlang erlang-supervisor erl


    【解决方案1】:

    顶级主管在您的应用程序 start/2 回调中使用 start_link 启动,这意味着它与应用程序进程链接。如果应用程序进程从死亡的最高主管收到退出信号,它会执行以下两种操作之一:

    1. 如果应用程序作为永久应用程序启动,我将终止整个节点(并且可能使用 HEART 重新启动)。

    2. 如果应用程序是临时启动的,应用程序将停止运行,不会进行重新启动尝试。

    【讨论】:

      【解决方案2】:

      通常,Supervisor 设置为“仅”监督其他进程。哪个男人没有由主管执行的用户编写的代码 - 所以它不太可能崩溃。

      当然,这不能强制执行...所以典型的模式是在 Supervisor 中具有任何特定于应用程序的逻辑...它应该只负责监督 - 并且什么都不做。

      【讨论】:

      • 但是 Erlang 通常用于云计算。如果包含“master”-supervisor 的服务器崩溃(有人不小心拔掉插头?),supervisor 可能会崩溃。此外,通常在操作系统上运行的不仅仅是您的应用程序线程。这并不意味着在这种情况下整个云应该崩溃..
      • @dkk Erlang 通常不用于云计算。云计算是最近几年出现的一个术语,而 Erlang 已经存在了 20 多年。 Erlang 通常宁愿在中小型服务器集群上运行
      • @dkk:你不用监督者监视其他节点,每个节点上的每个应用程序都有一个主监督者。
      【解决方案3】:

      好问题。我必须同意所有示例和教程大多忽略了这个问题——即使偶尔有人提到这个问题(没有提供示例解决方案):

      如果您想要可靠性,请至少使用两台计算机,然后让它们相互监督。然而,如何使用 OTP 实际实现它是(在文档和教程的当前状态下),似乎介于隐藏和秘密之间。

      【讨论】:

        猜你喜欢
        • 2016-02-12
        • 2012-01-13
        • 1970-01-01
        • 1970-01-01
        • 2014-09-12
        • 2023-03-02
        • 2015-05-16
        • 2010-10-15
        • 2011-05-24
        相关资源
        最近更新 更多