2011-06-06 74 views
5

假設我在Azure角色中包含一個運行時間相當長的startup task - 運行時間長達幾分鐘。如果啓動任務運行時間過長,會發生什麼情況。Azure角色啓動需要多長時間才能實現硬限制?

我目前正在測試Compute Emulator並觀察以下內容。

我有一個450兆字節的.zip文件連同Info-Zip unzip。啓動任務解壓縮存檔。部署開始,我看着任務管理器。許多服務進程開始,然後運行unzip.exe。大約兩分鐘後,所有這些進程停止,然後重新開始,然後unzip.exe再次啓動。

因此,看起來部署允許運行大約兩分鐘,然後強制重置並重新啓動。

這是預期的行爲?它是否堅持真正的雲?對於初創角色可以承擔多長時間有任何硬性限制?除了將拆包移動到RoleEntryPoint.OnStart()之外,我該如何處理這種情況?

回答

7

我有同樣的問題,所以嘗試了一個實驗。我運行了一個Startup Task - taskType =「simple」,這樣它就可以阻止Roles開始執行 - 並讓它運行50個小時。 Fabric Controller沒有投訴,門戶網站也沒有顯示任何錯誤。在50小時後,它完成了長時間的「無所事事」循環,然後退出此啓動任務,並且我的Web角色啓動正常。

所以我的經驗測試說啓動任務可能需要很長時間! 至少50小時。

0

Azure Fabric Agent將對此角色進行一些心跳檢測。如果這些未被確認(例如長時間運行的阻止進程),則可能會導致該角色被標記爲不可用。

您可能會嘗試將啓動過程放入獨立運行的後臺線程中。這應該有助於您在啓動過程時保持角色不被回收。請記住,如果您在角色完全啓動之前收到請求,您可能需要進行一些調整。還有一種方法(我似乎沒有想起ATM)來標記角色,並在流程完成時臨時將其從負載平衡器中取出。

2
+0

如何從啓動任務中調用該方法? – sharptooth 2011-06-07 05:49:55

+0

我不認爲SetBusy方法適用於啓動任務。如果您的RoleEntryPoint代碼(例如,Run方法)耗費時間並且不希望Fabric Controller認爲它已掛起,那麼您將爲您的角色使用SetBusy。如果您正在使用taskType =「簡單」啓動任務(在調用OnStart之前完成運行的類型),那麼負載均衡器仍然不會向您發送流量。如果您使用其他啓動taskType(背景或前景),那麼它們將獨立於您的OnStart和Run方法運行。 – codingoutloud 2011-07-26 23:30:37

1

我已經運行了相當長的時間(20-30認爲分鐘)和角色下運行的啓動任務很簡單處於「忙碌」狀態。我認爲只要啓動任務仍在執行並且不以非零返回代碼退出,角色將保持該狀態的時間有多久就沒有限制(事實上,對大多數人來說這是一個棘手的問題第一次啓動任務創建者時,他們彈出提示)。 FC在技術上仍然運行良好,因此沒有理由「恢復」角色(即心跳仍在繼續)。

dev模擬器只是在角色尚未啓動時發出警告並提醒您。如果您單擊「繼續等待」選項,它將繼續運行啓動任務以完成。雲不會這樣做(警告你)。

從未嘗試過運行超長的任務,因此可能會有很長的限制。我似乎記得3小時是一些超時情況下的魔法數字,如角色回收,但我從來沒有嘗試過...

相關問題