`
bk_lin
  • 浏览: 336646 次
社区版块
存档分类
最新评论

正确处理 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

分享到:
评论

相关推荐

    Azure事件中心Java编程的那些事1

    Azure事件中心是一个云服务,用于收集、存储和处理大规模的实时数据流,广泛应用于日志分析、物联网(IoT)数据处理和实时分析等场景。它支持多种编程语言,包括Java,这得益于其对REST API和AMQP协议的兼容性。在Java...

    基于“EventProcessorHost”消费Azure事件中心消息1

    2. 使用事件处理程序主机(EventProcessorHost):EventProcessorHost 是 Azure 事件中心的一个高级抽象,它简化了事件处理流程。开发者只需实现 IEventProcessor 接口,其中包含三个关键方法:OpenAsync、...

    基于Apache Storm消费Azure事件中心消息1

    2. **使用事件处理程序主机(EventProcessorHost)**:这是一个托管在客户端的框架,可以自动平衡多个消费者实例之间的负载,并处理检查点和故障恢复。 3. **基于 Apache Storm**:这种方式利用 Storm 的分布式计算...

    Microsoft Developing Solutions for Microsoft Azure(AZ-204)

    Azure Blob Storage 事件触发是指当 Blob 存储中的 Blob 发生变化时,触发相关的事件处理程序。例如,当用户上传照片到 Blob 存储时,触发照片处理事件,以便生成 mobile-friendly 的照片版本。 知识点3:Azure ...

    Azure Kinect Unity3d

    2. **数据流**:了解如何获取和处理来自 Azure Kinect 的不同数据流,如深度图像、RGB 图像和红外图像。这些数据可以用于构建3D点云、实时物体识别或环境重建。 3. **骨骼追踪**:Azure Kinect 具有强大的骨骼追踪...

    Azure 303+学习资料+备考资料

    "Azure 303+学习资料+备考资料" Azure AZ-303 是微软云架构的考试认证,旨在考察考生的云架构设计和实现能力。本文档将对 Azure 303 的学习资料和备考资料进行梳理,列举出相关的知识点,以供学习和备考参考。 ...

    开源项目-Azure-Samples-azure-sdk-for-go-samples.zip

    5. **事件网格**:订阅和处理Azure事件网格中的事件,实现事件驱动的架构。 6. **数据库服务**:与Azure SQL Database或Cosmos DB的交互,包括数据的读写、查询和备份恢复。 每个示例通常包含以下部分: - `main.go...

    Azure开发者指南 Azure Developer Guide

    《Azure开发者指南》是一本针对开发者全面介绍Azure云平台的书籍,旨在帮助开发者快速了解和掌握Azure平台的使用,以便构建创新的应用程序。在云计算的时代背景下,Azure作为一个专门为开发者设计的云平台,提供了一...

    Azure AI 900 学习测试题

    Azure 人工智能 PLATFORM 可以应用于多个领域,包括图像识别、自然语言处理、语音识别等,旨在帮助企业和组织解决实际问题和挑战。 知识点6: Azure 人工智能 PLATFORM 的技术架构 Azure 人工智能 PLATFORM 的技术...

    一个使用Azure WebJobs作业的例子

    这个例子展示了如何集成Azure WebJobs与Azure Blob存储服务来实现数据处理或管理任务。让我们深入了解一下Azure WebJobs和Blob服务的相关知识点。 首先,Azure WebJobs是Azure App Service的一部分,它允许我们在...

    Azure Discovery Day 2018

    5. 存储与数据处理:提供包括Azure Storage、Queues、BizTalk服务、混合连接、服务总线、媒体服务、内容分发网络(CDN)、HDInsight、数据工厂、流分析、机器学习和事件中心等在内的一系列存储和数据处理服务。...

    Windows Azure

    - **媒体服务**:支持视频转码、直播流处理等功能。 - **Service Bus**:提供消息传递机制,包括队列、主题、中继和通知中心等功能。 - **计划程序**:自动执行预定的任务。 ##### 4. 网络服务 - **虚拟网络**:...

    Learning Azure Functions: Creating Azure Functions in Visual Studio 2017

    在本文中,我们将深入探讨如何使用Visual Studio 2017来创建和管理Azure Functions,这是一个基于事件驱动的计算服务,允许开发者构建无服务器应用程序。Azure Functions让你可以在需要时运行代码,而无需预置或管理...

    AZURE iot.pdf

    这些消息通过端点进行路由,以便进行进一步的事件处理。 总而言之,Azure IoT Hub是构建在Microsoft Azure公有云上的一个完整物联网解决方案。它为设备连接、设备管理、数据处理和设备监控提供了强大的服务。这些...

    Azure SQL Data Warehouse

    - **事件中心与流分析**:支持实时数据流的处理和分析,满足实时性要求较高的应用场景。 - **高并发能力**:能够在高并发场景下保持良好的性能表现。 #### 四、适用场景 - **大数据分析**:适合存储大量数据,并...

    微软Azure OCR图像识别Java代码

    需要注意的是,Azure的OCR服务支持多语言,但为了识别中文,我们需要确保在调用时设置正确的语言参数。对于中文,可以使用`Language.CHINESE_SIMPLIFIED`。 在实际应用中,可能还需要处理各种异常,以及优化性能,...

    Azure Kinect Examples for Unity.unitypackage

    Azure Kinect Examples for Unity.unitypackage unity 商城kinect Azure DK的unity例程 这是一组 Azure Kinect(又名 ‘Kinect for Azure’,K4A)示例,其中采用了几个主要脚本,已分组放在一个文件夹中。该资源包...

    Azure Stack混合云解决方案.pptx

    2. 高效的数据处理:Azure Stack 允许企业在本地环境中处理数据,满足低延迟和实时性需求。 3. 无处不在的服务:Azure Stack 提供了多种服务,包括 Azure Active Directory、SQL Server、Azure 数据服务等,满足企业...

    Windows+Azure实战

    9. **人工智能与大数据**:Azure提供认知服务、机器学习服务以及大数据处理工具如HDInsight,支持AI和大数据应用的开发。 通过《Windows Azure实战》的学习,读者不仅能理解Azure的基本概念,还能掌握实际操作技巧...

Global site tag (gtag.js) - Google Analytics