0

我在亚马逊的 AWS 服务器上托管一个 Web 应用程序。我目前正在使用 JMeter 对应用程序进行负载测试。我的主要问题似乎是,当我通过弹性负载均衡器 (ELB) 访问 Amazon 服务器而不是直接访问服务器时 - 我的吞吐量似乎达到了上限。

如果我直接点击我的 Web 应用程序 - 对于每台服务器,我能够实现每台服务器 50 RPS 的吞吐量。

如果我通过 Amazon 的 ELB 访问我的 Web 应用程序 - 我只能达到 50 RPS(总计)的最大吞吐量

我想知道是否有人在通过 Amazon 的 ELB 使用 Jmeter 进行负载测试时遇到过类似的行为。

有关更多上下文,我的 Web 应用程序是一个 REST 应用程序,它允许用户通过 HTTP 请求下载内容(~150 kb)。

我正在使用以下标志“-Dsun.net.inetaddr.ttl=0”运行 Jmeter,并使用 10 个线程运行它。我尝试在不同机器上使用多个客户端运行这些测试。

感谢您提前提供任何帮助。

4

3 回答 3

0

最可能的原因是 jmeter 的 DNS 缓存。ELB 根据自动缩放的设置方式返回附加服务器的 IP,但 JMeter 不使用这些附加服务器。这个问题可以通过确保Jmeter不缓存DNS结果来解决……

ELB 是一个名称,而不是 IP,并且可能会受到 DNS 缓存的影响。确保在启动 JMeter 时使用“-Dsun.net.inetaddr.ttl=0”

http://wiki.apache.org/jmeter/JMeterAndAmazon

于 2014-01-05T07:10:13.790 回答
0

负载均衡器可能很难测试,因为它们可能具有不同的流量编排机制,具体取决于来源。最常用的方法来区分请求的来源并将其重定向到同一主机,该主机服务于先前的请求是 cookie。您可以查看HTTP Cookie 管理器以正确操作您的 cookie,并确保每个测试线程或线程组都有不同的 cookie(取决于您的用例)。另一个不稳定的区域是源主机 IP。您可能需要将每个测试线程绑定到不同的 IP 地址,以便访问负载均衡器后面的不同服务器。关于 Amazon LB,DNS 也可能存在一些问题。关于如何测试 Amazon ELB 的有用指南

于 2013-10-21T11:57:57.290 回答
0

一个非常晚的回复,与原始问题略有不同,但我希望这可以帮助其他人,因为我花了一段时间才弄清楚。我最初的问题不是 ELB 导致吞吐量降低,而是引入了 HTTP 503 错误。实际上,与直接查询 Web 应用程序相比,ELB 提高了我的吞吐量,尽管即使进行了 1 小时的测试,至少可以说结果是零星的。

首先,ELB 正在进行两阶段负载平衡。第一个负载平衡是跨 ELB 本身。这是通过将多个 IP 地址与 AWS 为您预置的 ELB 提供的主机名相关联来完成的。第二个当然是跨 ELB 后面的应用程序实例。

不想冒犯 SO 之神,这是一篇非常有用的文章。

https://blazemeter.com/blog/dns-cache-manager-right-way-test-load-balanced-apps

其中最有用的信息是使用 JMeter 中的 DNS 缓存管理器模块。这将查询多个 DNS 服务器,并清除您的 DNS 缓存。

我实现了该模块,然后设置了 Wireshark,过滤了属于 ELB 主机名的两个 IP 地址,果然,它查询了两个 IP 地址,尽管显然其中一个优于另一个。

这并没有太大的区别,至少在短期测试中没有。

当我调整 ELB 健康设置时,真正的区别(吞吐量增加了 2-3 倍)出现了。我最初的错误率很高,但是在降低了不健康阈值和健康检查之间的间隔之后,我的错误率急剧下降。

此外,虽然我所有其他测试的持续时间都是 60 到 90 分钟,但这次是 8 小时。我开始时吞吐量不错,然后很快下降(大约 2/3)。大约 20 分钟或更长时间后,吞吐量开始回升,到测试结束时,它的持续吞吐量大约是我在没有 ELB 时得到的吞吐量的 5 倍(这与它很快下降时的吞吐量相似开始此测试后)。

于 2016-01-05T14:46:25.513 回答