5

希望在此处了解 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;

      }

更新: 我相信我们可以排除以下情况:

  1. 我已验证 DNS 已立即解析(尝试 ping 然后请求(无效),并dig api.mydomain.com立即使用响应)
  2. 应用程序在 1.27 分钟内未收到请求(因此这不是 CPU/数据库延迟问题)。

它似乎介于负载均衡器获取请求和 ec2 实例获取请求之间,但我不确定如何调试它。在响应返回之前,我在 Wireshark 中看到了很多 TCP 重传。

4

1 回答 1

1

可能是因为 VPC 配置不正确!

最近,我遇到了同样的问题,对我来说,路由表是罪魁祸首。我连接到 ALB 的公共子网之一没有将流量路由到 Internet 网关。

因此,只需确保连接到负载均衡器的公有子网的路由表具有到目标范围的 Internet 网关的路由0.0.0.0/0

这篇文章让我检查了我的路由表和其他 VPC 设置。

于 2021-04-22T18:39:19.847 回答