azure-service-fabric - Service Fabric 集群中任何时候给定参与者的给定参与者 ID 的参与者实例的最大数量是多少?

标签 azure-service-fabric actor-model

我试图了解在给定服务结构集群中随时执行给定方法(在给定参与者接口(interface)上)的参与者 ID 实例的最大数量。这是我的例子:

  1. 假设我刚刚定义了一个名为 CustomerActor 的 actor 类,它派生自服务结构的 Actor 并实现了 ICustomerActor 接口(interface),该接口(interface)具有一个名为 Process 的方法。
  2. 假设我有一个客户端,它使用基于客户 ID 的 actorId 向 ICustomerActor.Process 方法发送消息。对于此示例,我的客户 ID 范围在 1 到 99 之间。因此我的参与者 ID 范围是 Customer/1 到 Customer/99。
  3. 假设 CustomerActor 配置为分区数 = 9,节点数 = 3,这意味着每个节点可能有 3 个分区。
  4. 假设客户 actorId 在所有分区中均匀分布,让我们假设分区 1 将服务于客户 ID 1 到 99/9 = 11,分区 2 将服务于客户 ID 12 到 22 等。
  5. 为了讨论的目的,我们假设集群运行良好且分布均匀,并且没有发生节点故障。
  6. 现在客户端突然开始为特定客户 ID(无论出于何种原因)发送多个请求(快速连续),例如 Customer/8,它位于分区 1 中,并假设集群当前仅服务于客户/8 个请求。
  7. 假设客户端刚刚发送了 20 个对 ID 为 Customer/8 的 actor 的请求。除了这个 customer actor id 之外,集群中没有其他流量。
  8. 假设客户端可以发送上述所有请求(客户端不会阻塞),因为我们在 CustomerActor 类中使用提醒,它会立即将控制权返回给客户端。

这是我的问题:

  1. 既然actor模型保证了单线程编程,那么整个集群中是否只有一个CustomerActor实例(映射到actor id:Customer/8)执行ICustomerActor.Process方法?如果是这样,这是否意味着最多可能有 19 个请求在排队(假设第一个请求尚未完成)?

  2. 或者是否会有 3 个 CustomerActor 实例(每个节点一个)(全部映射到参与者 ID:Customer/8)在整个集群中同时执行 ICustomerActor.Process 方法?如果是这样,这是否意味着最多可能有 19/3 的请求在排队(假设任何节点上的第一个请求尚未完成)?

  3. 或者是否会在整个集群中同时执行 ICustomerActor.Process 方法的 CustomerActor(全部映射到参与者 ID:Customer/8)的 9 个实例(所有节点的每个分区一个)?如果是这样,这是否意味着最多可能有 19/9 的请求在排队(假设任何分区上的第一个请求尚未完成)?

  4. 或者是否还有其他我没有考虑到的行为?

最佳答案

  1. 有一个 Actor 的一个实例,使用一个 ID。 Actor 访问确实是“单线程访问”,所以请求是排队的。 (这个答案就是它的工作原理)
  2. Actor 托管在 ActorService(有状态服务)中,该服务具有主要副本和次要副本。 Actor 本身没有主要/次要的概念。 ActorID 确定它所在的 ActorService 的分区。
  3. 数据跨服务分区进行分片,因此不会。

更多阅读:

关于azure-service-fabric - Service Fabric 集群中任何时候给定参与者的给定参与者 ID 的参与者实例的最大数量是多少?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38689446/

相关文章:

c# - 创建新的 Azure Service Fabric 有状态服务时出现异常

azure - 从另一个订阅的 OMS 中查看来自 Azure Service Fabric 的日志

akka - Akka 中受监督的 actor 应该直接接收消息还是通过其监督者接收消息?

azure - 在 Service Fabric 中,可靠队列仅适用于相同的服务类型吗?

azure-service-fabric - Azure Service Fabric 中的可靠 blob 状态?

azure - 将 Azure Service Fabric 服务映射到特定节点类型

uml - Akka 。如何在 UML 中说明参与者?

java - Actor 模型实现中的多个 Apache HTTP 客户端

erlang - 角色模型和碰撞检测