如何在不暂时中断的情况下扩展Azure应用程序?

我正在使用Windows Azurepipe理API来扩展我的Azure Webangular色。 在某个时候,我有一个实例,并决定我想从一个实例到两个实例。 我发送一个HTTP POSt请求

https://management.core.windows.net:443/<my-subscription-id>/services/hostedservices/<my-service-name>/deployments/<my-deployment-name>/?comp=config 

使用XML指定与当前部署相同的configuration,并将实例计数设置为2。 通话成功并开始更换。 现在约30秒,networkingangular色将不会接受HTTP调用 – 调用者将获得

 10061 connection refused 

在浏览器中。 这意味着angular色不提供客户端请求。 这是一个问题。

我如何按照服务于客户请求的方式来扩展Webangular色?

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

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

这意味着SLA不支持一个实例,所以您可能(或将要)停机。 如果从2或更多,或从2增加到2,则不会有任何中断。

这个博客文章概述了关于故障和升级域的一个很好的解释。 毕竟,缩放意味着“升级” – 您正在更改配置,此配置更改需要通过所有角色和实例进行传播。 唯一能做到这一点的方法就是至少有两个实例,每个实例都存在于不同的域中。

请注意,当您有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的评论。