缩小 Azure Web 应用程序时打开套接字会发生啥情况?

Posted

技术标签:

【中文标题】缩小 Azure Web 应用程序时打开套接字会发生啥情况?【英文标题】:What happens to open sockets when scaling down Azure web app?缩小 Azure Web 应用程序时打开套接字会发生什么情况? 【发布时间】:2015-08-10 12:32:22 【问题描述】:

我们有一个场景,我们在 Azure 中使用多个 Web 应用程序,当扩大规模时,我知道 Azure 只是启动更多 Web 进程,因此允许连接到多个服务器,有一个广播系统用于同步。问题是,如果我们手动或自动按比例缩小,打开的套接字会发生什么?假设我们有 5 个服务器,每个服务器都有一个开放的 Web 套接字,并且我们缩小到 1 个,那么连接到要删除的服务器的 4 个套接字会发生什么?

作为旁注,如果他们坚持并保持直到套接字与客户端断开连接,Azure 会在那个时间向我收费吗?

如果他们不坚持,这只是确保客户端正确重新连接的问题。

就我目前所见,它似乎一直存在,但这可能只是一个宽限期,而它正在缩小,所以我宁愿在这里得到真正知道的人的回答。

【问题讨论】:

【参考方案1】:

几年前从另一个线程中,它是被删除的最新实例(大部分时间),但我找不到任何关于它等待连接断开的信息。 Which instances are stopped when I scale my Azure role down?

但是,您可以访问一个管理 API 来缩减(删除)特定的云服务角色。

删除角色实例操作删除多个角色实例 来自云服务中的部署。

POST 请求

https://management.core.windows.net/<subscription-id>/services/hostedservices/<cloudservice-name>/deployments/<deployment-name>/roleinstances/

使用它,您可以监控要删除的实例并以编程方式发送删除命令。这样,您可以等待用户完全断开与实例的连接,然后再删除它。

请参阅 Microsoft API 文档: https://msdn.microsoft.com/library/azure/dn469418.aspx

【讨论】:

我想这是一种可行的解决方法,但这需要我们手动处理向上和向下缩放,我不想这样做,而是使用自动缩放。这是一个赞成票,但可能不是一个明确的答案。【参考方案2】:

所以,经过相当多的开发和测试,答案就出来了。我们使用 Kudu 进行部署,以便 Azure 构建和发布 Web 应用程序。已打开 Websocket 的 IIS 实例将运行它的 Application_End 循环并关闭 TCP 连接。

据我所知,这发生在新站点启动并接受连接之前。因此,无需担心额外收费。在扩展 Web 应用程序计划(服务器场)时,所有 Web 应用程序(站点)在计划内 似乎也会发生这种情况,无论它是向上还是向下。

这可能会给我们的用户带来不便,但在服务器端正确关闭并从客户端重新连接后,它应该可以正常工作。

【讨论】:

【参考方案3】:

只有一种方法可以找出答案.. 测试一下。 (或询问 Azure 工程师,但这可能需要很长时间......)

我认为如果有人连接,它不会缩小机器。想象一下观看流并随机停止连接到另一台服务器?我认为 Microsoft 不会创建它来断开连接。

【讨论】:

您的回答是有效的,但我不能凭良心允许这是一个答案,因为它没有回答问题。我将运行我自己的测试,但它们将是任意的,因为它可能是 Azure 将它留在这个或那个宽限期的极端情况。同时我也会请求支持。【参考方案4】:

第一段提到网络角色:

在 Azure 管理门户的“缩放”页面上,您可以手动缩放应用程序,也可以设置参数以自动缩放它。 您可以扩展运行 Web 角色、辅助角色或虚拟机的应用程序。 要扩展运行 Web 角色或辅助角色实例的应用程序,您可以添加或删除角色实例以适应工作负载.

Web 应用程序或 Web 角色需要使用 VM。这在列出的第一个要点中有详细说明:

在为应用程序配置缩放之前,您应该考虑以下信息:

•您必须将您创建的虚拟机添加到可用性集以扩展使用它们的应用程序。您添加的虚拟机最初可以打开或关闭,但它们将在放大操作中打开并在缩小操作中关闭。有关虚拟机和可用性集的详细信息,请参阅管理虚拟机的可用性。

项目符号后面的信息详细说明了缩放过程。

有关其他信息,此链接还提到了将 vm 用于 Web 应用程序。下面的措辞可以在标题为 Web 应用概念的部分中找到:

Auto Scaling - Web 应用程序使您能够快速扩展或扩展以处理任何传入的客户负载。手动选择 VM 的数量和大小,或设置自动扩展以根据负载或计划扩展您的服务器。

https://azure.microsoft.com/en-us/documentation/articles/app-service-web-overview/

【讨论】:

缩小时它在哪里说明了打开的套接字?

以上是关于缩小 Azure Web 应用程序时打开套接字会发生啥情况?的主要内容,如果未能解决你的问题,请参考以下文章

Azure Web 应用程序:Web 套接字在 100 秒后中止

Azure 移动服务与将设备作为服务器的 Web 套接字

Azure 移动服务与将设备作为服务器的 Web 套接字

如何在 azure 中设置安全的 Web 套接字

由于发生套接字错误(10054)而重试同步-Azure [关闭]

Azure Web App Socket Number 有啥限制?