我有一组有点无状态并执行类似任务的演员。 这些工人中的每一个都不可靠并且可能性能低下。在我的设计中 - 我可以轻松地产生更多的演员来取代懒惰的演员。
演员的表现是自己评估的。是否有办法让主管/演员池进行此评估,以帮助确定哪些工作人员足够慢以便我更换?或者是我目前的战略""正确的策略?
答案 0 :(得分:1)
问题是 - 为什么你的一些工人表现不好?它们之间有什么区别(我假设没有)。如果没有,也许某些有效载荷只需要其他有效载荷 - 那么终止它们的目的是什么呢?
一旦我们遇到类似问题 - 并使用SmallestMailboxRoutingLogic。它主要尝试根据邮箱大小分配工作负载。
无论如何,我宁愿尝试回答这个问题 - 为什么有些工人不稳定而且表现不佳 - 因为这看起来像是你试图在其他地方覆盖的最大问题。
答案 1 :(得分:1)
我自己是akka的新手,所以只是试图帮助,但我的攻击将是以下几点:
编写自己的路由逻辑,类似于以下几行https://github.com/akka/akka/blob/v2.3.5/akka-actor/src/main/scala/akka/routing/SmallestMailbox.scala请记住,为每个池创建了一个新实例,因此每个实例都可以存储有关已经处理了多少消息的信息。演员到目前为止。在这种情况下,一旦你发现一个表演者表现不佳,就把它标记为“可移动的”' (一旦它不再处理任何新消息)在单独的数据结构中并停止发送更多消息。
编写自己的路由器池:覆盖createRouterActor https://github.com/akka/akka/blob/v2.3.5/akka-actor/src/main/scala/akka/routing/RouterConfig.scala:236以提供自己的CustomRouterPoolActor
沿着以下行写下CustomRouterPoolActor:https://github.com/akka/akka/blob/8485cd2ebb46d2fba851c41c03e34436e498c005/akka-actor/src/main/scala/akka/routing/Resizer.scala(参见ResizablePoolActor)。此actor可以访问您的策略实例。从此策略实例中删除已标记为要删除的路由。查看ResizablePoolCell以了解如何删除actor。