【问题标题】:Is it possible to simulate page requests in Rails using rake?是否可以使用 rake 在 Rails 中模拟页面请求?
【发布时间】:2012-07-08 00:33:40
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: ruby-on-rails performance mongodb heroku redis


    【解决方案1】:

    警告

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

    基本工具

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

    Rails 分析链接

    【讨论】:

    • 很棒的答案,谢谢。澄清一点 - 不会有静态资源甚至 html 页面要返回。有问题的 one 页面将接收一个小的 JSON,(在一个 kb 下)从 redis 获取一个哈希(2-5kb 顶部),然后发回另一个大小约为 3kb~ 的 JSON。所以我不认为缓存会是一个问题。基于此,您推荐我尝试您列出的方法中的哪种方法?
    • 我建议对控制器方法本身进行基准测试,然后使用 ab 验证您的结果。如果存在差异,请调查原因。顺便说一句,如果性能是一个问题,并且您不需要完整的导轨和机架堆栈,那么我强烈建议您查看 goliath。
    • 谢谢。通过阅读一些关于 heroku 如何处理缩放的内容,现在我似乎需要有两个应用程序 - 一个是用于处理少数用户的 rails 应用程序,另一个是类似 goliath 的东西,可以非常快速地提供 api 功能。有没有办法在heroku上同时容纳铁轨和歌利亚?我想这不太可能
    • 您可以通过您的 Procfile 执行此操作,其中您有一个运行 rails 的 Web 服务器,以及一个运行 goliath 的 api 服务器,用于处理来自 rails 的请求。然后您可以单独扩展它们,这是一个非常好的设置,但您必须为每个实例付费。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-02
    相关资源
    最近更新 更多