我们的生产环境包含 2 个 ALB:一个面向公众的 ALB 和一个私有的 ALB。这两个 ALB 都支持 HTTP/2。
现在我有一个支持 HTTP/1.1 的目标组,其中包含 ECS 服务。我观察到的非常奇怪的事情是:
当通过任一 ALB 向此服务发出请求时,大约五分之一的请求会因 504 网关超时而失败。
当我直接向服务的 IP 地址发出请求(通过同一 VPC 中的 EC2 实例)时,没有出现任何此类超时。
同一应用程序的旧版本无需通过任何 ALB 即可运行 504。
ALB 上的超时设置为 30 秒。在应用程序中,它设置为 60 秒(nginx),并且代理服务也具有相同的值。
我比较了两个服务器中的响应标头,但它们是相同的。
我的问题是,我应该把什么视为潜在的罪魁祸首?我知道保持活动警告是一个大问题,但同样,同一应用程序的两个不同版本的行为不同,我发现几乎没有什么可以帮助我调试这个问题。
当前的架构是:
Client -> [AWS ALB] -> [ AWS ECS: Docker Container ]
在[DockerContainer]
我有:
[ nginx ] -> [ application ]
另一个值得注意的点是:我无法在使用相同架构的暂存环境中重现该问题:唯一的区别是它使用 AWS EC2 而不是 ECS 来托管 docker 容器。ECS CPU/内存使用率似乎很低。