【问题标题】:Why doesn't Erlang/OTP use several supervisors (or does it)?为什么 Erlang/OTP 不使用多个监督者(或者确实如此)?
【发布时间】:2015-02-19 10:39:43
【问题描述】:

查看 OTP 的文档,设置这些系统的典型方法似乎是让一个主管监控多个工人:

http://www.erlang.org/doc/design_principles/sup_princ.html

在运行主管的机器崩溃或与工人的机器断开连接之前,这将非常有效。那么是否有理由不拥有多个主管,比如每台机器一个?

【问题讨论】:

  • 我认为您不想监督不同节点(或机器)上的进程。所以,不,每个节点至少有一个主管听起来不错。
  • 一个更好的描述是每个节点和每个应用程序一个监督树,但每个节点有几个应用程序,当需要可靠性时有几个节点......见lyse
  • 重读这篇文章:erlang.org/doc/design_principles/des_princ.html#id63532 不是圈子的东西都是主管。在这棵树中,您在何处绘制按节点分隔不同元素的线完全取决于您——即使您想在多个节点上复制整个事物。

标签: erlang erlang-otp


【解决方案1】:

以下是如何在一台机器上设置 OTP 应用程序:

有两个-behavior(application) 正在运行。每个都有一个顶级的-behavior(supervisor) 模块。由其他主管下的主管组成监督树的情况并不少见。

监督树非常适合管理工人,但面对机器故障时的高可用性是一个单独的问题。您可以在机器上设置一个主管来监督其他机器上的工人,但如果主管机器出现故障,您仍然会丢失整棵树。

对于这种 HA 行为,您需要一些外部系统来监控机器/BEAM 并重新启动出现故障的东西。根据您的系统,您可能需要编写代码来定位并与其对等方重新集群。这些东西都不像监督树那样从 OTP 中解脱出来。

【讨论】:

  • 同意你的观点,我将补充一点,对于高可用性,有很多选择:安全级别、可扩展性、异构性、性能,我们使用 CAP 的哪一侧......不是确保通用解决方案可以适应所有可能性。
猜你喜欢
  • 1970-01-01
  • 2014-09-12
  • 2020-12-02
  • 2011-05-24
  • 2011-08-13
  • 2023-03-02
  • 2012-01-13
  • 2015-05-16
  • 2011-08-18
相关资源
最近更新 更多