我们有三个组件(A、B和C)。"A"将数据发送到"B","B"使用play WS处理数据并将其发布到"C"。我们遇到了"C"处理数据速度慢的情况,在"B"中会发生超时。但"B"中有大量数据向内流动,并不断将其发布到"C",导致整个系统内存不足,最终崩溃。有没有办法限制"B"中WS请求的数量?搜索了播放WS API,但没有运气。应该如何处理?请提出建议。
问题不在于最大连接数,也不在于任何其他与api相关的东西。这个问题在分布式系统中很常见,并被命名为"快速生产者和慢速消费者"。还有更多的解决方案,我可以在这里写,但简短的列表是:
- 消息队列(有关ActiveMQ,请参阅慢速使用者处理)
- BackPressure(这是一种可以用一句话来解释的方法;"生产者只在消费者要求时发送数据",BTW,Akka Streams以一种优雅的方式提供了这种方法)
- 缩放(如果您想让系统更快,最直接的方法就是增加消费者的数量和他们之间的负载平衡请求,或者让消费者更快)
编辑:根据文档,您可以为客户端库设置每个主机或总连接的最大值,正如我上面提到的,正确的方法是改进体系结构,但这也可能有助于节省时间。还要检查reference.conf中的所有配置选项。
考虑Akka和一些节流算法:http://letitcrash.com/post/28901663062/throttling-messages-in-akka-2