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 ...
随机推荐
- c# json处理(转)
一.C#处理简单json数据 json数据:{"result":"0","res_info":"ok","qu ...
- Django Web开发【2】Django入门
配置开发环境 1.安装Python,我使用的是centos 6.0,python版本为2.6.6 2.安装Django,Django版本为1.3.5 在Django官网下载对应版本之后,解压压缩包,进 ...
- 在sqlite中使用索引
出处: 网络 1)Sqlite不支持聚集索引,android默认需要一个_id字段,这保证了你插入的数据会按“_id”的整数顺序插入,这个integer类型的主键就会扮演和聚集索引一样的角色.所以不要 ...
- Codeigniter使用phpexcel
1. 去 http://phpexcel.codeplex.com/ 下载phpexcel源码,解压缩后把phpexcel/Classes里的PHPExcel文件夹和PHPExcel.php复制到CI ...
- 【LeetCode题意分析&解答】38. Count and Say
The count-and-say sequence is the sequence of integers beginning as follows:1, 11, 21, 1211, 111221, ...
- SQL Server 镜像
sql server 2005镜像制作 以下是操作步骤:-- =========================================== -- 无论是主体服务器.镜像服务器, 还是见证服务 ...
- 数学之路(3)-机器学习(3)-机器学习算法-SVM[7]
SVM是新近出现的强大的数据挖掘工具,它在文本分类.手写文字识别.图像分类.生物序列分析等实际应用中表现出非常好的性能.SVM属于监督学习算法,样本以属性向量的形式提供,所以输入空间是Rn的子集. 图 ...
- 如何解决dns解析故障
在实际应用过程中可能会遇到DNS解析错误的问题,就是说当我们访问一个域名时无法完成将其解析到IP地址的工作,而直接输入网站IP却可以正常访问,这就是因为DNS解析出现故障造成的.这个现象发生的机率比较 ...
- 解决libc.so.6: version `GLIBC_2.14' not found问题, 升级glibc,glibc-2.15
0.以下在系统CentOS 6.3 x86_64上操作 1.试图运行程序,提示"libc.so.6: version `GLIBC_2.14' not found",原因是系统的g ...
- cocos2d-x游戏开发(十六)帧动画
欢迎转载:http://blog.csdn.net/dawn_moon/article/details/11775745 本来想写一下帧动画的,搜了一下网上好像有一大把,就懒得写了,直接贴代码. // ...