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

时间:2017-06-06 13:29:44

标签: azure

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

问题在于扩展。由于规则中的比例似乎基于所有实例,如果我告诉它在平均CPU负载<1之后将实例数减少到1。 25%它将任意杀死仍在处理数据的实例。

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

1 个答案:

答案 0 :(得分:0)

缩小将首先删除最高实例数。例如,如果您有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. 您可以实施自己的自动缩放算法并手动关闭您选择的各个实例。为此,您将调用Delete Role Instance API(https://msdn.microsoft.com/en-us/library/azure/dn469418.aspx)。这需要一些外部流程来监控您的工作负载并执行管理操作,因此可能不是一个好的解决方案,具体取决于您的基础架构。