Akka 演员优先级

2024-01-11

我有一个基于参与者的系统,它执行定期的、CPU 密集型数据摄取并为 RESTful 端点提供服务。我使用 Akka actor 来发出信号/控制摄取过程的各个阶段,并使用 Spray(当然是基于 Akka 构建的)来为我的宁静端点提供服务。

我的问题是这样的:当摄取开始时,它会消耗大部分 CPU,导致 RESTful 端点挨饿,直到完成为止。

降低摄取优先级的最佳方法是什么?目前,摄取模块和喷射模块共享相同的 ActorSystem,但如果这有助于解决方案,则可以将它们分开。


看来系统中的不同参与者需要生活在不同的调度程序中。为 CPU 密集型参与者创建一个新的调度程序,并将 Web 服务参与者保留在默认调度程序中(或者如果您认为合适,也可以将它们移动到另一个调度程序)

您可能想要调整新创建的调度程序 - 例如,如果您说您的摄取 Actor 执行计算密集型作业,您应该将调度程序的并行度降低到接近 1.0

将 Actor 系统分成不同的调度程序可以防止出现与您遇到的问题类似的问题 - 如果某些 Actor 开始占用底层线程,它们最终会使运行它们的调度程序饱和。通过将 Web Actor 放在另一个调度程序中,您可以限制 CPU 密集型 Actor 对系统其余部分的影响。这有点类似于这个概念“舱壁” http://en.wikipedia.org/wiki/Bulkhead_%28partition%29.

以下是有关 Akka 调度程序的更多信息:http://doc.akka.io/docs/akka/2.2.0/scala/dispatchers.html http://doc.akka.io/docs/akka/2.2.0/scala/dispatchers.html

要配置新的调度程序,还值得查看文档的配置部分:http://doc.akka.io/docs/akka/2.2.0/general/configuration.html http://doc.akka.io/docs/akka/2.2.0/general/configuration.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Akka 演员优先级 的相关文章

随机推荐