在看到JoséValim关于Flow & GenStage
的最后一次主题演讲后,我感到困惑,因为:
1)如果Flow& GenStage被添加到Elixir是因为改善并发真的很有意义;
2)另一方面,我认为Erlang / BEAM的关键优势之一是默认情况下并发/使用所有内核,开发人员不应该担心这一点。
那么,如果Flow & GenStage
还没有(还)帮助运行在不同机器上的分布式系统,有人可以解释Flow
和本机Erlang / BEAM并发之间的差异吗?
答案 0 :(得分:7)
Flow
和GenStage
解决了与并发性不同的问题。
分布式系统中经常发生的事情是,一旦您轻松并发,您最终会遇到“雷鸣般的群体”问题,其中单个流程或一小组流程成为系统中所有其他流程的瓶颈。该视频清楚地说明了这个问题。
Flow
和GenStage
的关键概念是系统中的反压力,以防止传入的请求溢出到工作人员。这种背压概念允许您添加更多工人或减慢装配线。
这些模块试图概括每个足够大的BEAM应用程序遇到的自调度问题。这些想法已经有很多一次性的实现,以允许BEAM应用程序在面临大负载时优雅地失败。