我们有一个场景,我们在Azure中使用多个Web应用程序,当扩展时,我理解Azure只是启动更多的Web进程,因此允许连接到多个服务器,有一个广播系统用于同步。问题是,如果我们手动或自动缩小,打开的套接字会发生什么?假设我们有5个服务器,每个服务器都有一个开放的web套接字,我们将其缩小到1个,那么连接到被移除的服务器的4个套接字将会发生什么?
作为旁注,如果它们坚持并保持直到套接字与客户端断开连接,Azure会为此时间向我收费吗?
如果它们不能连接,只需要确保客户端正确重新连接。
到目前为止,我所看到的,它似乎坚持下去,但这可能只是一个宽限期,而它的规模缩小,所以我宁愿在这里确定的答案,从一个真正知道。
从另一个线程几年前,它是最新的实例被删除(大部分时间),但我找不到任何关于它等待连接下降。当我缩小Azure角色时,哪些实例会停止?
然而,有一个管理API,您可以访问它来缩减(删除)特定的云服务角色。Delete Role Instances操作删除多个角色实例从云服务的部署。
POST请求
https://management.core.windows.net/<subscription-id>/services/hostedservices/<cloudservice-name>/deployments/<deployment-name>/roleinstances/
使用它,您可以监视您想要删除的实例并以编程方式发送delete命令。这样,在删除实例之前,您可以等待用户完全断开与实例的连接。
参考Microsoft API文档:https://msdn.microsoft.com/library/azure/dn469418.aspx
所以,经过相当多的开发和测试,有一个答案。我们正在使用Kudu进行部署,以便Azure构建和发布Web应用程序。打开Websockets的IIS实例将运行它的Application_End循环并关闭TCP连接。
据我所知,这发生在新站点启动并接受连接之前。因此,不必担心额外的工作时间会被收取费用。当扩展Web应用程序计划(服务器群)时,这似乎也发生在所有 Web应用程序(站点)在计划中,无论它是向上还是向下。
这可能会给我们的用户带来不便,但在服务器端适当关闭并从客户端重新连接应该可以正常工作。
只有一种方法可以知道…测试它。(或者问Azure工程师,但这可能需要很长时间…)
我认为如果有人连接,它不会缩小机器的规模。想象一下,观看一个流,它随机停止连接到另一个服务器?我不认为微软会创建它来断开连接。
第一段提到网络角色:
在Azure管理门户的缩放页面上,您可以手动缩放应用程序,也可以设置参数来自动缩放应用程序。您可以扩展运行Web角色、Worker角色或虚拟机的应用程序。要扩展正在运行Web role或Worker role实例的应用程序,您可以添加或删除角色实例以适应工作负载。
Web应用程序或Web角色需要使用VM。这在列出的第一个要点中有详细说明:
在为应用程序配置伸缩性之前,您应该考虑以下信息:
•您必须将您创建的虚拟机添加到可用性集,以扩展使用它们的应用程序。您添加的虚拟机最初可以打开或关闭,但它们将在缩放操作中打开,在缩小操作中关闭。有关虚拟机和可用性集的详细信息,请参见管理虚拟机的可用性。
项目符号后面的信息详细说明了缩放过程。
关于更多信息,这个链接还提到了vm在web应用程序中的使用。下面的内容可以在Web应用程序概念一节中找到:
Auto Scaling - Web Apps使您能够快速扩展或扩展以处理任何传入的客户负载。手动选择虚拟机的数量和大小,或设置自动缩放以根据负载或计划缩放服务器。
https://azure.microsoft.com/en-us/documentation/articles/app-service-web-overview/