在使用实例中杀死Azure自动缩放比例

问题描述:

我正在使用Azure自动缩放功能处理数百个文件。系统正确地扩展到8个实例,每个实例一次处理一个文件。在使用实例中杀死Azure自动缩放比例

问题在于扩展英寸因为规则中的规模似乎基于所有实例,如果我告诉它在实例计数减少到1之后平均CPU负载为25%,它会任意地终止实例仍在处理数据。

有没有办法阻止它关闭仍在使用中的单个实例?

按比例缩小将首先删除最高实例编号。例如,如果您有WorkerRole_IN_0,WorkerRole_IN_1,...,WorkerRole_IN_8,然后缩小1,则Azure将首先删除WorkerRole_IN_8。 Azure不知道你的代码正在做什么(即它是否仍在处理文件),或者它已完成并准备关闭。

您有几种选择:

  1. 如果文件处理快,可以延迟关机在调用OnStop事件长达5分钟,让您的实例有足够的时间来完成处理文件。这是实施最简单的解决方案,但不是最可靠的解决方案。
  2. 如果处理文件可以分解成更短的工作块,那么您可以让实例处理块,直到文件完成。这样,如果一个任意实例被关闭并不重要,因为你不会失去任何大量的工作,而另一个实例会从中断的地方继续。有关模式,请参见https://docs.microsoft.com/en-us/azure/architecture/patterns/pipes-and-filters。这是理想的解决方案,因为它是分布式工作负载的优化架构,但某些工作负载(即图像/视频处理)可能无法轻松拆分。
  3. 您可以实现自己的自动缩放算法并手动关闭您选择的单个实例。为此,您可以调用删除角色实例API(https://msdn.microsoft.com/en-us/library/azure/dn469418.aspx)。这需要一些外部过程来监控您的工作负载并执行管理操作,因此根据您的基础架构可能不是一个好的解决方案。