Akka.net 负载均衡和跨出处理

Akka.net load balancing and span out processing

我希望构建一个系统,该系统能够处理需要较长处理时间的请求流,比如每个请求 5 分钟。我的目标是以最少的资源足迹加速请求处理,这有时可能是一连串的消息。

我可以使用类似 service bus 的东西对请求进行排队,并有多个进程(a.k.a akka 中的 Actors)可以订阅消息并开始处理。也可以有一个看门狗来查看服务总线中的队列长度并创建更多的参与者/参与者系统或停止一些。

如果我想在 Actor 系统中做同样的事情,比如 Akka.net 如何做到这一点。像这样说:

这可以用 Akka.net 完成吗,或者这不是 actor 系统的有效用例。有人可以分享一些想法或指出我可以获得更多详细信息的资源吗?

虽然您可以使用 Akka 集群实现您的一些目标,但我不建议您那样做。根据您的要求,它清楚地表明您的关注点是:

  • 可靠的消息传递(服务总线和消息队列是更好的选择)。这里有很多解决方案,具体取决于您的需要,即 MassTransit、NServiceBus 或队列 (RabbitMQ)。
  • 扩展工作人员(这是基础设施问题,演员框架本身无法解决)。从你所说的,你甚至不需要集群。

您可以使用 akka 构建消息处理逻辑,例如 workers。但正如我所说,如果您的目标是替换现有的服务总线,则不需要它。

I may want to spin up/stop new Remote Actor systems based on my request queue length

Akka.Cluster 不支持开箱即用。您将不得不为它定制一些东西。

但是 Akka .NET 有 pool routers 可以根据可配置的参数自动调整大小。您也许可以围绕它们构建一些东西。

Send the message to any one of the available actor who can start processing without having to check who has the bandwidth to process on the sender side.

如果您查看 Akka .NET Routers,可以使用多种策略来分配工作。 SmallestMailbox 可能是最接近您所追求的。

Messages should not be lost, and if the actor fails, it should be passed to next available actor.

Akka .NET 支持至少一次交付。阅读更多相关信息 in the docs or at the Petabridge blog