【问题标题】:Azure Cloud-Service OnStopAzure 云服务 OnStop
【发布时间】:2024-01-09 18:49:01
【问题描述】:

我使用 Azure 云工作者角色来处理来自队列的传入任务。每个任务的处理可能需要几个小时,每个工作角色最多可以同时处理 N 个任务。基本上,它正在工作。

现在,您可以在documentation 中看到不时可以关闭辅助角色(用于软件更新、操作系统升级等)。基本上,没问题。但是,此计划中的关闭无法强制停止已在运行的工作角色

预期:

环境调用OnStop()方法时:

  1. 辅助角色将停止获取新任务进行处理。
  2. 等待正在运行的任务完成。
  3. 继续按计划关机。

实际:

OnStop() 方法最多可被阻止 5 分钟。我不能保证我会在 5 分钟内完成任务的处理 - 所以,这是个问题……我的任务在处理过程中被终止,这对我的软件来说变得不稳定。

我该如何避免这 5 分钟的限制?欢迎任何提示。

【问题讨论】:

    标签: c# azure azure-worker-roles azure-cloud-services


    【解决方案1】:

    我该如何避免这 5 分钟的限制?

    很遗憾,你不能。这是 Azure 方面施加的硬性限制。您需要解决这个问题。

    我能想到两种可能的解决方案,它们都需要您重新考虑当前的架构:

    1. 将您的一项大任务分解为许多小任务并创建某种工作流程。
    2. 使您的任务具有幂等性,这样即使它在两者之间终止(由于工作角色关闭或任务本身的错误),当它被另一个实例拾取时,它也会以这样一种方式重新启动,即您的输出任务未损坏。

    【讨论】:

      【解决方案2】:

      不,您不能绕过此限制。通常,您不应依赖任何长时间连续运行的实例。实例可能会突然停止或突然消失(由于底层服务器故障)。您的软件应该被设计成当一个实例重新启动(可能重新部署)或某个其他实例找到容量来获取先前发布的工作项时,重新处理该工作项而不会产生任何不利影响。

      【讨论】: