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