由于我们的无状态服务正在重新启动以进行azure运行时自动更新,因此我们的团队最近发生了一起事故。其中一项服务是在强制关闭任务时处理任务。这些任务可能需要4个小时。
通过代码或配置,有没有一种方法可以让Azure知道我们的服务很忙而且此时无法关闭?
换句话说,我们如何让Azure了解我们的服务何时可以进行服务结构运行时升级?
答案 0 :(得分:1)
首先,为什么不切换到手动升级模式?
其次,对于长时间运行的作业,您仍然需要考虑节点可能会失败,可以移动服务实例或更改角色。如果您不能很好地处理关机通知,所有这些类型的活动都将终止您的长期工作。
服务通过Service Fabric使用传递给RunAsync的CancellationToken表示它将被关闭等。以下是from the docs:
Service Fabric因各种原因更改了有状态服务的主节点。最常见的是群集重新平衡和应用程序升级。在这些操作期间(以及在正常服务关闭期间,就像您查看服务是否被删除一样),服务尊重CancellationToken非常重要。
不能彻底处理取消的服务可能会遇到几个问题。这些操作很慢,因为Service Fabric等待服务正常停止。
而this对RunAsync方法说的相同但有点短:
确保传递给RunAsync(CancellationToken)的cancellationToken受到尊重,一旦发出信号,RunAsync(CancellationToken)将尽快退出。
在您的情况下,您应该取消取消取消。您应该以某种方式存储当前作业的状态,以便下次调用RunAsync时可以恢复它。
如果它确实是一个长期运行的工作,无法通过任何方式中断和恢复,您应该考虑在可靠服务之外完成此工作,如Web作业或其他。或者接受某些工作可能会丢失。
换句话说,您无法告诉Service Fabric等待关闭您的服务。它也会破坏集群的平衡和可靠性。
答案 1 :(得分:0)
Durability tier特权允许Service Fabric暂停任何VM级别的基础架构请求(例如VM重新启动,VM重新映像或VM迁移)
青铜 - 没有特权。这是默认值。 银牌 - 基础架构作业可以暂停,每个UD持续10分钟。 黄金 - 每个UD可以暂停基础设施工作2小时。只能在D15_V2,G5等全节点VM skus上启用黄金耐久性。