【问题标题】:Azure Http connection gets interrupted after 5 minutesAzure Http 连接在 5 分钟后中断
【发布时间】:2018-09-03 07:21:56
【问题描述】:

我们在 Azure 的同一个 VM 上设置了多个 RESTful API。 这些网站在 IIS 上的 Kestrel 中运行。 它们受到带有防火墙的 azure 应用程序网关的保护。

我们现在有至少会运行 20 分钟的请求。 请求在 Kestrel 上不间断地运行全长(在日志中可见),但发送者要么在 5 分钟后得到“套接字挂起”,要么永远运行,即使请求在 kestrel 中完成也是如此。即使发送方的连接中断,请求也会在 Kestrel 中继续。

我做了什么:

  • 编写了一个小示例应用程序,该应用程序在一定数量后返回 秒排除我们的网站是问题。
  • 在虚拟机中运行请求(到本地主机):没有问题,收到响应。
  • 在 Azure 中将请求从一个虚拟机运行到另一个虚拟机:请求永远运行。
  • 从 Azure 外部运行请求:请求在 5 分钟后终止 使用“套接字挂断”。
  • 检查设置超时:Kestrel:50m,IIS:4000s,ApplicationGateway-HttpSettings:3600

请求已通过 Postman 测试,

Azure 中是否隐藏了另一个请求或连接超时?

【问题讨论】:

    标签: azure


    【解决方案1】:

    我们现在有至少会运行 20 分钟的请求。

    这是一个可怕的架构,它应该被重写为异步的。不要把这个当成个人,它就是这样。考虑返回带有Location 标头的202 Accepted 以轮询结果。

    您很可能遇到了 Azure SNAT 层超时 —

    公共IP配置边栏选项卡下更改它。

    【讨论】:

    • 感谢您的想法。 PublicIP 上的超时设置为 4m 是正确的。但这并没有解决问题。
    • 是应用网关公网IP吗?
    • 是的,VM PublicIds 已设置为最大值。只有 App Gateway Public Id 具有默认值。它已设置为最大值,但问题仍然存在。
    • 如果您通过 VM 的公共 IP 发出请求,同样的处理方式?除了 HTTP 超时之外,App Gateway 可能还有 TCP 超时,不确定,请检查 resources.azure.com 下的 ARM 定义。
    • 我们放弃并正在重构该端点以使其异步。感谢您的帮助。
    【解决方案2】:

    所以不久前我遇到了这样的事情:

    对我们来说,问题可能是其他答案所暗示的超时,但解决方案是(而不是增加超时)在我们的 postgres 数据库前面添加 PGbouncer 以管理连接并确保在超时之前启动一个新连接火灾。

    不确定您的后端连接是什么样的,但类似的东西(后端数据库代理)可以让您更有能力调整连接/重新连接。

    对我们来说,我们运行的是 AKS(azure Kubernetes 服务),但所有 azure 公共 ip 都遵循相同的规则,导致类似的问题。

    虽然这不是一个答案,但我知道还有两种类型的公共 IP 地址,其中一种被认为是“基本”并且没有相同的可配置性,可能与基本和标准之间的差异有关公共 ips / 负载均衡器?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-11-11
      • 1970-01-01
      • 1970-01-01
      • 2018-09-20
      • 1970-01-01
      • 1970-01-01
      • 2015-05-03
      • 2021-08-10
      相关资源
      最近更新 更多