如果使用“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
查询结果。
有两种选择:
tell
模式
shardRegion ! Request(raw_request, localRequestActor)
ask
模式
shardRegion ? raw_request pipeTo(localRequestActor)
我的问题是,
由于所有请求都会通过shardRegion
actor转发,所以如果我使用ask
模式,shardRegion
actor会不会成为性能瓶颈?或者shardRegion
只是创建一个内部actor来处理future-promise的东西,一旦请求被转发,shardRegion
就不再参与了?
我知道 ask
与 tell
相比有一些 performance/resource 的含义;另一方面,ask
提供了超时机制,我们必须自己用tell
来完成。由于这是一个请求-响应交互,在我的情况下哪个是更好的选择?
谢谢!
将 AskPattern 与分片区域参与者一起用作接收者时,您不会有任何额外的性能影响。因为处理 Ask 的 actor 是在您实例化 AskPattern 的机器/jvm 上创建的。分片区域 actor 不会知道它。
一般来说,出于性能原因,在 actor 中使用 tell 和内部超时处理是更好的做法。但是,如果性能对您来说不是问题,那么由于代码较少恕我直言,使用 AskPattern 是公平的。
我是Akka新手,想通过Akka gRPC和cluster sharding创建一个分布式服务,为客户端提供数据检索服务。
所以一些 RequestActor
(也许根本没有这样的参与者使用 gRPC,我不确定)接收到客户端请求,并通过 shardRegion
将其转发给另一个 ProcessingActor
查询结果。
有两种选择:
tell
模式
shardRegion ! Request(raw_request, localRequestActor)
ask
模式
shardRegion ? raw_request pipeTo(localRequestActor)
我的问题是,
由于所有请求都会通过
shardRegion
actor转发,所以如果我使用ask
模式,shardRegion
actor会不会成为性能瓶颈?或者shardRegion
只是创建一个内部actor来处理future-promise的东西,一旦请求被转发,shardRegion
就不再参与了?我知道
ask
与tell
相比有一些 performance/resource 的含义;另一方面,ask
提供了超时机制,我们必须自己用tell
来完成。由于这是一个请求-响应交互,在我的情况下哪个是更好的选择?
谢谢!
将 AskPattern 与分片区域参与者一起用作接收者时,您不会有任何额外的性能影响。因为处理 Ask 的 actor 是在您实例化 AskPattern 的机器/jvm 上创建的。分片区域 actor 不会知道它。
一般来说,出于性能原因,在 actor 中使用 tell 和内部超时处理是更好的做法。但是,如果性能对您来说不是问题,那么由于代码较少恕我直言,使用 AskPattern 是公平的。