如果使用'ask'模式而不是'tell',Akka ShardRegion是否会成为性能瓶颈?

如果使用'ask'模式而不是'tell',Akka ShardRegion是否会成为性能瓶颈?,akka,akka-cluster,akka-grpc,Akka,Akka Cluster,Akka Grpc,我是Akka的新手,我想通过Akka gRPC和cluster sharding创建一个分布式服务,它为客户端提供数据检索服务 因此,一些RequestActor(我不确定gRPC中可能根本没有这样的actor)接收到一个客户端请求,并通过shardRegion将其转发给另一个ProcessingActor,以获得查询结果 有两种选择: tellpattern shardRegion!请求(原始请求,localRequestActor) askpattern shardRegion?原始请求管

我是Akka的新手,我想通过Akka gRPC和cluster sharding创建一个分布式服务,它为客户端提供数据检索服务

因此,一些
RequestActor
(我不确定gRPC中可能根本没有这样的actor)接收到一个客户端请求,并通过
shardRegion
将其转发给另一个
ProcessingActor
,以获得查询结果

有两种选择:

  • tell
    pattern
    shardRegion!请求(原始请求,localRequestActor)

  • ask
    pattern
    shardRegion?原始请求管道(localRequestActor)

我的问题是,

  • 由于所有请求都将通过
    shardRegion
    actor转发,因此如果我使用
    ask
    模式,那么
    shardRegion
    actor是否会成为性能瓶颈?或者,
    shardRegion
    只是创建一个内部参与者来处理未来的承诺内容,一旦请求被转发,
    shardRegion
    将不再参与

  • 我知道与
    tell
    相比,在
    ask
    中有一些性能/资源含义;另一方面,
    ask
    提供了超时机制,我们必须通过
    tell
    自己完成。因为这是一个请求-响应交互,在我的例子中,哪一个是更好的选择


  • 谢谢

    将AskPattern与shard region参与者一起用作收件人时,不会产生任何额外的性能影响。因为处理Ask的参与者是在您实例化AskPattern的机器/jvm上创建的。碎片区域参与者不会知道这件事


    一般来说,出于性能原因,最好在参与者中使用tell和内部超时处理。但如果性能不是您的问题,那么使用AskPattern是公平的,因为IMHO的代码更少

    因此,对于
    tell
    ask
    shardRegion
    参与者的行为基本相同,比如转发消息和忘记?因此,
    shardRegion
    在处理许多
    任务时不会成为瓶颈
    ?@user650167-没有一个shardRegion本身不知道该任务,因此没有问题。ShardRegion的演员只会将消息转发给正确的shard。