升级未能兑现取消令牌的 Service Fabric 服务
Upgrade Service Fabric Service that Fails to Honor Cancellation Token
我在 Service Fabric 集群中有一个有状态服务 运行,我现在知道它无法兑现传递给它的取消令牌。我的错。
我已准备好发布修复程序,但在升级过程中,我预计故障主节点上的服务副本会卡住,因为它不会接受传入的令牌。
我可以使用 Restart-ServiceFabricDeployedCodePackage
甚至 Restart-ServiceFabricNode
手动删除卡住的副本,但这会导致升级过程中出现短暂的服务中断。
有没有办法在零停机时间的情况下发布此修复程序?
这对于使用 Service Fabric 基础结构的有状态服务是不可能的,您需要在升级时停机。一旦你有一个支持取消令牌的版本,你就会没事的。
也就是说,根据状态的使用情况,如果您的客户端和服务之间有一个负载均衡器,您可以在新的固定版本上建立另一个服务实例,并使用负载均衡器来耗尽您的资源到新版本的流量,升级旧版本,再回到旧版本,然后删除您创建的第二个服务。这将允许零停机情况。
我能想到的唯一解决方法更糟糕,因为它们会在升级期间关闭部分健康检查并 "force" 关闭过程。这不会让事情变得更优雅或减少停机时间,并且有可能导致其他健康问题被忽略的副作用。
总是有一些停机时间,即使是完全滚动升级,因为将主节点交换到另一个节点永远不会是即时的,调用者需要发现新位置。使用这些命令,您只是将更优雅的关闭和清理转换为失败,从而导致相同的主交换。应该不会有太大差异,因为客户(和 SF)无论如何都必须正常处理故障。
我会继续使用这些命令,因为它们可以让您很好地手动控制 replicas/processes 在遇到问题时戳哪个。
我在 Service Fabric 集群中有一个有状态服务 运行,我现在知道它无法兑现传递给它的取消令牌。我的错。
我已准备好发布修复程序,但在升级过程中,我预计故障主节点上的服务副本会卡住,因为它不会接受传入的令牌。
我可以使用 Restart-ServiceFabricDeployedCodePackage
甚至 Restart-ServiceFabricNode
手动删除卡住的副本,但这会导致升级过程中出现短暂的服务中断。
有没有办法在零停机时间的情况下发布此修复程序?
这对于使用 Service Fabric 基础结构的有状态服务是不可能的,您需要在升级时停机。一旦你有一个支持取消令牌的版本,你就会没事的。
也就是说,根据状态的使用情况,如果您的客户端和服务之间有一个负载均衡器,您可以在新的固定版本上建立另一个服务实例,并使用负载均衡器来耗尽您的资源到新版本的流量,升级旧版本,再回到旧版本,然后删除您创建的第二个服务。这将允许零停机情况。
我能想到的唯一解决方法更糟糕,因为它们会在升级期间关闭部分健康检查并 "force" 关闭过程。这不会让事情变得更优雅或减少停机时间,并且有可能导致其他健康问题被忽略的副作用。
总是有一些停机时间,即使是完全滚动升级,因为将主节点交换到另一个节点永远不会是即时的,调用者需要发现新位置。使用这些命令,您只是将更优雅的关闭和清理转换为失败,从而导致相同的主交换。应该不会有太大差异,因为客户(和 SF)无论如何都必须正常处理故障。
我会继续使用这些命令,因为它们可以让您很好地手动控制 replicas/processes 在遇到问题时戳哪个。