Azure Autoscaling:进程在实例上结束后缩小

Azure Autoscaling: Scale down after process ends on instance

我有一个 Azure 云服务,可以扩展和缩减实例。使用一些应用洞察指标来管理自动扩展规则,效果很好。

问题出现在扩展和 Azure 消除主机时;有没有办法让它在实例处理完任务后只在实例中扩展?

无法自动执行此操作。 Azure 将始终在最高数量的实例中扩展。

理想的解决方案是使工作幂等和分块,这样如果正在执行某组工作的实例被中断(缩减、VM 重启、断电等),那么另一个实例可以接手在停止的地方工作。这使您可以从许多可能的情况(例如断电)中恢复,而不是仅仅尝试设计特定的东西来缩小规模。

话虽如此,您可以手动创建一个缩放解决方案,只删除不工作的实例,但这样做需要您编写大量代码。本质上,您将在每个实例中使用信号机制 运行,让一些外部服务(逻辑应用程序或 WebJob 或类似的东西)知道实例何时空闲或忙碌,并且该外部服务可以删除空闲实例使用删除角色实例 API (https://docs.microsoft.com/en-us/rest/api/compute/cloudservices/rest-delete-role-instances).

有关此主题的更多讨论,请参阅:

  • How to Stop single Instance/VM of WebRole/WorkerRole
  • Azure autoscale scale in kills in use instances

另一个解决方案,但这个解决方案打破了我们使用 Azure 云服务的假设;如果您使用应用服务而不是云服务,您将能够在应用服务计划上设置自动缩放,有效地处理您遇到的实例丢失问题。

这是一项基础架构更改,因此不是两次单击的事情,但我相信应用服务更适合许多情况,包括这种情况。

你可以看看一些优缺点,但如果你的产品是流量管理的,那么这个转变就不会很痛苦。

Kwill,感谢 links/information,第二个 link 中的第一项是最好的折衷方案。

流程工作时间通常在 5 分钟以下,并且服务已经重新处理失败的流程,因此经过一些研究后决定跟踪服务处理队列项目时的状态并使用 while 循环在 RoleEnvironment.Stopping 事件中延迟重启和缩减事件,直到进程有机会完成。

App Insights 用于跟踪停止事件期间的自定义事件,以跟踪它在延迟周期内完成与重新启动的频率。