Reliable Actors 行为如果需要太多操作

Reliable Actors behavior if it takes too many operations

我是 Microsoft Azure Service Fabric 的新手。让我们假装我有一种在 SF 托管的社交网络。每个用户都是这个系统中的Actor。然后其中一些变得流行。我的意思是有很多人在观看一个受欢迎的人,在这种情况下,他的演员的许多输入写操作增加了一个观看次数计数器。这意味着当前 "popular" actor 的负载增加,他必须处理所有请求并且不会死掉。我的问题是:

  1. 在哪里以及如何向这个 "popular" 演员提出所有请求?
  2. 是请求队列吗?如果是,如果 actor 宕机,这个队列会发生什么?

我会考虑将读取和写入分解为不同的参与者。这样,在 "popular" actor 执行写操作时,它的读取将永远不会被阻塞。此外,如果您希望对任何内容进行排队,听起来您希望写入请求排队而不是任何读取请求(如果您还没有计划的话)。

至于队列,如果您使用的是 Azure 存储队列,轮询器可以从队列中提取消息,对于任何意外结果或错误,您可以考虑错误队列或毒队列。

当我们计划使用Azure Storage Queue时,我们可能会考虑使用Cloud Design Pattern CQRS (Command Query Responsibility Segregation)。这样我们就不会为 Actor 操心,当我们设计更好的东西时就会很好。假设 Actor 已下线,队列中仍保留该值,当它再次上线时,将对其进行处理。如果 Actor 崩溃,它正在被处理,它可能是半生不熟的。所以我们不会立即删除队列消息,而是让它在一段时间内不可见。只有在成功处理后才删除队列消息。

您还可以自动缩放 Service Fabric 群集以处理更多负载。

当红演员会成为瓶颈。 Actor 是单线程的,因此它一次只能处理一个请求。如果您需要处理对单个用户的并发请求,请直接使用 Reliable Services。

发送给参与者的消息已排队但不可靠。如果 actor 故障转移到另一个节点,它的队列就会丢失。

有关详细信息,请参阅此处有关并发的部分:https://azure.microsoft.com/en-us/documentation/articles/service-fabric-reliable-actors-introduction/