我在 EC2 上有一个后端服务,对 EC2 的请求通过 ALB 路由。
我的后端服务短暂停机,在此期间响应延迟急剧上升。这导致 ALB 上的连接数大量增加。
然而,当我尝试重新部署我的服务(在新节点上)时,我注意到节点会在几分钟的正常运行后关闭(响应会越来越慢,直到一切都开始冻结)。在此期间,对服务的请求数量保持不变,但连接数却不断增加。
EC2 是否可能已饱和,连接数过多,从而导致新节点发生故障?或者 ALB 是否足够了解创建过多到 EC2 的连接以避免这种情况?
答案1
这里可能有很多原因。首先,您的 EC2 实例是否已在应用程序负载均衡器中正确注册为目标,并且被 ALB 注册为健康实例?请记住,在创建新实例时,您必须手动将新实例作为目标添加到 ALB。
您使用了多大尺寸的 EC2 实例,流量来自哪里,实例上运行着什么软件?这些都是重要的问题,您应该在问题中写下这些问题,以便有一个故障排除的起点。实例是否支持 EBS 或 EFS?如果是 EFS,卷的读取速度慢可能是问题所在。您需要在 CloudWatch 中检查 EC2 实例的利用率,因为它们似乎是瓶颈所在。
ALB 不是问题的根源。它只是报告将请求转发到后端和获得响应之间的延迟很高。这意味着您的后端需要花费很长时间才能做出响应。
根据 AWS 支持: 由于 ELB(配置了 HTTP 侦听器时)充当代理(请求标头进入并进行验证,然后发送到后端),因此延迟指标将在标头发送到后端后立即开始滴答,直到后端发送第一个字节响应。
您的 EC2 实例响应缓慢,并且无论出于何种原因都超载,这就是您的问题所在。ALB 无法主动监控实例的 CPU 使用率并主动平衡请求。只要实例运行正常,它就会均匀分布请求。