Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
更改Azure中asp.net web角色的实例数时的影响_Asp.net_Azure_Azure Web Roles - Fatal编程技术网

更改Azure中asp.net web角色的实例数时的影响

更改Azure中asp.net web角色的实例数时的影响,asp.net,azure,azure-web-roles,Asp.net,Azure,Azure Web Roles,我不知道更改ASP.Net web角色的实例数会如何影响当前正在处理的请求 情况如下: ASP.Net站点部署了6个实例 通过控制台,我将instancecount减少到4 如果azure当前正在处理请求,它是否足够聪明,不会从池中删除实例,还是只是在请求期间将其杀死 我已经通过azure doco、goolge和许多给MS技术支持的电子邮件,没有一封能够回答这个看似简单的问题。我知道由关闭等触发的事件,但在网站场景中,如果有人在等待对其响应的请求,则这并没有真正的帮助。您无法选择要关闭哪些实例

我不知道更改ASP.Net web角色的实例数会如何影响当前正在处理的请求

情况如下:

  • ASP.Net站点部署了6个实例
  • 通过控制台,我将instancecount减少到4
  • 如果azure当前正在处理请求,它是否足够聪明,不会从池中删除实例,还是只是在请求期间将其杀死


    我已经通过azure doco、goolge和许多给MS技术支持的电子邮件,没有一封能够回答这个看似简单的问题。我知道由关闭等触发的事件,但在网站场景中,如果有人在等待对其响应的请求,则这并没有真正的帮助。

    您无法选择要关闭哪些实例。这主要是由于Windows Azure的实例分配方案,其中您的实例被划分为不同的容错域(意味着数据中心的不同区域-不同的机架等)。如果要选择要终止的实例,这可能会使您处于剩余实例位于同一容错域的状态,这将使SLA无效

    话虽如此:当您的角色实例关闭时,您会收到一个事件(OnStop()事件)。如果捕获此事件,则可以执行实例清理以准备VM关闭。我记不起此时您是否被带出负载平衡器,但您可以通过简单的PowerShell命令(Set RoleInstanceStatus-Busy)强制自己退出。这样,您的asp.net实例将停止接收请求,并且您可以更轻松地以优雅的方式关闭


    编辑:抱歉-没有完全回答您的所有问题。由于要捕获OnStop(),可能必须实现一种机制,以确保该实例中没有处理任何内容。由于您没有负载平衡器,并且假设您的请求处理得相当快(2-5秒),您不必等待很长时间来清除剩余的请求。可能有一个性能计数器要检查,以查看有多少活动请求正在被处理。

    只需补充David的回答:当您离开负载平衡器时,会发生OnStop事件。对于web应用程序,在断开与LB的连接后,通常有足够的时间释放所有请求,直到实例关闭。但是,对于长时间运行的或有状态的连接(可能是到工作者角色的连接),在某些情况下可能会突然断开连接。尽管OnStop方法将您从LB中删除,但它不会终止打开的连接。它只是阻止你获得新的连接。对于web应用程序,这通常是足够的时间来完成请求(如果需要,您也可以在桌面上延迟关机,如果您真的愿意)。

    谢谢,这正是我所希望的。如何将关闭延迟到所有当前请求完成。可以通过不从OnStop()事件返回来延迟关闭。从1.5 SDK开始,它可以延迟大约5分钟,然后将被迫关闭。