使用AWS ELB进行无法解释的延迟

时间:2013-12-10 13:13:14

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

我们最近遇到了无法解释的延迟问题,因为我们通过AWS设置重新启动了ELB延迟指标。

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

现在,我们的交通在早晚都有高峰,但这并不能解释我们所看到的情况,即在交通高峰期延迟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;
        }
    }
}

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

谢谢..

1 个答案:

答案 0 :(得分:2)

我不确定它是否在某处记录,但我们已经使用ELB很长一段时间了。在本质上,ELB是负载均衡实例前面的EC2实例,我们的理解是,当您的ELB开始体验更多流量时,亚马逊会将该ELB实例从c1.medium转换为m1.xlarge。

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

再一次,客户不知道亚马逊内部发生了什么,所以你知道他们可能会遇到大量流量,同时你的负载平衡器也会出现狂暴。

您可以通过过度配置来避免这些延迟,但是谁想要花更多钱。

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

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

  2. 您可能无法在生产中执行此类情况,您将不得不通过它运行test traffic。我建议使用loader.io之类的东西。另一种选择是尝试将一些流量部分地发送到haproxy实例,可能使用GSLB(如果您的DNS提供商支持它)