Amazon ec2 测试Amazon EC2、RDS和ELB性能

Amazon ec2 测试Amazon EC2、RDS和ELB性能,amazon-ec2,amazon-web-services,load-testing,performance-testing,amazon-rds,Amazon Ec2,Amazon Web Services,Load Testing,Performance Testing,Amazon Rds,我有一个PHP应用程序,它运行在Amazon的Web服务上。这是一个相对简单的PHP脚本,基本上对SQL数据库进行简单的写入。该数据库是一个Xtra大型RDS实例。PHP在负载平衡器后面的大型EC2实例上运行 我想做的是对我的脚本进行压力测试,以模拟大约800个同时连接的用户(是的,这确实是估计值) 我听说过围城,但我不知道如何使用它来测试我的应用程序。如果我试着从家里的连接上运行它,我不确定我的PC/ADSL是否足够快,能够创建足够的流量来模拟800个用户同时攻击EC2(从而攻击RDS) 是否

我有一个PHP应用程序,它运行在Amazon的Web服务上。这是一个相对简单的PHP脚本,基本上对SQL数据库进行简单的写入。该数据库是一个Xtra大型RDS实例。PHP在负载平衡器后面的大型EC2实例上运行

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

我听说过围城,但我不知道如何使用它来测试我的应用程序。如果我试着从家里的连接上运行它,我不确定我的PC/ADSL是否足够快,能够创建足够的流量来模拟800个用户同时攻击EC2(从而攻击RDS)

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

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

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


Andy

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

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


它们可能会变得非常昂贵,但同样地,旋转大量ec2实例以进行测试(加上您的工程时间)。

我编写了一个脚本,可以帮助您完成所需的内容、细节和源代码

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

现在bug bear已经过时了,要使用ELBs对Amazon运行负载测试,您可能需要了解一些事情

  • 在这种情况下,你很可能需要让亚马逊“预热”一些东西。上一次研究这个问题时,我发现ELB本质上是一个运行在简单实例上的软件负载平衡器。像所有的事情一样,这些实例有一个吞吐量限制,并且往往以每秒40个请求(非常模糊)的速度最大。它们将自动缩放,但其算法不适合负载测试,因此预热是Amazon提前旋转X ELBs,其中X基于您在请求中提供给它们的信息(请参阅我关于每秒请求的第一点,而不是用户)

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


  • 无论您选择何种解决方案,都要非常清楚,您的测试本身可能会成为瓶颈,在指责您正在测试的应用程序之前,您应该首先检查这一点。

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


    我将介绍我们的软件,它可以准确地测试ELB站点。您可以在这里试用免费版本:如果有任何问题,请随时与我们联系。

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

    siege -d 1 -c 10 http://url
    
    这将模拟大约每1秒10个同时发出请求的连接(用户)。 如果HTTP请求和响应的大小足够小,那么即使使用DSL连接,您也可能做得很好。Sazzle将向您显示统计数据,包括平均响应大小,因此您应该能够轻松估计自己的限制。如果连接的大小太大,则使用单独的EC2实例的想法肯定会有帮助工作正常。可能一个实例就足够了,但您可能必须增加运行围城的计算机上的文件描述符限制(否则您将耗尽它们):

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

    siege -d 1 -c 800 -i -t 2m -f urls.txt
    
    将模拟800个用户每1秒发出请求2分钟。URL将从URL.txt文件中随机选择(-i)

    我建议运行两个测试,逐渐增加连接的数量

    当它完成时,或者使用ctrl+C手动终止它时,您应该会得到很好的统计信息。 如果测试将产生比当前多得多的流量,您将不得不请求AWS支持的ELB预热。ELB在响应流量峰值时扩展吞吐量的速度较慢


    默认情况下,Sakege使用HTTP 1.1,因此如果您的服务器使用持久连接,它将工作。

    很棒的工具!我喜欢您可以延迟每个用户每秒只进行1次访问,这是ab的问题,它只是轰炸了服务器并使其崩溃。
    siege -d 1 -c 800 -i -t 2m -f urls.txt