Elixir - Erlang:有没有合理的"由主管处理的儿童限额?

时间:2018-03-31 04:42:40

标签: erlang elixir otp

我正在与Elixir合作,但我相信这个问题也适用于Erlang。

我正在研究一个可能会创建数十万个相同类型的群组流程的系统。每个小组将有2名工人和一名本地监督员。问题是谁将监督当地的监管人员?

我可以想象两种策略

  1. 一名主管,负责处理所有当地主管。这种方法很简单,但我相信,只要孩子遇到重大操作,主管就需要遍历其庞大的孩子名单。
  2. 分区树。比如说一组中间监督员监督大约1000名当地监督员,然后是一名全球监督员处理中间监督员。要创建一个新组,全局主管将需要找到具有最少子项的中间主管,并将该委托委托给该组。
  3. 要么有意义还是有其他方法?欢迎任何建议

3 个答案:

答案 0 :(得分:3)

"它取决于"。

"巨大的清单"和#"数千"真的是在不同的领域。现代机器上的简单迭代 fast 。高达五个,低六个项目我不会有任何疑虑,系统经常必须遍历这个大小的列表,并且可能超过我不太关心的那个:

li

(列表遍历为25毫秒,有些算术 - 如果崩溃的进程以如此小的延迟重新启动,我通常会很高兴)

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

与此同时,使用最简单的方法:监控平面层次结构的单个全局主管。

答案 1 :(得分:0)

方法之一非常有效。只要任何子组拥有自己的本地主管,全局主管就不需要遍历任何内容,后者它不打算崩溃。 / p>

当叶子工作人员发生某些事情时,这个本地主管会注意重新启动它,全局主管甚至不会知道那里发生了错误在树下。

如果,OTOH,您希望您的本地主管有时会故意崩溃,那么每个本地主管都应该用它自己的监督,比如说,中级主管,负责重启。在这种情况下,全局主管将管理这些中间主管,一切都会再次变得很酷。

答案 2 :(得分:0)

在ETS模式下使用director并且不用担心孩子的数量。 在ETS模式下,您也可以直接从Table中阅读有关儿童的一些信息。