我们最近遇到了无法解释的延迟问题,因为我们通过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;
}
}
}
我想知道是否有人经历过类似的事情,或者可能提供解释。
谢谢..
答案 0 :(得分:2)
我不确定它是否在某处记录,但我们已经使用ELB很长一段时间了。在本质上,ELB是负载均衡实例前面的EC2实例,我们的理解是,当您的ELB开始体验更多流量时,亚马逊会将该ELB实例从c1.medium转换为m1.xlarge。
因此,当您开始看到峰值时,亚马逊会在较小的ELB实例与较大的ELB实例之间进行一些转换,并且您会看到这些延迟。
再一次,客户不知道亚马逊内部发生了什么,所以你知道他们可能会遇到大量流量,同时你的负载平衡器也会出现狂暴。
您可以通过过度配置来避免这些延迟,但是谁想要花更多钱。
如果你有时间和资源,我会推荐几件事:
在您的环境(某些大型实例)前设置haproxy实例并以此方式监控您的流量。 Haproxy有一个命令行(或web)实用程序,可以让您查看统计信息。当然,您还需要监视实例以获取CPU和内存等内容。
您可能无法在生产中执行此类情况,您将不得不通过它运行test traffic
。我建议使用loader.io之类的东西。另一种选择是尝试将一些流量部分地发送到haproxy实例,可能使用GSLB(如果您的DNS提供商支持它)