我正在使用Windows Azure Management API来扩展我的Azure Web角色。在某些时候,我有一个实例,并决定我想从一个实例转到两个实例。我发送HTTP POSt请求到
https://management.core.windows.net:443/<my-subscription-id>/services/hostedservices/<my-service-name>/deployments/<my-deployment-name>/?comp=config
使用XML指定与当前部署相同的配置,并将实例计数设置为2。呼叫成功,更改开始。现在大约30秒,Web角色将不接受HTTP调用 - 调用者将获得
10061 connection refused
在浏览器中。这意味着该角色不会为客户端请求提供服务。那是个问题。
如何以始终为客户端请求提供服务的方式扩展Web角色?
答案 0 :(得分:7)
根据SLA(服务水平协议 - 计算):
我们保证在您部署两个或更多角色实例时 面向Internet的角色将具有不同的故障和升级域 至少有99.95%的时间具有外部连接性。
这意味着SLA不支持一个实例,因此您可能(或将会)有停机时间。如果从2或更多,或从更多到2,则不会有任何中断。
This blog post概述了有关故障和升级域的良好解释。首先,扩展意味着“升级” - 您正在更改配置,此配置更改需要通过所有角色和实例进行传播。实现停机时间(目前)的唯一方法是至少有两个实例,每个实例都位于不同的域中。
答案 1 :(得分:0)
请注意,当您有2个或更多实例时,在修改服务配置时可能仍会遇到中断(例如,使用Service Management API更改实例数)。任何配置更改都将触发重新启动实例。
为了防止这种情况,您需要在WebRole.cs / WorkerRole.cs中实现以下代码(因此,当您更改实例数时,不会出现中断):
public override bool OnStart()
{
RoleEnvironment.Changing += RoleEnvironmentChanging;
return base.OnStart();
}
private void RoleEnvironmentChanging(object sender, RoleEnvironmentChangingEventArgs e)
{
if (e.Changes.Any(change => change is RoleEnvironmentConfigurationSettingChange))
{
e.Cancel = false;
}
}
编辑:请参阅下面的astaykov评论。