AWS 弹性负载均衡器基本问题

AWS 弹性负载均衡器基本问题

我在负载均衡器后面有一组 EC2 t1.micro 实例,每个节点在开始出现问题之前可以管理大约 100 个并发用户。

我认为如果我有 2 个这样的实例,我的网络就可以管理 200 个并发用户……显然不行。当我真正用 275 个并发用户猛击服务器 (blitz.io) 时,它的行为与只有一个节点时相同。响应时间从 400 毫秒缩短到 1.6 秒(对于单个 t1.micro 来说是预期的,但不是 6)。

所以问题是,我是不是做错了什么,或者 ELB 实际上毫无价值?有人对此有什么见解吗?

AB 日志:
负载均衡器(3x m1.medium)
文档路径:/ping/index.html
文档长度:185 字节

并发级别:100
测试时间:11.668 秒
完成请求数:50000
失败请求:0
写入错误:0
非 2xx 响应:50001
总共传输:19850397 字节
HTML 已传输:9250185 字节
每秒请求数:4285.10 [#/秒](平均)
每个请求的时间:23.337 [毫秒](平均)
每个请求的时间:0.233 [毫秒](所有并发请求的平均值)
传输速率:已接收 1661.35 [千字节/秒]

连接时间(毫秒)
              最小平均值[+/-标准差] 中位数 最大值
连接:1 2 4.3 2 63
处理:2 21 15.1 19 302
等待:2 21 15.0 19 261
总计:3 23 15.7 21 304

单实例(1x m1.medium 直接连接)

文档路径:/ping/index.html
文档长度:185 字节

并发级别:100
测试时间:9.597 秒
完成请求数:50000
失败请求:0
写入错误:0
非 2xx 响应:50001
总共传输:19850397 字节
HTML 已传输:9250185 字节
每秒请求数:5210.19 [#/秒](平均)
每个请求的时间:19.193 [毫秒](平均)
每个请求的时间:0.192 [毫秒](所有并发请求的平均值)
传输速率:已接收 2020.01 [Kbytes/sec]

连接时间(毫秒)
              最小平均值[+/-标准差] 中位数 最大值
连接:1 9 128.9 3 3010
处理:1 10 8.7 9 141
等候:1 9 8.7 8 140
总计:2 19 129.0 12 3020

答案1

微型实例并非为持续负载而设计的。它们允许 CPU 爆发,但在负载过重的短时间(例如 15-30 秒)后,它们将严重上限。

如果您想要任何有用的基准,请至少用一个小实例尝试一下。

答案2

确保您没有意外选择粘性负载平衡。这会导致同一用户被定向到同一实例。

微型实例并非为承受重负载而设计的。它们是为了应对 CPU 爆发而设计的。不过我可以向你保证,微型实例可以很好地与弹性负载平衡配合使用。

别忘了还有其他方法可以增加网站可以处理的流量。例如 Varnish

答案3

检查单个服务器上的负载。当流量来自单个 IP 时(如 AB 测试用例中所示),ELB 不会将流量均衡地分配到所有实例:它只会从一个实例切换到另一个实例。最终负载不可能是单个实例的两倍,但平均而言,这无论如何都比将所有流量导向单个实例要好(因为这样可以减少负载并加快响应速度)

答案4

这里的问题是 ELB 本身。前段时间我们进行了一些性能测试,发现当每秒请求数超过 250 个时,ELB 开始出现很大的延迟。我们在测试 ELB 时发现了这一点,然后针对 ELB 后面的一个实例进行这些测试 - 该实例(m1.large 实例类型)在每秒 250 个请求的情况下运行良好(尽管有一些负载),而后面有几个实例的 ELB 正在崩溃。同时,在测试 ELB 时,实例的负载很小。

我的建议是获取一个可充当其他实例的负载均衡器的实例(最好为此配置 nginx),并且不使用任何 ELB。

相关内容