为什么Elixir需要`Flow`?这不是由BEAM默认处理的吗?

时间:2016-10-06 14:04:54

标签: erlang elixir

在看到JoséValim关于Flow & GenStage的最后一次主题演讲后,我感到困惑,因为:
1)如果Flow& GenStage被添加到Elixir是因为改善并发真的很有意义;
2)另一方面,我认为Erlang / BEAM的关键优势之一是默认情况下并发/使用所有内核,开发人员不应该担心这一点。
那么,如果Flow & GenStage还没有(还)帮助运行在不同机器上的分布式系统,有人可以解释Flow和本机Erlang / BEAM并发之间的差异吗?

1 个答案:

答案 0 :(得分:7)

FlowGenStage解决了与并发性不同的问题。

分布式系统中经常发生的事情是,一旦您轻松并发,您最终会遇到“雷鸣般的群体”问题,其中单个流程或一小组流程成为系统中所有其他流程的瓶颈。该视频清楚地说明了这个问题。

https://youtu.be/8NPzLBSBzPI

FlowGenStage的关键概念是系统中的反压力,以防止传入的请求溢出到工作人员。这种背压概念允许您添加更多工人或减慢装配线。

这些模块试图概括每个足够大的BEAM应用程序遇到的自调度问题。这些想法已经有很多一次性的实现,以允许BEAM应用程序在面临大负载时优雅地失败。