Windows Azure 网站自愈
编辑人员注释:本文章由
Windows Azure 网站团队的项目经理Apurva Joshi
撰写。
您有多少次在半夜被叫醒去解决一个仅需重新启动网站即可解决的问题?要是可以自动检测一些状况并自动恢复该有多好!
随着 Windows Azure
网站 (WAWS)
最新更新的推出,我们已尝试解决这些问题。我们在
“始终可用”功能之上新增了一些增强功能。通过这些增强功能,系统可以自动回收托管您的
Web 应用程序的 worker
进程。我们称之为“自愈”功能。下面说明了该功能的工作原理:
您仅需在网站的根 web.config
文件中定义触发器,并配置这些触发器被触发时要执行的操作即可。大致上配置部分的结构如下:

注意:
此功能与“始终可用”功能一样,仅适用于标准实例。
我们来分解下每个场景的可用选项。
(本文末尾提供了所有支持元素和属性的详细说明。)
场景 1 –“基于请求计数回收”
设想以下场景:您的应用程序已处理 X
个请求,您需要在 Y
时间内自动回收该应用程序。您知道短时间内涌入大量请求会导致您的应用程序伸缩性下降。您希望能够检测到此情况,并且自动回收 worker
进程和记录事件日志。
您仅需编辑应用程序的根 web.config
文件,以下提供了配置示例。(如果已存在 web.config
文件,请将<monitoring>部分复制到现有
<system.webServer> 部分下)

有了以上配置,
若10分钟内处理了1000个请求,
worker 进程将被回收。它还会在 eventlog.xml
文件(可从您的 Web
根目录的 Logfiles
文件夹中获取)中记录事件日志。记录事件日志可以帮助您查找自愈网站的发生次数,并且为故障排除或根源分析提供重要取证。收到第一个请求时,我们会启动 timeInterval
定时器,然后启动发生次数计数。如果在 timeInterval
过期之前该计数超过最大值,我们将采取措施。如果
timeInterval 过期,我们将重置该定时器和计数。在以上配置下,这样做可能会出现以下情况:
00:00:00 –
第一个请求到达
00:09:59 – 998
个请求得到处理
00:10:00 –
定时器过期,重置为 0
00:10:01 – 999
个请求得到处理
在此场景下,第一个或第二个 timeInterval
窗口中并未发生 1000
个请求,因此未采取任何措施。
注意:如果您的网站有多个实例,仅会重新启动触发此触发器的实例,而不是全部实例。
eventlog.xml
文件中记录的事件示例

场景 2 –“基于缓慢请求回收”
设想以下场景:您的应用程序的性能开始下降,并且几个页面的显示速度开始减缓。您希望可以检测此情况,并且自动回收 worker
进程。
您仅需编辑应用程序的根 web.config
文件,以下提供了配置示例。(如果已存在 web.config
文件,请将<monitoring>部分复制到现有
<system.webServer> 部分下)

当检测到最后2分钟内20
个请求的执行时间超过
45 秒时,以上配置将回收该
worker 进程。必须注意的一点是,slowRequest
的触发器在每个请求执行结束时进行评估,因此将 timeInterval
设置为大于 timeTaken
的值也同等重要。
注意:如果您的网站有多个实例,仅会重新启动触发此触发器的实例,而不是全部实例。
eventlog.xml
文件中记录的事件示例

场景 3 –“基于
HTTP 状态代码记录事件(或回收)”
设想以下场景:当您的网站开始抛出特定的 HTTP
状态代码、子状态代码或 win32
状态代码时,您希望收到有关此情况的通知。您可以选择回收或仅需在 eventlog.xml
文件(可从您网站内容根目录的 Logfiles
文件夹中获取)中记录事件
您仅需编辑应用程序的根 web.config
文件,以下提供了配置示例。

当30秒内检测到
10 个请求导致出现
HTTP 状态代码 500
和子状态代码 100
时,以上配置将在
eventlog.xml 文件中记录该事件。
注意:如果您的网站有多个实例,仅会记录触发此触发器的实例的事件,而不是全部实例。或者,也可以选择回收,而不仅仅是记录事件。默认情况下,回收会记录事件。
eventlog.xml
文件中记录的事件示例

场景 4 –“基于内存限制采取自定义操作(或回收/日志记录)”
设想以下场景:您正在对您网站中的内存泄露进行故障排除并且要执行以下自定义操作:生成内存转储、发送电子邮件通知,或生成内存转储并回收进程等。
您仅需编辑应用程序的根 web.config
文件,以下提供了配置示例。

当检测到 worker
进程已达到
800 MB
专用字节时,以上配置会执行自定义操作以运行 procdump.exe,并且生成迷你内存转储。自愈功能不会触发某些来自
http.sys(内核驱动程序,不会因为请求而成为 worker
进程管道)的 HTTP
错误代码。此类状态代码的示例包括 304、302、400(很多但并非全部)、503,等等。
注意:如果您的网站有多个实例,仅会为触发此触发器的实例生成内存转储,而不是全部实例。或者,也可以
选择执行发送电子邮件等自定义操作。此外还要注意,默认情况下,procdump.exe
在您网站的根目录 (d:\home)
下是不存在的–
您的网站进行 xcopy
部署时需要将它复制过去。
用于回收操作类型的 eventlog.xml
文件中记录的事件示例

最后,如果您想要配置特定页面/URL
上的触发器,可以使用我们的 FREB
模块。配置步骤如下面博客中所述:
此方法会带来 5-10%
的性能损失,并且需要启用 FREB。
注意:以上方法同样仅在标准模式下有效,因为在共享和免费模式下
1 小时后我们会自动禁用 FREB。
以下是支持的配置及其含义的列表。
本文翻译自:
http://blogs.msdn.com/b/windowsazure/archive/2014/02/06/auto-healing-windows-azure-web-sites.aspx
Windows Azure 网站自愈的更多相关文章
- 比较Windows Azure 网站(Web Sites), 云服务(Cloud Services)and 虚机(Virtual Machines)
Windows Azure提供了几个部署web应用程序的方法,比如Windows Azure网站.云服务和虚拟机.你可能无法确定哪一个最适合您的需要,或者你可能清楚的概念,比如IaaS vs PaaS ...
- 在 Windows Azure 网站中进行纵向扩展和横向扩展
编辑人员注释:本文章由 Windows Azure 网站团队的项目经理 Byron Tardif 撰写. 当您开始一个新的 Web 项目,或者刚刚开始开发一般的网站和应用程序时,您可能希望从小处着手. ...
- Windows Azure 网站:应用程序字符串和连接字符串的工作原理
编辑人员注释:本文章由 Windows Azure 网站团队的首席项目经理 Stefan Schackow 撰写. Windows Azure 网站上有一个方便的功能,即开发人员可将 Azure 中的 ...
- 探索 Windows Azure 网站中的自动伸缩功能
去年10月,我们发布了若干针对 WindowsAzure平台的更新,其中一项更新是添加了基于日期的自动伸缩调度支持(在不同的日期设置不同的规则). 在这篇博客文章中,我们将了解自动伸缩的概念,并 ...
- 在 Windows Azure 网站中配置动态 IP 地址限制
我们最近对 Windows Azure 网站进行了升级,并启用了IIS8的动态 IP 限制模块.现在,开发人员可以为其网站启用并配置动态 IP 限制功能(或简称 DIPR). 可以通过以下链接查看此 ...
- Windows Azure 网站 (WAWS) 中的服务器端包含 (SSI)
编辑人员注释:本文章由 Windows Azure 网站团队的项目经理Erez Benari 撰写. Windows Azure 网站客户普遍关心的一个问题是关于我们对服务器端包含(Server ...
- 您应该了解的 Windows Azure 网站在线工具
编辑人员注释:本文章由Windows Azure 网站团队的软件开发者 Amit Apple 撰写. 如果想要了解并亲身参与计算资源管理,那么您一定会很高兴得知这一消息:Windows Azur ...
- 使用 IIS Manager 对 Windows Azure 网站进行远程管理
最近,我们为客户新增了使用 Windows自带的 IIS管理控制台管理 Azure网站的功能.IIS Manager支持 HTTP over SSL,提供到您的 Windows Azure 网站 ...
- 最佳实践:Windows Azure 网站 (WAWS)
编辑人员注释:本文章由 Windows Azure 网站团队的项目经理Sunitha Muthukrishna 撰写. Windows Azure 网站 (WAWS) 允许您在 Windows ...
随机推荐
- 如何给Ubuntu 安装Vmware Tools
http://jingyan.baidu.com/article/3065b3b6e8dedabecff8a435.html
- 认识jeecms开源项目
1. JEECMS源代码基本结构及相关技术简介: 参考:http://blog.csdn.net/caozhenyu/article/details/47005623
- 第一个输出程序 Console.WriteLine
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- 怎样使用Markdown
转自:http://wowubuntu.com/markdown/basic.html 段落.标题.区块代码 一个段落是由一个以上的连接的行句组成,而一个以上的空行则会划分出不同的段落(空行的定义是显 ...
- which 查看可执行文件的位置
我们经常在linux要查找某个文件,但不知道放在哪里了,可以使用下面的一些命令来搜索: which 查看可执行文件的位置. whereis 查看文件的位置. ...
- ubuntu-10.04的测试环境 安装测试 Coreseek开源中文检索引擎-Sphinx中文版
主要参考文档:http://www.coreseek.cn/products-install/install_on_bsd_linux/ 一. 32位版本: coreseek安装需要预装的软件: ap ...
- ETL工具之ODI
ETL工具之ODI 到目前为止,Oracle的ETL工具包括两种,分别是Oracle Warehouse Builder(OWB)和Oracle Data Integrator(ODI ...
- What do `?i` and `?-i` in regex mean?
http://stackoverflow.com/questions/15145659/what-do-i-and-i-in-regex-mean
- 终于懂了:两个UI组件同时在操作是不可能实现的
// 目的:从某个对话框里,选择一些路径,然后用Tree自动展开这些路径,但至少需要几秒钟时间 // 问题:在这几秒钟期间,显示一个等待对话框,只能开多线程,因为后台继续要处理tree的一些事情.等待 ...
- CCNP路由实验(2) -- OSPF
OSPF作为一种内部网关协议(IGP),用于在同一个AS中的路由器之间交换路由信息.OSPF的特性如下:1.可适应大规模网络2.收敛速度快3.无路由环路4.支持VLSM和CIDR5.支持等价路由6.支 ...