为什么我与 Azure 中的私有服务的连接会超时?

为什么我与 Azure 中的私有服务的连接会超时?

我似乎在 SQL Server 和 MongoDB 副本集中都遇到了这种情况。我每天只遇到少数几次,但我仍然很担心。

尝试打开与远程系统的新连接时发生超时。即使远程系统已启动并响应,也会发生这种情况。我有一个 SQL Server 实例和一个 3 系统 mongodb 副本集。在中等到较高负载下,这种情况似乎偶尔发生。

我正在使用连接池,并且大小应该限制连接(当然是每个进程),也不应该看到超过 1k 个连接,就像我看到尝试连接超时一样。

SQL服务器是windows(当然),mongodb实例在Ubuntu下,客户端是linux和windows下的node.js组合,以及.Net 4.5应用程序。

我正在创建一个更具弹性的(失败前尝试三次)架构,同样的问题也让我担心。

您会在这里寻找什么问题?

答案1

这个问题已经很老了,这可能是一个不同的根本问题,但由于我花了一个多星期的时间来追踪它,它可能会节省一些人的时间,如下所示:

我遇到了一个出现类似错误的问题。在与 Azure 技术支持人员一起深入研究后,他们给出了最佳猜测(他们是没有把握) 是空闲连接会被 Web 应用程序和服务器之间的某些代理终止。这种情况会在大约 4 分钟后发生。并且服务器和客户端都不知道发生了什么。当您尝试在该状态下使用连接时,客户端会发送永远不会到达服务器的数据包。

我最后听说这不会被改变/修复。因此,防止这种情况发生的选项(按理智顺序)是:

  1. 在约 3 分钟时终止服务器上的空闲连接。
  2. 设置客户端在约 3 分钟内处于空闲状态时终止连接。
  3. 通过在客户端上执行一些繁忙的工作来确保您没有空闲连接。

如果连接失败,您再试一次,如果它实际上会创建一个新的连接,那么它将起作用,如果没有,它只会让应用程序等待更长时间才能到达同一点。

如果这确实能彻底解决问题,我将在一周内更新。

编辑:通过终止客户端上的空闲连接和每 2 分钟从服务器发送一次保持活动状态,可以解决此问题。

相关内容