2

我正在使用 Windows Azure 管理 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 角色,使其始终服务于客户端请求?

4

2 回答 2

7

根据SLA(服务水平协议 - 计算):

我们保证,当您在不同的故障和升级域中部署两个或更多角色实例时,您面向 Internet 的角色将在至少 99.95% 的时间内具有外部连接。

这意味着 SLA 不支持拥有一个实例,因此您可能(或将会)有停机时间。如果从 2 或更多缩放,或从更多到 2,则不会出现任何中断。

这篇博客文章概述了关于故障和升级域的一个很好的解释。毕竟,扩展意味着“升级”——您正在更改配置,这种配置更改需要通过所有角色和实例传播。在没有停机时间的情况下(当前)唯一的方法是拥有至少两个实例,每个实例都位于不同的域中。

于 2012-04-04T10:14:37.600 回答
0

请注意,当您有 2 个或更多实例时,您在修改服务配置时可能仍会遇到中断(例如使用服务管理 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 评论。

于 2012-04-05T08:20:46.470 回答