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

Will Akka ShardRegion be a performance bottleneck if `ask` pattern is used instead of `tell`?

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

所以一些 RequestActor(也许根本没有这样的参与者使用 gRPC,我不确定)接收到客户端请求,并通过 shardRegion 将其转发给另一个 ProcessingActor查询结果。

有两种选择:

我的问题是,

  1. 由于所有请求都会通过shardRegionactor转发,所以如果我使用ask模式,shardRegionactor会不会成为性能瓶颈?或者shardRegion只是创建一个内部actor来处理future-promise的东西,一旦请求被转发,shardRegion就不再参与了?

  2. 我知道 asktell 相比有一些 performance/resource 的含义;另一方面,ask提供了超时机制,我们必须自己用tell来完成。由于这是一个请求-响应交互,在我的情况下哪个是更好的选择?

谢谢!

将 AskPattern 与分片区域参与者一起用作接收者时,您不会有任何额外的性能影响。因为处理 Ask 的 actor 是在您实例化 AskPattern 的机器/jvm 上创建的。分片区域 actor 不会知道它。

一般来说,出于性能原因,在 actor 中使用 tell 和内部超时处理是更好的做法。但是,如果性能对您来说不是问题,那么由于代码较少恕我直言,使用 AskPattern 是公平的。