【问题标题】:Testing Amazon EC2, RDS and ELB performance测试 Amazon EC2、RDS 和 ELB 性能
【发布时间】:2012-07-28 10:41:27
【问题描述】:

我有一个在亚马逊网络服务上运行的 PHP 应用程序。这是一个相对简单的 PHP 脚本,它基本上对 SQL 数据库进行简单的写入。此数据库是一个超大型 RDS 实例。 PHP 在负载均衡器后面的大型 EC2 实例上运行。

我想做的是对我的脚本进行压力测试,以模拟大约 800 个同时连接的用户(是的,这确实是估计值)。

我听说过 Siege,但我不确定如何使用它来测试我的应用程序。如果我尝试在家中通过连接运行它,我不确定我的 PC / ADSL 是否足够快以创建足够的流量来模拟 800 个用户同时攻击 EC2(因此是 RDS)。

是否建议在另一个区域中启动另一个 EC2 实例来简单地“围攻”我的应用程序?或者可能运行 2 个 EC2 实例,每个实例都有 400 个用户!?

希望这将彻底测试负载平衡、RDS 和 EC2。

有人有过这种高并发用户测试的经验吗?

安迪

【问题讨论】:

    标签: amazon-ec2 amazon-web-services load-testing performance-testing amazon-rds


    【解决方案1】:

    我写了一个脚本,可以帮助你满足你的需要,详情here,来源here

    但首先,实际上,这是最重要的事情,您需要考虑什么定义了“用户”。虽然从描述性的角度来看似乎很明显,但从技术角度来看,您需要开始谈论每秒请求数。

    现在这个问题已经解决了,要使用 ELB 对 Amazon 运行负载测试,您可能想知道几件事。

    1. 在这种负载下,您很可能需要要求亚马逊“预热”物品。上次我研究这个时,我发现 ELB 本质上是一个在简单实例上运行的软件负载均衡器。像所有事物一样,这些实例具有吞吐量限制,并且往往会在每秒 40 个请求左右(非常模糊)达到最大值。它们会自动缩放,但此算法不适合负载测试,因此预热是亚马逊预先启动 X ELB,其中 X 基于您在请求中提供给它们的信息(请参阅我关于每秒请求数的第一点,而不是用户)。

    2. ELB 可以缓存 DNS,这在负载测试中可能会导致问题。如果您的测试工具是基于 Java 的(如 JMeter),请使用:-Dsun.net.inetaddr.ttl=0

    无论您选择哪种解决方案,请务必注意您的测试本身可能会成为瓶颈,您应该先检查这一点,然后再指责您正在测试的应用程序。

    【讨论】:

      【解决方案2】:

      有许多基于云的负载测试服务可用,包括

      http://blazemeter.com http://www.neustar.biz/enterprise/web-performance

      它们可能会变得非常昂贵,但话又说回来,启动多个 ec2 实例进行测试(加上您的工程时间)也是如此。

      【讨论】:

        【解决方案3】:

        不要放弃围攻。它是一个简单但非常强大的负载测试工具。基本用法示例可能是:

        siege -d 1 -c 10 http://url
        

        这将模拟大约每 1 秒发出请求的 10 个同时连接(用户)。 如果您的 HTTP 请求和响应的大小足够小,那么您可能会很好 - 即使使用您的 DSL 连接。 Siege 将向您显示统计数据,包括平均响应大小,因此您应该能够轻松估计您的限制是多少。如果连接的大小太大,那么使用单独的 EC2 实例的想法肯定会很好用。可能一个实例就足够了,但是您可能必须增加正在运行 siege 的机器上的文件描述符限制(否则您将用完它们):

        sysctl -w fs.file-max=100000
        

        如果您想使用多个 URL 进行测试,您可以将它们放在一个文本文件中并告诉 siege 将其用作目标:

        siege -d 1 -c 800 -i -t 2m -f urls.txt
        

        将模拟 800 个用户每 1 秒发出请求,持续 2 分钟。 URL 将从 urls.txt 文件中随机选择 (-i)。

        我建议运行几个测试,逐渐增加连接数。

        当它完成或者你用 ctrl+C 手动终止它时你应该得到很好的统计数据。 如果测试会产生比您当前拥有的更多的流量,您将必须请求 AWS 支持的 ELB 预热。 ELB 在响应流量高峰时扩展吞吐量的速度很慢。

        默认情况下,Siege 使用 HTTP 1.1,因此如果您的服务器使用持久连接 - 它会起作用。

        【讨论】:

        • 很棒的工具!我喜欢你可以延迟每个用户每秒只做 1 个,这是我对 ab 的问题,它只是轰炸了服务器并使其崩溃。
        【解决方案4】:

        有许多工具可以从云中生成负载 - 这可能是您想要做的(这比设置自己的负载引擎要容易得多)。一定要选择一个可以处理 DNS 负载平衡的...许多在测试期间无法处理新的 DNS 条目,因此不能准确地测试 ELB 应用程序。上面对 JMeter 的建议有所帮助,但仍不完全准确,因为一旦新 IP 可用,更大百分比的 VU 将切换到新 IP。真实用户将使用他们开始使用的 IP,只有新用户会使用新添加的 IP。

        我将改进我们的软件,它可以准确地测试 ELB 站点 - Web Performance Load Tester。您可以在这里试用免费版本:http://www.webperformance.com/load-testing/free-load-tester-lite.html,如有任何问题,请随时与我们联系。

        【讨论】:

          猜你喜欢
          • 2013-02-25
          • 1970-01-01
          • 2012-03-02
          • 2016-03-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多