0

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

所以有些人RequestActor(我不确定,gRPC 可能根本没有这样的参与者)接收客户端请求,并将其转发给另一个ProcessingActorbyshardRegion以获取查询结果。

对此有两种选择:

  • tell图案
    shardRegion ! Request(raw_request, localRequestActor)

  • ask图案
    shardRegion ? raw_request pipeTo(localRequestActor)

我的问题是,

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

  2. 我知道与;ask相比有一些性能/资源影响。tell另一方面,ask提供了超时机制,我们必须自己用tell. 由于这是一个请求-响应交互,在我的情况下哪个是更好的选择?

谢谢!

4

1 回答 1

1

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

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

于 2019-09-17T13:27:05.480 回答