【问题标题】:Stateful service on all cluster nodes所有集群节点上的有状态服务
【发布时间】:2016-07-01 16:25:54
【问题描述】:

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

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

我错过了什么?

【问题讨论】:

    标签: azure-service-fabric


    【解决方案1】:

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

    有状态服务的分区数不是动态的。它决定了数据如何跨节点分片。一旦您选择了 X 个分区,您就无法更改该数字,而无需自己处理对状态的影响。

    替代方法:

    您可以添加一个无状态服务(作为网关),在所有节点上运行它,然后从它们调用一个有状态服务的分区。

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 好的,我在这里看到了一个设计的种子。我想如果我改变你的想法,它会起作用。也就是说:我继续使用我的无状态服务,并创建一个新的有状态服务,它本质上只是我的数据存储。我从我的无状态服务中调用它来读取/写入我想要在本地持久/共享的数据。这对我来说感觉有点矫枉过正,因为我基本上只是将一些可靠的字典读/写调用包装在一个有状态服务中,该服务只存在为无状态服务提供数据,但它应该可以工作并允许我的无状态 WebApi 开启所有节点。
      猜你喜欢
      • 1970-01-01
      • 2019-01-27
      • 2014-10-11
      • 1970-01-01
      • 2014-04-04
      • 1970-01-01
      • 2017-06-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多