amazon-web-services - AWS ELB 出现无法解释的延迟

标签 amazon-web-services nginx amazon-ec2 uwsgi amazon-elb

我们最近遇到了无法解释的延迟问题,这反射(reflect)在我们的 AWS 设置的 ELB 延迟指标上。

我们的设置包括 ELB 后面的 3 台 EC2 c1.medium 机器(每台都运行 NGINX,与机器上的 uWSGI 处理程序通信)。

现在,我们的流量在早上和晚上出现高峰,但这并不能解释我们所看到的情况,即在流量高峰期间出现 10 秒的延迟峰值。

我们的 NGINX 日志和 uWSGI 统计数据显示,我们没有对任何请求进行排队,并且响应时间稳定在 500 毫秒以下。

一些配置详细信息:

ELB监听8443端口并传输到8080

NGINX 在每个 EC2 上都有以下配置:

worker_processes 2;
pid /var/run/nginx.pid;

events {
    worker_connections 4000;
    multi_accept on;
    use epoll;
}

http {
    server {
        reset_timedout_connection on;
        access_log off;
        listen 8080;
        
        location / {
            include uwsgi_params;
            uwsgi_pass 127.0.0.1:3031;
        }
    }
}

我想知道是否有人经历过类似的事情或者可以提供解释。

谢谢你..

最佳答案

我不确定它是否在某个地方有记录,但我们已经使用 ELB 有一段时间了。本质上,ELB 是您要进行负载平衡的实例之前的 EC2 实例,我们的理解是,当您的 ELB 开始经历更多流量时,Amazon 会执行一些魔法,将该 ELB 实例从 c1.medium 转变为 m1.xlarge。

因此,当您开始看到峰值时,亚马逊可能会在较小的 ELB 实例与较大的 ELB 实例之间进行一些转换,并且您会看到这些延迟。

同样,客户不知道亚马逊内部发生了什么,因此据您所知,在您达到峰值的同时,他们可能会遇到巨大的流量,并且他们的负载平衡器会变得疯狂。

您可能可以通过过度配置来避免这些延迟,但谁愿意花更多的钱。

如果您有时间和资源,我会推荐以下几件事:

  1. 在您的环境(一些大型实例)前面设置一个 haproxy 实例并以这种方式监控您的流量。 Haproxy 有一个命令行(或 Web)实用程序,可让您查看统计信息。当然,您还需要监控实例的 CPU 和内存等信息。

  2. 您可能无法在生产环境中执行此操作,在这种情况下,您必须通过它运行测试流量。我建议使用类似 loader.io 的东西。另一种选择是尝试将部分流量发送到 haproxy 实例,也许使用 GSLB(如果您的 DNS 提供商支持)

关于amazon-web-services - AWS ELB 出现无法解释的延迟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20495541/

相关文章:

Android 集成 Amazon S3 和身份池

amazon-web-services - AWS Pipeline部署cloudformation

Go 应用程序在 NGINX 代理 : HTTP 502 后面不工作

regex - 根据 url/nginx 设置内容处置

amazon-web-services - Lambda 尝试启动 ec2 实例时出现访问问题

amazon-web-services - 带有 Docker 容器的 AWS Cloudwatch 日志 - NoCredentialProviders : no valid providers in chain

amazon-web-services - 缺少必需参数 : Missing required key 'Message' in params

nginx - 无法从 nginx 代理到 kibana

django - 在 EC2 上使用 nginx 设置 django

django - 使用 Django 在部署的 EC2 服务器上托管 PostgreSQL 的 AWS Elastic Beanstalk