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