Windows Azure Cloud Service (10) Role的生命周期
《Windows Azure Platform 系列文章目录》
在上一章内容中,我们提到了Windows Azure会依次调用角色(Role)实例的OnStart()方法和Run()方法。
在本节中我们会对Role的生存周期进行进一步的了解。首先,让我们走到幕后看看一个Role Instance是怎么被发布到虚拟机上并启动起来的。
Role在虚拟机上部署和运行的过程
以下是角色实例(Role Instance)发布和启动的一个简要过程。
- Windows Azure在服务器池中选择一个有足够CPU内核数的宿主服务器,或者启动一个新的满足需求的宿主服务器
- Windows Azure将云服务包和配置文件复制到宿主服务器上。宿主服务器上的一个宿主代理程序(Host Agent)会启动虚拟操作系统。
- 在虚拟操作系统上有一个名为WaAppAgent的代理程序。这个代理程序负责配置虚拟操作系统并启动一个名为WaHostBootstrapper的进程。
- 如果角色上定义了启动任务,WaHostBootstrapper会运行这些启动任务并等待所有标记为Simple类型的启动任务正确执行
- 如果角色是Web 角色(Web Role),WaHostBootstrapper会启动IISConfigurator来配置IIS
- 如果角色是辅助角色,WaHostBootstrapper启动一个名为WaWorkerHost的进程;如果角色是Web角色,WaHostBootstrapper启动一个名为WaIISHost的进程
- 在上述进程中,载入角色的程序集并搜索其实施的RoleEntryPoint子类
- 调用OnStart()方法
- 调用Run()方法。同时,该实例被标记为"Ready"并加入负载平衡器
- 如果Run()方法退出,OnStop()方法被调用。WaWorkerHost/WaIISHost结束运行,实例重启
- WaHostBootstrapper开始循环监测实例的运行状态
Web Role不一定需要实施RoleEntryPoint类,这是因为Web Role最终是部署在IIS上,是IIS在接受和转发用户的请求。
这也是为什么我们如果把WebRole.cs从web项目中删除不会影响到网站运行的原因。
但是,如果您的Web Role实施了RoleEntryPoint类,您要确保Run()方法不退出,否则实例会重启。

角色实例(Role Instance)的状态
Role Instance可以处于不同的状态:Busy 或者 Ready。
只有在Role处于Ready状态时,才参与负载平衡任务的分配。
如果您想在代码中临时改变Role Instance的状态,可以响应RoleEnvironment类所定义的StatusCheck(状态检查)事件,并且通过事件参数中RoleInstanceStatusCheckEventArgs的Setbusy()方法将实例标记为Busy。这样,负载均衡器就不会把任务分配到当前实例,直至下一次WaHostBootstrapper对实例状态进行检查。
如果在运行过程中您的Role Instance代码退出了Run()方法,或者抛出了未处理的异常(Unhandledexceptions),WaHostBootstrapper会重新启动您的Role Instance。这种自动恢复的机制能够帮助提高系统的可用性。当然,在重新启动的过程中,这个实例在非Ready状态下是不能接受用户请求的。如果WaHostBootstrapper自身奔溃了或者虚拟机宕机了,Windows Azure会重启虚拟机以及Role Instance。如果宿主服务器宕机了,Windows Azure在若干恢复重试后将Role Instance重新部署到一台健康的服务器上。
在Windows Azure关闭Role Instance的过程中,会触发Stopping事件,并调用Role的OnStop()方法。您可以在这里实现实例关闭过程中需要进行的处理,例如释放Role使用的资源等。
最后,如果想强制重新启动您的实例,可以用RoleEnvironment.RequestRecycle()方法来通知Windows Azure进行实例的重新启动。
Windows Azure Cloud Service (10) Role的生命周期的更多相关文章
- Windows Azure Cloud Service (11) PaaS之Web Role, Worker Role(上)
<Windows Azure Platform 系列文章目录> 本文是对Windows Azure Platform (六) Windows Azure应用程序运行环境内容的补充. 我们知 ...
- Windows Azure Cloud Service (42) 使用Azure In-Role Cache缓存(1)Co-located Role
<Windows Azure Platform 系列文章目录> Update 2016-01-12 https://azure.microsoft.com/zh-cn/documentat ...
- Windows Azure Cloud Service (43) 使用Azure In-Role Cache缓存(2)Dedicated Role
<Windows Azure Platform 系列文章目录> Update 2016-01-12 https://azure.microsoft.com/zh-cn/documentat ...
- Windows Azure Cloud Service (36) 在Azure Cloud Service配置SSL证书
<Windows Azure Platform 系列文章目录> 在某些时候,我们需要在Azure PaaS Cloud Service配置HTTPS连接.本章将介绍如何在本地创建证书,然后 ...
- Windows Azure Cloud Service (39) 如何将现有Web应用迁移到Azure PaaS平台
<Windows Azure Platform 系列文章目录> 本文将简单介绍,如何将企业内现有的ASP.NET应用程序迁移到Azure PaaS平台. 因为在迁移过程中,可能需要对现有的 ...
- Windows Azure Cloud Service (47) 修改Cloud Service时区
<Windows Azure Platform 系列文章目录> 本文介绍内容适合于Azure Global和Azure China 我们在使用Cloud Service的时候,会发现默认的 ...
- Windows Azure Cloud Service (38) 微软IaaS与PaaS比较
<Windows Azure Platform 系列文章目录> 最近一直想总结Azure IaaS和PaaS的区别与比较,写个博文详细说明一下.建议读者在阅读之前,先熟悉微软PaaS和Ia ...
- Windows Azure Cloud Service (12) PaaS之Web Role, Worker Role, Azure Storage Queue(下)
<Windows Azure Platform 系列文章目录> 本章DEMO部分源代码,请在这里下载. 在上一章中,笔者介绍了我们可以使用Azure PaaS的Web Role和Worke ...
- [SDK2.2]Windows Azure Cloud Service (35) 使用VS2013发布Azure Cloud Service
<Windows Azure Platform 系列文章目录> 好久没有更新BLOG了,今天我们继续Windows Azure相关的内容. 笔者最近把Visual Studio升级到了20 ...
随机推荐
- 【转载】Fiddler进行模拟Post提交json数据,总为null解决方式
Request Headers: User-Agent: FiddlerHost: localhost:3248Content-Type: application/json; charset=utf- ...
- 犀利的background-clip:text,实现K歌字幕效果
今天学到了一个新的CSS3属性,更准确的说是属性值,那就是background-clip:text.利用此属性值可以制作出很神奇的效果.可惜只有chrome支持,不过今天可以先来玩玩这个属性. 先来介 ...
- 远程调试Java程序
java 可以以调试模式启动,启动后可以使用 jdb 对程序进行调试.以调试模式启动,需要加入以下参数: java -Xdebug -Xrunjdwp:transport=dt_socket,addr ...
- ASP.NET MVC 随想录—— 使用ASP.NET Identity实现基于声明的授权,高级篇
在这篇文章中,我将继续ASP.NET Identity 之旅,这也是ASP.NET Identity 三部曲的最后一篇.在本文中,将为大家介绍ASP.NET Identity 的高级功能,它支持声明式 ...
- IOS Animation-CABasicAnimation例子(简单动画实现)
这些例子都是CABasicAnimation的一些简单实现的动画,例如移动.透明度.翻转等等.方法里面传入一个CALayer类或者子类就可以了. 下面是用swift实现的,这些方法我们也可以用作公共类 ...
- 知方可补不足~利用LogParser将IIS日志插入到数据库
回到目录 LogParser是微软开发的一个日志分析工具,它是命令行格式的,我们通过这个工具,可以对日志文件进行操作,对于一个几百兆的log文件,使用记事本打开是件很残酷的事,所以,很多情况下,我们都 ...
- lua表排序
对于lua的table排序问题,一般的按照value值来排序,使用table.sort( needSortTable , func)即可(可以根据自己的需要重写func,否则会根据默认来:默认的情形之 ...
- 合法提交Html标签 Page指令
3.2.1 提交合法的HTML标签(1) 有时候我们需要让我们提交的文本展示出来的效果非常美观,通常会对服务器提交一些HTML标签来控制文本或内容的样式. HTML标签可能包含了很多不安全的因素,所以 ...
- Atitit apache 和guava的反射工具
Atitit apache 和guava的反射工具 apache1 Spring的反射工具类 ReflectionUtils1 Guava 反射工具2 apache 34 7 ...
- Atitit java 二维码识别 图片识别
Atitit java 二维码识别 图片识别 1.1. 解码11.2. 首先,我们先说一下二维码一共有40个尺寸.官方叫版本Version.11.3. 二维码的样例:21.4. 定位图案21.5. 数 ...