正确处理 Azure OnStop 事件
作者信息:本篇文章是由Windows Azure 和 ASP.NET MVC組程序員/作家RickAnderson所著。
重啟Web Roles
如何重啟是Windows Azure 中一個經常被忽視的問題。正確處理重啟操作至關重要,這樣您就不至于丟失數據或損壞您固有的數據,便于您快速關機、 重啟和高效率地處理新的請求。Windows Azure Cloud Service每月大約重啟兩次用于更新操作系統。 (關于操作系統更新的詳細,請參閱RoleInstance Restarts Due to OS Upgrades。)當一個頁面應用程序關閉時,將觸發RoleEnvironment.Stopping事件。因為由 Visual Studio 創建的 web role boilerplate不會去重寫OnStop方法,所以應用程序在關機前只有幾秒鐘時間來處理 HTTP 請求。如果您的 web role正忙著處理掛起的請求,有些請求就有可能會丟失。你可以延遲重啟時間或讓您的 web role推遲最多 5 分鐘的時間來重寫OnStop方法和調用Sleep,但這并不是很理想。一旦引發Stopping事件,Load Balance(LB)就停止向web role發送請求,所以拖延關機時間長于處理掛起請求讓您的虛擬機處于Sleep狀態的時間,并不起什么作用。最佳的方法是等待OnStop方法直到沒有更多的請求,然后啟動關機。關的越早,VM 重啟并開始處理請求就越早。要想使用最佳方法關機,請將下面的代碼添加到WebRole類中。
上面的代碼檢查 ASP.NET 請求的當前的counter。只要有請求,該OnStop方法將調用Sleep延遲關機。一旦當前請求的counter降為零, OnStop返回并啟動關機。萬一? web 服務器太忙而不能在 5 分鐘內處理完掛起的請求,應用程序也會強行關閉。請記住一旦觸發Stopping事件,LB 會停止將請求發送到 web role,所以除非您擁有大量的web role (或太少的實例),否則永遠不要超過幾秒鐘來完成當前請求。
上面的代碼為Trace寫入數據,但除非您執行一個復雜的On-DemandTransfer,不然 OnStop方法的trace數據將永遠不會出現在WADLogsTable上。后面,我將介紹如何使用DebugView來查看這些trace事件。以及如何在web role 的OnStart方法中獲取tracing working。
Worker Roles的最佳重啟方法
在一個worker role中處理Stopping事件需要不同的辦法。通常worker role在Run方法中處理隊列消息。該方法包括兩個全局變量 ;一個通知Run方法Stopping事件已觸發,另一個通知OnStop方法可以安全地啟動關機。(OnStop返回后啟動關機)。下面的代碼演示了這兩種全局方法。
OnStop調用時,全局變量onStopCalled設置為 true,若沒有隊列事件需要處理,在Run方法中就可以根據onStopCalled的值在第一層循環時判斷是否關機。
查看 OnStop Trace Data
如前面所提到的,除非您執行一個復雜的On-DemandTransfer,不然 OnStop方法的trace數據將永遠不會出現在WADLogsTable上。我們將使用Dbgview來查看這些trace事件。在SolutionExplorer中,右鍵單擊云項目并選擇Publish.
下載您的發布配置文件。在Publish Windows Azure Application對話框中,選擇Debug并勾選Enable RemoteDesktop for all roles。
編譯器會將Trace調用從發布版本中移除,所以您需要設置buildconfiguration為Debug來查看Trace數據。一旦應用程序發布并運行,在 Visual Studio 中,選擇Server Explorer (Ctl + Alt + S)。選擇Windows Azure Compute,然后選擇您的云部署。(此項目中叫做t6,它是一個production部署)。選擇 web role instance,單擊鼠標右鍵,選擇Connect usingRemote Desktop.
Remote DesktopConnection (RDC)將使用您在發布向導中指定的帳戶名稱,并提示您輸入密碼。在任務欄的左側,選擇Server Manager圖標。
在Server Manager左選項卡,選擇Local Server,然后選擇IE EnhancedSecurity Configuration (IE ESC)。在IE ESC 對話框中選擇關閉radio按鈕。
啟動InternetExplorer、 下載和安裝DebugView。啟動DebugView,并在Capture菜單中,選擇Capture GlobalWin32。
選擇filter圖標,,然后輸入下面的排除篩選器:
對于此測試,我在About操作方法中添加了RoleEnvironment.RequestRecycle方法,正如其名字所示,啟動關機/重啟序列。或者,您可以重新發布應用程序,還將啟動關機/重啟序列。
按照同樣的操作也可以查看worker role VM中的trace data。選擇worker roleinstance,用鼠標右鍵單擊并選擇Connect using Remote Desktop。
如果您想看到一篇這樣的博客,是關于如何讓獲取trace數據出現在WADLogsTable上而不是用OnStop方法,請聯系我。本篇的大部分內容來自于我和Tom上周發布的Azuremulti-tier tutorial。您一定在此篇文章中也看到了一些其他好的方法。
— — Rick
@RickAndMSFT
Reference: http://blogs.msdn.com/b/windowsazure/archive/2013/01/14/the-right-way-to-handle-azure-onstop-events.aspx
?
?
轉載于:https://www.cnblogs.com/new0801/archive/2013/01/18/6176459.html
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的正确处理 Azure OnStop 事件的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 转:mybatis - 分页功能
- 下一篇: 简单的图像去噪的实现和验证码识别