Akka.net负载平衡和跨越处理

时间:2016-08-26 07:28:26

标签: akka akka.net

我希望构建一个能够处理需要长处理时间的请求流的系统,每个处理时间为5分钟。我的目标是以最小的资源占用来加速请求处理,有时可能是一连串的消息。

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

如果我想在Akka.net这样的Actor系统中做同样的事情,怎么做呢。说这样的话:

  • 我可能想根据请求队列长度启动/停止新的远程Actor系统

  • 将消息发送给可用的参与者中的任何一个,他们可以开始处理,而无需检查谁在发送方进行处理。

  • 不应丢失消息,如果actor失败,则应将其传递给下一个可用的actor。

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

2 个答案:

答案 0 :(得分:0)

虽然你可以通过Akka集群实现一些目标,但我不建议这样做。根据您的要求,它明确指出您的顾虑是针对:

  • 可靠的消息传递(服务总线和消息队列是更好的选择)。这里有很多解决方案,具体取决于您的需求,即MassTransit,NServiceBus或队列(RabbitMQ)。
  • 扩展工作者(这是基础设施问题,并且它不是由行为框架本身解决的)。根据你所说的,你甚至不需要群集。

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

答案 1 :(得分:0)

  

我可能想根据我的请求队列长度

启动/停止新的远程Actor系统

Akka.Cluster不支持开箱即用。你必须为它构建一些自定义的东西。

然而,Akka .NET有pool routers,它们可以根据可配置的参数自动调整大小。你或许能够围绕它们建立一些东西。

  

将消息发送给可以开始处理的任何一个可用的演员,而不必检查谁有带宽在发送方处理。

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

  

不应丢失消息,如果actor失败,则应将其传递给下一个可用的actor。

Akka .NET支持至少一次交付。详细了解in the docsat the Petabridge blog