Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 是否可以使用rake在Rails中模拟页面请求?_Ruby On Rails_Performance_Mongodb_Heroku_Redis - Fatal编程技术网

Ruby on rails 是否可以使用rake在Rails中模拟页面请求?

Ruby on rails 是否可以使用rake在Rails中模拟页面请求?,ruby-on-rails,performance,mongodb,heroku,redis,Ruby On Rails,Performance,Mongodb,Heroku,Redis,我一直在从事一个rails项目,这对我来说很不寻常,因为它不会使用MySQL数据库,而是使用mongoDB+Redis 该应用程序非常简单——从mongoDB到Redis的“启动”数据,之后PointRails将准备接收用户的请求,这些请求主要包括从Redis提取数据(我被告知这会非常快),进行快速计算并将部分数据发送回用户。 如果运气好的话,这种情况每秒会发生1500-4500次 在服务器上出现用户大军之前,我想知道是否有一种方法可以在内部“模拟”页面请求——比如运行一个rake任务,以每秒N

我一直在从事一个rails项目,这对我来说很不寻常,因为它不会使用MySQL数据库,而是使用mongoDB+Redis

该应用程序非常简单——从mongoDB到Redis的“启动”数据,之后PointRails将准备接收用户的请求,这些请求主要包括从Redis提取数据(我被告知这会非常快),进行快速计算并将部分数据发送回用户。 如果运气好的话,这种情况每秒会发生1500-4500次

在服务器上出现用户大军之前,我想知道是否有一种方法可以在内部“模拟”页面请求——比如运行一个rake任务,以每秒N次的速度执行该页面,或者类似的方式

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

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

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

回答得很好,谢谢。要澄清一点-将不会有静态资源,甚至html页面返回。讨论中的一个页面将接收一个小JSON(在kb以下),从redis(顶部2-5kb)获取一个哈希,然后返回另一个大小约为3kb的JSON。所以我不认为缓存是个问题。基于此,您建议我尝试从您列出的方法中选择哪种方法?我建议对控制器方法本身进行基准测试,然后使用ab验证您的结果。如果存在差异,请调查原因。顺便说一句,如果性能是一个问题,你不需要完整的轨道和机架堆栈,那么我强烈建议你看看歌利亚。谢谢。通过阅读一些关于heroku如何处理伸缩性的资料,我现在似乎需要两个应用程序——一个是rails应用程序,用于处理少量用户,另一个是goliath之类的应用程序,用于快速提供api功能。有没有办法把rails和goliath一起放在heroku上?我想你不太可能通过Procfile做到这一点,在Procfile中你有一个运行rails的web服务器和一个运行goliath的api服务器来处理rails的请求。然后,您可以分别缩放它们,这是一个非常好的设置,但您必须为每个实例付费。