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