Azure角色启动的时间有硬性限制吗



假设我在Azure角色中包含一个相当长时间的启动任务——运行大约几分钟。如果启动任务运行"太长"会发生什么。

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

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

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

这是预期的行为吗?它在真正的云上持续存在吗?一个角色的启动时间有什么硬性限制吗?除了将拆包移动到RoleEntryPoint.OnStart()之外,我如何解决这种情况?

我也有同样的问题,所以尝试了一个实验。我运行了一个启动任务-taskType="simple",这样它就可以阻止角色开始执行,并让它运行50个小时。结构控制器没有抱怨,门户也没有显示任何错误。50个小时后,它完成了漫长的"什么都不做"循环,然后这个启动任务退出,我的Web角色启动得很好。

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

这应该会通知负载均衡器您的进程仍然繁忙:

http://msdn.microsoft.com/en-us/library/microsoft.windowsazure.serviceruntime.roleinstancestatuscheckeventargs.setbusy.aspx

我运行过运行很长时间(比如20-30分钟)的启动任务,而角色只是处于"忙碌"状态。我不认为角色在该状态下停留的时间有硬性限制,只要启动任务仍在执行,并且没有带非零返回代码退出(事实上,对于大多数第一次启动任务的创建者来说,当他们弹出提示时,这是一个难题)。FC在技术上仍然运行良好,因此没有理由"恢复"角色(即心跳仍在继续)。

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

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

Azure Fabric Agent将对角色执行一些检测信号。如果这些都没有得到确认(比如一个长时间运行的阻塞进程),这可能会导致该角色被标记为不可用。

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

最新更新