1

我想让一个 Windows Azure 应用程序尽可能地抗故障,并且我需要能够故意让角色崩溃以测试整个应用程序如何从此类崩溃中恢复。

我想我可以将代码直接插入角色中,以获得随机数并决定以相当低的概率崩溃。真正的问题是

if( isTimeToCrash() ) {
   //what exactly do I do here?
}

一旦我决定是时候如何让角色崩溃。

如何可靠地故意使 Azure 角色崩溃?

4

3 回答 3

3

您可以 RDP 进入机器或使用启动任务添加计划任务,该任务将定期终止“WaAppAgent”进程。Powershell在这里找到并杀死进程非常好。您需要成为管理员才能执行此操作。这将在一段时间内切断与结构控制器的通信,直到它恢复并重新启动该过程。IIRC,它还会杀死您的 RoleEntryPoint 代码(在 WaWebHost 或 WaWorkerHost 下运行)。这将模拟一个相当大的失败。

如果你想变得更花哨,运行一个后台启动任务来监听队列,当它看到队列消息时会按需终止进程。请注意,您不会将此代码放在 RoleEntryPoint 中,它必须是作为“后台”运行的启动任务,否则您还会终止使您的角色崩溃的进程。

于 2011-05-23T14:25:40.780 回答
1

我不确定角色是否崩溃,但使用角色管理 API 可以重新启动角色。你可以看看这个样本

于 2011-05-23T13:05:45.747 回答
1

对于工作者角色,您可以从 Run() 中引发异常并让它不处理。但是,我不知道这是否符合您作为“崩溃”的资格 - 该角色将被优雅地回收。

我们的角色倾向于通过 IIS 捕获未处理的异常,因此 dunnry 的建议可能会让您更接近您正在寻找的 ASOD(Azure Screen of Death)。

于 2011-05-23T16:21:55.223 回答