寻求设计负载测试的帮助

时间:2014-12-04 00:03:11

标签: java performance jmeter rabbitmq load-testing

我被赋予了负责测试我的团队设计和构建的软件的任务。它是一个Java Web应用程序,充当我公司生产的所有其他应用程序的API。

这是系统的概要:

1) Application 1 needs information from the database.

2) App 1 produces a request to a rabbit exchange (routing key for the queue that is consumed by the tool I'm testing). 

3) My tool consumes the RabbitMQ queue that App1 pushed to

4) My tool executes the request sent from App1 via the Rabbit queue

5) My tool then sends the response back to App 1 via a Rabbit Exchange/Reply Queue. 

6) App 1 then consumes from the reply queue and handles the response

这是一个非常低级别的视图,因为每个应用程序的许多实例都会发布到并使用队列。

我以前从未加载过任何测试,所以我对可用的概念和工具不熟悉。

现在我正在使用jMeter来发起呼叫并使用回复(我让它像示例中的应用1一样运行,它通过兔子调用并消耗回复)。

以下是我的问题:

1) Is this a viable way to load test? Should I be testing the capacity of the server directly or should I continue going through rabbit since it's a closer to production use case?

2) What is the best way to adjust my rate of production? I've tried doing some throttling via jMeter but when I look at the rabbit graphs the publish rate seems to fluctuate wildly. Example: I tell jMeter to publish at 1000 messages/sec and the graph on the rabbit dashboard goes from 500/sec to 3000/sec. I don't feel like I can accurately get an idea of what we can handle if I can reliably adjust the rate. 

我的计划是:

1) Find the rate at which my application can't pick things off the queue fast enough. (where the rate of publishing to the queue becomes faster than my application can consume them). 

2) Once I know the fastest I can send stuff to the queue I can check the responses for error rate and processing time.

我想通过这样做,我可以弄清楚我们可以发布到队列的最大速率,同时仍然在可接受的错误率内,并了解周转时间。

还有什么我应该找的吗?为了在这方面取得成功,我应该知道负载测试的任何“规则”吗?

谢谢!

1 个答案:

答案 0 :(得分:2)

在我看来,你应该考虑做些事情,

  1. 对于任何复杂系统(包括多个组件)的负载测试,按照组件(App1,Rabbit队列,生产者,消费者)划分负载测试。

    这背后的原因是,在一次测试中,您无法在系统中遇到瓶颈,否则会导致错误的结果。

  2. 在我的团队中,我们曾经有过这样的任务(发布者 - 消费者模型)。没有规则说负载测试你必须使用任何负载测试工具。可以充当负载生成器(Publisher)的简单Java代码和消耗负载(消费者)的简单Java代码就足以进行负载测试。

  3. JMeter是一个不错的选择(免费,可扩展,可靠,在业界已知),但您可以查看LoadRunner,Neoload等。

  4. 恕我直言,你应该分开组件并单独测试它们,这将有助于你找到最大消费者率和最大出版商率的答案。一个简单的Java代码可以为您做到这一点。你不需要JMeter请求。通过这种方式,您可以更好地控制生产率和消费率。

    是的,你的计划是正确的,找到最大值。发布商和消费者可以为您提供最高费率的费率系统吞吐量。在这样做的同时,也要关注系统利用率。

    最后,当您获得稳定系统的测量值时,您可以选择2个选项,

    1. Stress test (when system breaks)
    2. Tune the system to improve the performance and repeat the cycle for new measurements.
    

    我希望现在有些困惑:)