【问题标题】:Is there a hard limit on how long Azure role startup can take?Azure 角色启动需要多长时间是否有硬性限制?
【发布时间】:2011-09-09 02:06:21
【问题描述】:

假设我在我的 Azure 角色中包含一个运行时间相当长的 startup task - 运行时间长达几分钟。如果启动任务运行“过长”会发生什么。

我目前正在 Compute Emulator 上进行测试并观察以下内容。

我有一个 450 兆字节的 .zip 文件和Info-Zip unzip。启动任务解压缩存档。部署开始,我查看任务管理器。启动多个服务进程,然后运行 ​​unzip.exe。大约两分钟后,所有这些进程停止,然后重新启动,unzip.exe 再次启动。

所以看起来一个部署被允许运行大约两分钟,然后被强制重置并重新启动。

这是预期的行为吗?它是否存在于真正的云上?角色启动需要多长时间是否有硬性限制?除了将解包移到 RoleEntryPoint.OnStart() 之外,我该如何解决这种情况?

【问题讨论】:

    标签: windows deployment azure cloud


    【解决方案1】:

    我有同样的问题,所以尝试了一个实验。我运行了一个启动任务 - taskType="simple" 这样它会阻止角色开始执行 - 并让它运行 50 小时。 Fabric Controller 没有抱怨,门户也没有显示任何错误。在 50 小时结束后,它完成了漫长的“什么都不做”循环,然后此启动任务退出,我的 Web 角色启动正常。

    所以我的经验测试表明启动任务可能需要很长时间! 至少 50 小时。

    【讨论】:

      【解决方案2】:

      【讨论】:

      • 如何从启动任务中调用该方法?
      • 我认为 SetBusy 方法不适用于启动任务。如果您的 RoleEntryPoint 代码(例如 Run 方法)正在做一些耗时的事情并且不希望 Fabric Controller 认为它已挂起,那么您可以将 SetBusy 与您的角色一起使用。如果您正在使用 taskType="simple" 启动任务(在调用 OnStart 之前运行完成的那种),那么负载均衡器无论如何都不会向您发送流量。而且,如果您使用其他启动任务类型(后台或前台),它们将独立于您的 OnStart 和 Run 方法运行。
      【解决方案3】:

      我已经运行了很长时间(想想 20-30 分钟)的启动任务,并且该角色只是处于“忙碌”状态。我认为只要 Startup 任务仍在执行并且没有以非零返回码退出,角色将保持该状态多长时间没有硬性限制(事实上,这对大多数人来说是一个陷阱弹出提示时首次启动任务创建者)。 FC 在技术上仍然运行良好,因此没有理由“恢复”角色(即心跳仍在继续)。

      开发模拟器只会在角色尚未启动时发出通知并发出警告。如果单击“继续等待”选项,它将继续运行启动任务以完成。云当然不会这样做(警告你)。

      从未尝试过运行超长的任务,因此可能会有很长的限制。我似乎记得在角色回收等一些超时情况下,3 小时是一个神奇的数字,但我从未尝试过......

      【讨论】:

        【解决方案4】:

        Azure Fabric 代理会针对角色执行一些检测信号。如果这些未被确认(例如长时间运行的阻塞进程),这可能会导致角色被标记为不可用。

        您可以尝试将您的启动进程放入一个独立运行的后台线程中。这应该可以帮助您在流程启动时防止角色被回收。请记住,如果您在角色完全启动之前收到请求,您可能需要进行一些调整。还有一种方法(我似乎不记得 ATM)来标记角色并在您的流程完成时将其临时从负载平衡器中取出。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2013-04-14
          • 1970-01-01
          • 1970-01-01
          • 2018-01-17
          • 2023-03-23
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多