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