Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 如何处理演员的突发事件?_Scala_Concurrency_Akka_Actor - Fatal编程技术网

Scala 如何处理演员的突发事件?

Scala 如何处理演员的突发事件?,scala,concurrency,akka,actor,Scala,Concurrency,Akka,Actor,假设我有一个actor,它每秒处理X请求。平均来说还可以,但有时会出现突发,客户端每秒发送Y>X请求。还假设所有请求都有超时,因此它们不能永远在队列中等待 假设我们使用Scala和Akka编程,那么让参与者处理这些突发事件的最佳实践/设计模式是什么?是否有处理突发事件的代码示例 只要您的机器能够处理增加的负载(即有足够的CPU),那么我建议使用路由器将参与者集中起来。从您的示例听起来,动态调整大小的路由器可能是最合适的,但即使是标准的循环或最小的邮箱也可能足够了。下面是Akka文档中路由器部分的

假设我有一个actor,它每秒处理
X
请求。平均来说还可以,但有时会出现突发,客户端每秒发送
Y>X
请求。还假设所有请求都有超时,因此它们不能永远在队列中等待


假设我们使用Scala和Akka编程,那么让参与者处理这些突发事件的最佳实践/设计模式是什么?是否有处理突发事件的代码示例

只要您的机器能够处理增加的负载(即有足够的CPU),那么我建议使用
路由器将
参与者
集中起来。从您的示例听起来,动态调整大小的路由器可能是最合适的,但即使是标准的循环或最小的邮箱也可能足够了。下面是Akka文档中路由器部分的链接。我希望这有帮助

<>您也可以考虑将演员分布在多个节点上,但这可能会对您的场景造成过度的影响。如果您对这种方法感兴趣,请让我知道,我可以发布更多关于这种方法的内容

现在,当你集中了演员,但系统仍然被积压时,该怎么办,这真的取决于你,但这里有一些选择。如果您能够处理突发事件导致的延迟偶尔增加,那么什么也不做。演员们的邮箱将得到一点备份,但一旦爆炸缓解,他们将立即清除。如果没有,那么问题是当参与者被积压时如何处理传入的消息。如果您希望在这种情况下快速失败,并且不接受邮件,则可能需要使用有界邮箱()进行查看。当邮箱达到其大小限制并且无法再对邮件排队时,调用者将无法发送邮件(我认为)。这并不可怕,但至少会使系统更快地稳定下来


我假设您正在执行
ask(?)
(即请求/响应),因此当您执行此操作时,您将获得
未来
。如果未及时收到响应,则
Future
将超时(使用隐式定义的超时值),因此在突发期间,连接到对积压参与者的调用的未来将刚刚开始超时;他们不会永远被困在那里。

谢谢。我会考虑路由器。分布式(远程)参与者不在我的范围内。现在假设机器过载,没有更多的机器。如何正确处理突发事件?添加了更多信息。希望这能有所帮助。如果没有,请告诉我。这里有一篇关于限制演员的有趣文章。我认为这与这次讨论有关。什么将参与者限制为每秒X个请求?