所有群集节点上的有状态服务

时间:2016-06-30 20:25:11

标签: azure-service-fabric

这感觉就像一个明显的问题,但答案却暗指我。如何在群集中的所有节点上指示我想要有状态服务的实例?对于无状态服务,它就像使用-1作为实例计数一样简单,但有状态不支持。

我正在将现有的无状态webapi服务移动到有状态,以便我可以将Redis缓存的使用替换为可靠的字典。因为它是在外部和天蓝色负载均衡器前面可见的服务,所以我需要在所有实例上运行服务。

我错过了什么?

2 个答案:

答案 0 :(得分:1)

由于它是有状态的,因此只有一个节点/ VM将在群集中分配一个主节点和两个辅助副本。主要将维护对可靠字典/队列的读/写并更新副本(事务)。这就是它如何维护数据的可靠性,可用性和持久性。从状态服务中,您可以调用无状态服务来处理这些数据。您可以拥有所有状态服务(部署在集群中的所有节点/ VM中)来执行/处理这些数据。

答案 1 :(得分:1)

无状态实例可以为-1,因为可以在不影响状态的情况下创建和销毁它们。

有状态服务的分区数不是动态的。它确定如何跨节点分片数据。一旦选择了X分区,就不能在不必自己处理对状态的影响的情况下更改该数字。

替代方法:

您可以添加无状态服务(作为网关),在所有节点上运行该服务,并从中调用statefull服务的分区。

对有状态服务进行分区将提高可伸缩性。您可以在用户组/租户/订阅级别等上进行分区。