希望在此处了解 AWS Classic 负载平衡。我有一个在经典 ELB 后面运行的弹性 beanstalk Web 应用程序,我目前是唯一的流量(正在开发中)。当我发送请求时,第一次总是需要 1.26 分钟。如果我在它立即响应后不久发送另一个请求。但是,如果我等待几分钟,它将恢复到 1.26 分钟的响应时间。
我已经尝试启用和禁用跨区域负载平衡和粘性会话,但响应时间没有改变。
我也尝试过从不同的进程运行请求,并且在 1 个进程上成功的 1 个请求不会使另一个进程立即响应(它们的第一个请求都很慢)。
我希望了解为什么会发生这种情况,以及如何防止所有用户在第一次请求时发生这种情况?
我有 2 个可用区,每个运行应用程序的区域中有 1 个 ec2 实例。我还将它们放在私有子网中,并将负载均衡器放在对应于每个可用区的 2 个公共子网中。
我也将 nginx 用于弹性豆茎,这是我的配置:
upstream api {
server 127.0.0.1:3000;
}
server {
listen 8080;
server_name api.mydomain.com;
if ($http_x_forwarded_proto = "http") {
return 301 https://$host$request_uri;
}
if ($time_iso8601 ~ "^(\d{4})-(\d{2})-(\d{2})T(\d{2})") {
set $year $1;
set $month $2;
set $day $3;
set $hour $4;
}
access_log /var/log/nginx/healthd/application.log.$year-$month-$day-$hour healthd;
access_log /var/log/nginx/access.log main;
location / {
proxy_pass http://api;
proxy_set_header Connection "";
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
gzip on;
gzip_comp_level 4;
gzip_types text/html text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;
}
更新: 我相信我们可以排除以下情况:
- 我已验证 DNS 已立即解析(尝试 ping 然后请求(无效),并
dig api.mydomain.com
立即使用响应) - 应用程序在 1.27 分钟内未收到请求(因此这不是 CPU/数据库延迟问题)。
它似乎介于负载均衡器获取请求和 ec2 实例获取请求之间,但我不确定如何调试它。在响应返回之前,我在 Wireshark 中看到了很多 TCP 重传。