2017-06-06 155 views
0

我正在使用Azure自動縮放功能處理數百個文件。系統正確地擴展到8個實例,每個實例一次處理一個文件。在使用實例中殺死Azure自動縮放比例

問題在於擴展英寸因爲規則中的規模似乎基於所有實例,如果我告訴它在實例計數減少到1之後平均CPU負載爲25%,它會任意地終止實例仍在處理數據。

有沒有辦法阻止它關閉仍在使用中的單個實例?

回答

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. 您可以實現自己的自動縮放算法並手動關閉您選擇的單個實例。爲此,您可以調用刪除角色實例API(https://msdn.microsoft.com/en-us/library/azure/dn469418.aspx)。這需要一些外部過程來監控您的工作負載並執行管理操作,因此根據您的基礎架構可能不是一個好的解決方案。