背景:我已将 MVC3 应用程序部署到 2 个 Azure Web 角色实例,但我对如何测试其中一个实例失败的可能性感到困惑。
当我的一个实例脱机时,有没有一种方法可以测试以确保我的 Web 角色代码无缝运行?
我可以手动停止其中一个吗?或者以某种方式配置负载均衡器以强制所有流量到其中一台服务器?
谢谢!
背景:我已将 MVC3 应用程序部署到 2 个 Azure Web 角色实例,但我对如何测试其中一个实例失败的可能性感到困惑。
当我的一个实例脱机时,有没有一种方法可以测试以确保我的 Web 角色代码无缝运行?
我可以手动停止其中一个吗?或者以某种方式配置负载均衡器以强制所有流量到其中一台服务器?
谢谢!
如果您对您的实例启用了 RDP 访问,您可以非常轻松地从 LoadBalancer 中删除一个或多个实例,即使该实例运行良好,而无需编写任何代码行。您只需要 RDP 到您的实例,然后使用 PowerShell 脚本将实例从负载均衡器中移除。在我的以下博客中,我描述了确切的过程:
上述细节还有助于通过从总共 M 个实例中删除 N 个实例来运行负载测试。
如果您使用 StatusCheck 事件将状态设置为忙碌,您的实例将不会再收到来自负载均衡器的任何请求。您可能想要编写一些代码来向您的实例发送消息,这会将它们设置为忙碌一段时间(例如使用队列)。
public override bool OnStart()
{
RoleEnvironment.StatusCheck += RoleEnvironmentStatusCheck;
return base.OnStart();
}
// Use the busy object to indicate that the status of the role instance must be Busy
private volatile bool busy = true;
private void RoleEnvironmentStatusCheck(object sender, RoleInstanceStatusCheckEventArgs e)
{
If (this.busy)
{
// Sets the status of the role instance to Busy for a short interval.
// If you want the role instance to remain busy, add code to
// continue to call the SetBusy method
e.SetBusy();
}
}
除此之外,您还可以简单地重新启动您的实例(使用 Windows Azure 门户或远程桌面)。
Steve Marx(又名 smarx)开发了一个名为WazMonkey的工具。它是由 netflix 团队开发的工具Chaos Monkey的天蓝色对应物,用于模拟亚马逊 AWS 中的损坏实例。WazMonkey 会随机终止 Windows azure 云服务的实例,以测试云应用程序的弹性。