3

我一直在从事一个对我来说不寻常的 Rails 项目,从某种意义上说,它不会使用 MySQL 数据库,而是会使用 mongoDB + Redis。

该应用程序非常简单 - 从 mongoDB 到 Redis 的“启动”数据,之后 rails 将准备好接受来自用户的请求,这些请求主要包括从 redis 中提取数据,(我被告知它会非常快这)进行快速计算并将一些数据发送回给用户。运气好的话,这将每秒发生约 1500-4500 次。

在用户军队的力量降到服务器上之前,我想知道是否有一种方法可以在内部以某种方式“模拟”页面请求 - 比如运行一个 rake 任务来简单地每秒执行该页面 N 次或类似的东西?

如果没有,有没有办法测试该负载,然后对请求进行计时以大致了解大多数用户将看到的延迟?

4

1 回答 1

5

警告

性能测试是一个非常广泛的主题,正确的工具通常取决于您需要的结果的类型和质量。作为您必须处理的问题的一个示例,请考虑如果您为特定控制器操作编写基准规范并连续调用该方法 1000 次会发生什么。这可能会很好地了解该控制器方法的性能,但它可能会进行 1000 次相同的 redis 或 mongo 查询,其结果可能会被数据库驱动程序缓存。这也忽略了您的 Web 服务器响应和提供作为请求的一部分的静态资产所花费的时间(这可能没问题,特别是如果您对此进行了其他测试)。

基本工具

  • ab或 ApacheBench是一个简单的命令行工具,可用于测试应用程序的吞吐量和速度。当我想在 Web 服务器上发送一千个请求或测试我的应用程序可以同时处理多少个请求时(例如比较 mongrel、unicorn、thin 和 goliath 时),我通常会首先进行此操作。因为所有请求都来自同一台服务器,所以这对于少量请求是有利的,但是随着请求数量的增长,您将受到测试机器上的资源(网络堆栈、cpu 和内存)的限制。
  • Benchmark是一个标准的 ruby​​ 类,非常适合快速输出一些分析信息。它也可以与Test::UnitRSpec一起使用。如果你想要一个 rake 任务来做一些快速的基准测试,这可能是开始的地方
  • mechanize- 我喜欢使用mechanize快速编写与页面交互的脚本。它处理 cookie 和表单,但默认情况下不会去抓取图像等资产。如果您要进行自己的测试,它可能是一个很好的工具,但不应该是第一个使用的工具。
  • 还有一些工具可以模拟与站点交互的实际用户(他们将像浏览器一样下载资产,并且可以配置为模拟几个不同的用户)。最值得注意的是The GrinderTsung。虽然仍处于开发阶段,但我目前正在研究tsung-rails,以便更轻松地使用 tsung 自动化 Rails 负载测试,如果您选择朝这个方向发展,我会很乐意帮助您:)

Rails 分析链接

于 2012-07-08T06:45:31.787 回答