ALB 导致额外的 +150ms 延迟问题解决方案

47次阅读
没有评论

问题描述

在设置了一个应用负载均衡器(ALB)和 Elastic Container Service(ECS)堆栈后,注意到 ALB 导致了延迟问题。直接请求 Fargate 实例的延迟大约为 15 毫秒,但请求 ALB 的 DNS 或公共 IP 的延迟为约 170 毫秒。

奇怪的是,使用 桌面版 Safari 和所有的 移动浏览器 测试的延迟为约 15 毫秒,但不适用于 桌面版 Chrome、curl 或 Postman(延迟约为 170 毫秒)。

另一个奇怪的现象是,ALB 表现出一种热身效应,在一些空闲时间后,延迟甚至增加到 2 秒以上,然后在 1~3 个请求后收敛到 170 毫秒,但 Fargate 实例没有这种行为。下面是测试结果:

用户想要寻找延迟问题的原因,并请教可能的解决方案。

编辑: 从 ALB 日志 中可以看出,request_processing_timetarget_processing_timeresponse_processing_time 都小于 1 毫秒。问题的根源是什么?我不知道。 ¯\(°_o)/¯

这个问题在 这些帖子 中有类似的情况,然而,我所有的公共子网都使用了相同的互联网网关。

解决方案

请注意以下操作可能因环境和版本差异而有所变化,做任何更改前请先备份。

方案1:检查网络配置

首先,确保网络配置没有问题,以排除网络方面的可能性。检查以下几个方面:

  1. 子网设置: 确保所有的公共子网都使用了相同的互联网网关,以避免不同子网之间的网络延迟差异。

  2. 路由表: 检查 VPC 的路由表,确保它们正确地将流量引导到 ALB。

方案2:优化容器与实例

考虑优化容器和实例的配置,以降低延迟。

  1. 容器资源: 确保容器的资源分配足够,避免资源不足导致延迟。

  2. Fargate 实例类型: 考虑使用更快速的 Fargate 实例类型,以提高性能。

  3. Fargate 网络模式: 考虑使用 Fargate 的 awsvpc 网络模式,以获得更低的网络延迟。

方案3:调整 ALB 配置

尝试调整 ALB 的配置,以改善延迟问题。

  1. 连接保持时间: 考虑增加 ALB 的连接保持时间,以减少频繁的连接建立,从而降低延迟。

  2. 连接空闲时间: 调整连接的空闲时间,以避免长时间不活动的连接被关闭,从而减少重新建立连接的开销。

方案4:使用 CDN

考虑使用内容分发网络(CDN),将静态资源缓存到离用户更近的边缘节点,以降低加载时间和延迟。

方案5:压力测试和监控

进行压力测试和监控,以了解系统在不同负载下的性能表现,从而确定是否需要进一步的优化。

总结

在排除了网络配置问题后,你可以优化容器和实例的配置,尝试调整 ALB 的设置,并考虑使用 CDN 来降低延迟。通过这些步骤,你可以提升系统的性能并减少延迟问题。如果问题仍然存在,建议进行更详细的性能分析和调优。

正文完