【问题标题】:How do I intentionally make Azure role crash?如何故意使 Azure 角色崩溃?
【发布时间】:2011-08-31 00:51:06
【问题描述】:

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

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

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

一旦我决定时机成熟,如何让角色崩溃。

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

【问题讨论】:

    标签: azure roles reliability


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      我不确定是否会导致角色崩溃,但您可以使用角色管理 API reboot a role。你可以看看这个sample

      【讨论】:

      • 这会起作用,但这是一种“友好”的方式。它会很好地告诉结构控制器并运行 OnStop 等。对于硬崩溃,您需要终止进程。
      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 2014-09-16
        • 2018-04-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多