【发布时间】:2016-07-01 16:25:54
【问题描述】:
这感觉像是一个显而易见的问题,但答案暗示了我。如何指示我想要集群中所有节点上的有状态服务实例?使用无状态服务就像使用 -1 作为实例计数一样简单,但有状态服务不支持。
我正在将我现有的无状态 webapi 服务转移到有状态,以便我可以将我对 Redis 缓存的使用替换为可靠的字典。因为它是一个在外部可见并且在天蓝色负载均衡器前面的服务,所以我需要在所有实例上运行该服务。
我错过了什么?
【问题讨论】:
这感觉像是一个显而易见的问题,但答案暗示了我。如何指示我想要集群中所有节点上的有状态服务实例?使用无状态服务就像使用 -1 作为实例计数一样简单,但有状态服务不支持。
我正在将我现有的无状态 webapi 服务转移到有状态,以便我可以将我对 Redis 缓存的使用替换为可靠的字典。因为它是一个在外部可见并且在天蓝色负载均衡器前面的服务,所以我需要在所有实例上运行该服务。
我错过了什么?
【问题讨论】:
无状态实例可以有 -1,因为它们可以在不影响状态的情况下创建和销毁。
有状态服务的分区数不是动态的。它决定了数据如何跨节点分片。一旦您选择了 X 个分区,您就无法更改该数字,而无需自己处理对状态的影响。
替代方法:
您可以添加一个无状态服务(作为网关),在所有节点上运行它,然后从它们调用一个有状态服务的分区。
对有状态服务进行分区将提高可扩展性。例如,您可以在用户组/租户/订阅级别等上进行分区。
【讨论】:
由于它是有状态的,因此只有一个节点/VM 将被分配到集群中的主副本和两个辅助副本。主节点将维护对可靠字典/队列的读/写并更新副本(事务)。这就是它如何保持数据的可靠性、可用性和持久性。然后,您可以从有状态服务调用无状态服务来处理这些数据。您可以让所有状态服务(部署在集群中的所有节点/VM 中)执行/处理这些数据。
【讨论】: