0

我们的团队最近发生了一起事件,原因是我们的无状态服务被重新启动以进行 azure 运行时自动更新。其中一项服务在强制关闭时正在处理任务。这些任务可能需要长达 4 小时。

无论是通过代码还是配置,有没有办法让 Azure 知道我们的服务很忙,不能像这次那样关闭?

换句话说,我们如何让 Azure 知道我们的服务何时准备好进行 Service Fabric 运行时升级?

4

2 回答 2

1

那么首先,你为什么不切换到手动升级模式呢?

其次,对于长时间运行的作业,您仍然必须考虑节点可能会发生故障,服务实例可以移动或更改角色。如果您不能很好地处理关机通知,所有这些类型的事件都会终止您长期运行的工作。

Service Fabric 通过使用传递给 RunAsync 的 CancellationToken 向服务发出信号,表明它将被关闭等。以下内容来自文档

Service Fabric 出于多种原因更改有状态服务的主节点。最常见的是集群再平衡和应用程序升级。在这些操作期间(以及在正常服务关闭期间,例如您会看到服务是否被删除),服务尊重 CancellationToken 很重要。

不干净地处理取消的服务可能会遇到几个问题。这些操作很慢,因为 Service Fabric 等待服务正常停止。

这对 RunAsync 方法说的相同但更短

确保传递给 RunAsync(CancellationToken) 的 cancelToken 得到兑现,一旦发出信号, RunAsync(CancellationToken) 就会尽快正常退出。

在您的情况下,您应该对被取消的 CancellationToken 采取行动。您应该以某种方式存储当前作业的状态,以便在下次调用 RunAsync 时恢复它。

如果它确实是一项长期运行的工作,不能以任何方式中断和恢复,你应该考虑在可靠服务之外完成这项工作,比如 Web 工作或其他东西。或者接受一些工作可能会丢失。

换句话说,您不能告诉 Service Fabric 等待关闭您的服务。它也会破坏集群的平衡和可靠性。

于 2018-06-07T20:53:15.023 回答
0

https://docs.microsoft.com/en-us/azure/service-fabric/service-fabric-cluster-capacity#the-durability-characteristics-of-the-cluster

持久层特权允许 Service Fabric 暂停任何 VM 级别的基础结构请求(例如 VM 重新启动、VM 重新映像或 VM 迁移)

青铜 - 没有特权。这是默认设置。银牌 - 每个 UD 可以暂停基础结构作业 10 分钟。金牌 - 每个 UD 可以暂停基础设施作业 2 小时。只能在 D15_V2、G5 等全节点 VM sku 上启用黄金持久性。

https://docs.microsoft.com/en-us/dotnet/api/microsoft.azure.management.servicefabric.models.nodetypedescription.durabilitylevel?view=azure-dotnet

于 2018-06-16T06:19:36.587 回答