【发布时间】:2020-01-12 08:15:42
【问题描述】:
我试图解决的原始问题是,当负载均衡器开始将请求转发到新初始化的 ec2 实例时,对该新实例的第一个请求大约需要 10 秒。后续请求很好(同一请求约 100 毫秒)。在我替换负载均衡器中的 ec2 实例后,我还观察到浏览器需要很长时间才能加载 Web 应用程序。我认为这两个问题的根本原因可能相同,并且由于后一个问题更易于解释和测试,因此我将提供有关该问题的详细信息。
我在 AWS 中为此测试设置了以下基础设施:
- AMI 包含托管在 IIS 中的 Web 应用程序
- 指向具有所需容量 = 1 的 AMI 的 ASG
- 具有适当健康检查的目标群体
- 应用负载平衡器
这是我运行的测试:
- 终止 ASG 中的 ec2 实例
- 等待 ASG 替换 ec2 实例
- 等到 ASG 报告该新实例运行状况良好
- 在 Incognito Chrome 浏览器中通过 ec2 实例 IP 直接加载 Web 应用程序(无负载平衡器) - 加载时间
- 通过 Incognito Chrome 浏览器中的负载平衡器加载 Web 应用程序 - 大约需要 20 秒
我可以重复这个测试一段时间,通常会得到相似的结果。最终,看起来像是“点击”了一些东西,网站开始通过负载平衡器快速加载。
什么可能导致这种行为?我们可以在负载均衡器配置中进行更改以解决此问题吗?如上所述,当通过 ec2 IP 地址直接访问时,Web 应用程序加载速度非常快,因此这不是应用程序本身的问题。
【问题讨论】:
-
您在 LB 中的健康检查设置是什么?
-
绑定到 LB 的目标组在应用程序的 *.aspx 页面上定义了健康检查。我认为我们在该健康检查上使用默认设置:协议 = HTTP,端口 = 流量端口,健康阈值 = 5,不健康阈值 = 2,超时 = 5,间隔 = 30,成功代码 = 200。ASG 具有健康检查类型= EC2 和健康检查宽限期 = 300。我认为这就是所有健康检查设置。如果我忽略了什么,请告诉我。
标签: amazon-web-services amazon-ec2 aws-load-balancer