【问题标题】:Service fabric Stateful service - Scaling without partitioning?服务结构有状态服务 - 无需分区即可扩展?
【发布时间】:2018-08-30 05:14:05
【问题描述】:

我计划分三步将我现有的云整体式 Restful Web API 服务迁移到 Service Fabric。 我的云服务中大量使用了内存缓存(处理中)。

步骤 1) 将云服务迁移到具有 1 个副本和单个分区的 SF 有状态服务。缓存代码保持原样。不使用可靠的集合。

第 2 步) SF Monolithic 有状态服务水平扩展至 5 个副本和单个分区。缓存代码修改为使用可靠集合。

第 3 步) 将 SF 单体服务分解为微服务(无状态/有状态)

上述方法更干净吗?有什么推荐吗。?有什么缺点吗?

更多关于第 2 步)SF 有状态服务的水平扩展

  • 我不打算使用 SF 分区策略,因为我无法在我的应用程序中考虑统一的数据分布。
  • 通过添加更多副本并且不使用 SF 有状态服务进行分区,我只是让我的服务更加可靠(可用性)。我的理解正确吗?
  • 我将修改缓存代码以使用可靠集合 - 字典。所有副本都将提供相同的状态数据。
  • 我知道 GET 可以在任何副本上执行,但更新/写入需要在主副本上执行?
  • 如何在不分区的情况下扩展我的 SF 有状态服务?
  • 所有副本(包括辅助副本)都可以监听我的客户端请求并做出相同的响应吗? GET 应该能够执行,PUT 和 POST 调用如何工作?

  • 在这一步我是否应该更喜欢使用外部缓存存储 (Redis) 而不是 Reliable 收集?使用无状态服务?

【问题讨论】:

  • 我在使用顺丰一年后的建议是.. 除非你有足够的资源和一个非常有能力的团队,否则不要。作为一个平台,它太不成熟了,而且对于很多应用程序来说都太过分了。慢慢来。启动您的应用程序的两个实例并将它们放在负载均衡器后面。看看结果如何,然后看看将一些热读取数据移动到 redis。 Fwiw 可靠的集合比 P 更 CA。使用 SF 只是为了利用分布式字典作为缓存,imo 有点糟糕的选择
  • 另一个问题:为什么你的 REST api 是有状态的?
  • 谢谢马尔多克斯。 REST API 是无状态的。但是我们已经使用进程内缓存(内存缓存)来处理热数据以减少数据延迟。您说得对,我们计划使用分布式字典作为缓存来存储进程内缓存数据。

标签: azure azure-service-fabric service-fabric-stateful


【解决方案1】:

This document 很好地概述了在 Service Fabric 中扩展特定工作负载的选项以及您希望何时使用每个选项的一些示例。

选项 2(动态或预先创建更多服务实例)听起来可以很好地映射到您的工作负载。您决定使用自定义有状态服务作为缓存还是使用外部存储取决于以下几点:

  • 您的主计算机中是否有空间来存储缓存数据
  • 您的服务是否可以摆脱简单的缓存,或者它是否需要其他缓存服务提供的更高级功能
  • 您的服务是否需要在与 Web 层相同的一组节点中提高缓存的性能,或者它是否有能力在延迟方面调用远程服务
  • 您是否有能力为缓存服务付费,或者您是否希望使用已经为虚拟机付费的内存、计算和本地存储。
  • 您是否真的想要构建和运行自己的缓存

回答您的其他一些问题:

  • 是的,添加更多副本会提高可用性/可靠性,而不是扩展。事实上,它会对性能(写入)产生负面影响,因为必须将更改写入更多副本。
  • 不能保证所有副本中的状态数据都相同,只是大多数副本。一些辅助节点甚至可能领先,这就是不鼓励从辅助节点读取数据的原因。
  • 因此,对于您的下一个问题,建议始终针对主节点执行所有读取和写入操作,以便您看到一致的仲裁提交数据。

【讨论】:

  • “建议始终针对主节点执行读写操作”。这将是至少读取的限制,因为我们需要在访问缓存对象时执行进程间调用。
  • 如果您对数据进行分区,那么每个分区将有一个主节点,这将增加吞吐量并且您可以避免二次读取
  • @Diego Right,或者因为他不想使用分区(因为它强制统一密钥分配),只需创建更多服务并按照您的想法分配调用。前面还有一些工作要做,但结果并没有太大的不同。
  • @masnider 是否有任何配置来定义复制的最小法定人数?例如:我有 10 个副本,一旦完成至少 5 个副本,我不想让它提交?
  • 没有。只在今天是多数。
猜你喜欢
  • 2016-08-04
  • 1970-01-01
  • 1970-01-01
  • 2016-12-04
  • 2017-05-23
  • 2016-10-12
  • 1970-01-01
  • 1970-01-01
  • 2018-07-25
相关资源
最近更新 更多