在我的系统上开启和关闭请求需要很长时间

在我的系统上开启和关闭请求需要很长时间

已编辑:我的 AWS 系统中有一个问题。每隔几个请求几乎需要 130 秒才能得到答复。当我说几个时,我的意思是 5 到 25 秒左右。通常,如果您取消缓慢的请求并再次发送,它就会快速响应。我还注意到这种情况发生在任何请求上,而不仅仅是特定的请求。服务器和后端看起来没有超载。系统如下:

ALB with sticky sessions | 2 Web servers | DB on RDS

使用 curl 时系统大多数时候响应良好,但当需要很长时间时,这是响应输出:

这是对任何 URL 的卷曲测量时间。

    time_namelookup:  0.004136
       time_connect:  130.117558
    time_appconnect:  130.125254
   time_pretransfer:  130.125340
      time_redirect:  0.000000
 time_starttransfer:  130.172553
                    ----------
         time_total:  130.172615

除此之外time_connect,请求没有任何问题,因为页面随后就会加载。系统的正常响应时间在 0.5 秒以下。

我正在阅读这篇文章,文档指出time_connect,与

“time_connect 是从客户端角度进行的 TCP 三次握手。它在客户端发送 ACK 后立即结束 - 它不包括该 ACK 到达服务器所花费的时间。它应该接近到服务器的往返时间 (RTT)...”

这是取自这里。

补充:系统本身是运行在 ec2 实例上的 nginx-Python,在 RDS 上使用 MySQL DB,它提供来自 s3 的静态内容,用户也可以上传自己的文件。在本地主机上的服务器(nginx-python ec2 实例)中,curl 始终正常,不会花费很长时间。这让我相信这与 LB 和 nginx 在 python 主机上监听有关。

补充:我也尝试过只留下后端的一台机器,但问题仍然没有消失。

我在 AWS Cloudwatch、应用程序日志或数据库监控上找不到任何有意义的信息。关于我应该调查什么或如何解决此问题,您有什么想法吗?

编辑 3 感谢以下评论:

# curl -v -I -L -k -w "@time.txt" -s "https://my-site.com/url/"
*   Trying "
*   Trying IP.ONE.from.AWS...
* connect to IP.ONE.from.AWS port 443 failed: Connection timed out
* TCP_NODELAY set
* Connected to my-site.com (IP.TWO.from.AWS) port 443 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
* successfully set certificate verify locations:
*   CAfile: /etc/ssl/certs/ca-certificates.crt

IP-ONE-from-AWS 和 IP-TWO-from-AWS 是我应该连接的 AWS 区域的 IP。

答案1

您已将负载均衡器放置在一个公共子网和一个私有子网上,这是一种无效配置,并且会导致与您观察到的类似的行为,因为均衡器为其所连接的每个子网分配了至少一个公共IP...但根据定义,除非子网是公共子网,否则公共IP地址不起作用。

需要连接面向 Internet 的负载均衡器仅有的到公共子网。它们不需要连接到其后面的实例所部署(或应该部署)的私有子网,或任何其他私有子网。

或者,您可能打算将平衡器放置在两个公共子网上,但其中一个子网的 VPC 路由表或网络 ACL 配置错误,这具有相同的净效果并且在您连接到该 IP 地址时阻止流量。

相关内容