Erlang 长生不老药二郎:有一种“长生不老药”吗;“合理的”;由主管处理的儿童数量限制?

Erlang 长生不老药二郎:有一种“长生不老药”吗;“合理的”;由主管处理的儿童数量限制?,erlang,elixir,otp,Erlang,Elixir,Otp,我正在使用Elixir,但我相信这个问题也适用于Erlang 我正在开发一个系统,它可以创建成千上万个相同类型的组和进程。每个小组将有2名工人和一名本地主管。问题是,谁将监督当地监管机构 我可以想象两种策略 一个大型主管,负责处理所有本地主管。这个方法很简单,但我相信,每当一个孩子身上发生了什么事情,这将是一个繁重的操作,主管将需要遍历其庞大的孩子列表 分隔的树。例如,一组中级主管负责管理大约1000名本地主管,然后由一名全球主管负责处理中级主管。要创建新组,全局主管需要找到子级最少的中间主管,

我正在使用Elixir,但我相信这个问题也适用于Erlang

我正在开发一个系统,它可以创建成千上万个相同类型的组和进程。每个小组将有2名工人和一名本地主管。问题是,谁将监督当地监管机构

我可以想象两种策略

  • 一个大型主管,负责处理所有本地主管。这个方法很简单,但我相信,每当一个孩子身上发生了什么事情,这将是一个繁重的操作,主管将需要遍历其庞大的孩子列表
  • 分隔的树。例如,一组中级主管负责管理大约1000名本地主管,然后由一名全球主管负责处理中级主管。要创建新组,全局主管需要找到子级最少的中间主管,并将创建工作委托给该主管

  • 要么有意义,要么有其他方法?欢迎任何建议

    这种方法非常有效。只要任何子组拥有自己的本地主管,并且后者不打算崩溃,全局主管就不需要遍历任何内容

    当叶工发生问题时,本地主管将负责重新启动叶工,而全局主管甚至不知道树下发生了错误

    如果,OTOH,您希望您的本地主管不时会故意崩溃,那么每个本地主管都应该由自己的(比如说)中间主管来监督,他们将负责重启。在这种情况下,全球主管将管理这些中级主管,一切都将恢复正常

    “视情况而定”

    “大名单”和“千人名单”实际上是在不同的领域。在现代机器上,简单的迭代速度很快。高达五项,低至六项,我会毫不犹豫地使用一个系统,该系统必须定期遍历一个如此大的列表,而且可能超过这个范围,我也不会真正关心:

    
    iex(2)>list=Enum.to_list 1..1_000_000;:timer.tc(fn->Enum.sum列表结束)
    {24497, 500000500000}
    

    (对于列表遍历和一些算法来说,这是25毫秒——如果崩溃的进程以如此小的延迟重新启动,我通常会感到高兴)

    当然-在一天结束时,您需要自己进行性能测试,将测试结果与预期的本地主管崩溃率进行比较,查找您的系统要求,并比较所有这些数字以得出答案

    同时,使用可能有效的最简单的方法:一个单一的全局主管监控一个扁平的层次结构。

    使用ETS模式,不必担心孩子的数量。 在ETS模式下,您也可以直接从表中读取有关儿童的信息