如果操作太多,可靠的Actors行为

时间:2016-05-14 11:17:37

标签: azure-service-fabric

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

  1. 在何处以及如何向所有人提出要求#34;受欢迎的"演员?
  2. 是请求的队列吗?如果是,如果演员失败了,这个队列会发生什么?

3 个答案:

答案 0 :(得分:3)

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

发送给actor的消息排队但不可靠。如果actor故障转移到另一个节点,则其队列将丢失。

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

答案 1 :(得分:1)

我会考虑将读写分解为不同的演员。通过这种方式阅读"流行"演员在执行写操作时永远不会被阻止。此外,如果您正在寻找排队的任何内容,听起来您希望排队的写入请求而不是任何读取请求(如果您的计划尚未完成)。

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

答案 2 :(得分:0)

当我们计划使用Azure存储队列时,我们可能会考虑使用云设计模式CQRS(命令查询责任隔离)。这样我们对演员最不感兴趣,因为我们设计更好的东西会很好。让我们说演员在队列中仍然保持着值,当它再次上升时,这将被处理。如果演员被撞,它会被处理,但它可能已经半熟了。所以我们不会立即删除队列消息,而是在一定时间内使其不可见。只有在成功处理后才会删除队列消息。

您可以自动扩展Service Fabric Cluster以处理更多负载。