【问题标题】:Azure Development - How to stop a Web Role instanceAzure 开发 - 如何停止 Web 角色实例
【发布时间】:2011-07-12 09:51:42
【问题描述】:
我需要测试我的代码将如何处理开发环境中 Web 角色实例的故障。
如何终止其中一个实例?我在 UI 中看不到任何选项。似乎是一个奇怪的遗漏
更新
问题与分布式缓存层有关(我知道 azure 提供了自己的)
我希望能够测试系统对丢失或附加节点等的反应
也许我真正的问题是
RoleEnvironment.CurrentRoleInstance.Role.Instances 的最新程度
【问题讨论】:
标签:
azure
development-environment
azure-web-roles
【解决方案1】:
在开发模拟器中模拟非正常退出的需要通常是因为您正在以您的 Web 角色执行一些有状态或长期运行的操作。这通常是不鼓励的,但有时是不可避免的。
我怀疑模拟失败的最佳方法是终止进程。如果您打开任务管理器(或更好的 Process Explorer),您将看到“WatDebugger”托管“WaIISHost”或“WaWorkerHost”。如果你杀死这个进程,我认为它会模拟失败。
老实说,不过,在云中测试这个更容易。您可以 RDP 进入其中一个实例并终止“WaAppAgent”进程。这将杀死您的 RoleEntryPoint 和结构控制器代理。那将是一个真正的不优雅的失败。
【解决方案2】:
你所说的失败是指变得不可用吗?它应该是无缝的,因为下一个请求将简单地由其他实例之一处理。只要有一个可用的实例,Azure 就会将调用路由到该实例。
这是高可用系统的本质,请求由可用实例处理。这就是为什么您首先有多个实例,以便在一个或多个实例失败的情况下处理请求。
这就是为什么您需要始终注意应用程序如何处理状态的原因。状态需要在实例之外维护,无论是在队列中还是在数据库中。这确保了任何进程都可以拾取一项工作并对其执行。
关于会话状态的另一个问题应该会有所帮助:How does Microsoft Azure handle Session State?
【解决方案3】:
终止一个实例是指减少实例计数并查看哪个实例被杀死?我喜欢 Ryan 关于不优雅退出的观点,但如果它是被面料强行杀死的,那将是另一场比赛。