Rails 可以期待每秒 100 个或更少的请求(对于非缓存页面)吗?

Posted

技术标签:

【中文标题】Rails 可以期待每秒 100 个或更少的请求(对于非缓存页面)吗?【英文标题】:Is 100 or less requests per second (for non-cached pages) what one can expect with Rails? 【发布时间】:2011-12-30 13:46:01 【问题描述】:

前言:请不要开始讨论过早优化或任何相关内容。我只是想了解使用 Rails 的单个服务器可以获得什么样的性能。

我一直在 Rails 3 上对 ruby​​ 进行基准测试,似乎我每秒可以获得的最高请求率约为每秒 100 个请求。

我在 nginx 和 Ruby 1.8.7 中使用了 phusion 乘客。

这是在一个 ec2 m1.large 实例上:

7.5 GB memory
4 EC2 Compute Units (2 virtual cores with 2 EC2 Compute Units each)
850 GB instance storage
64-bit platform
I/O Performance: High
API name: m1.large

页面是一个非常简单的动作,将一行写入mysql

user = User.new
user.name = "test"
user.save

我假设没有缓存(memcache 等),我只是想感受一下原始数字。

我在同一个 ec2 实例上使用了 apache bench,并且使用了不同级别的请求数(从 1000 到 10000 以及不同数量的并发请求 1/5/10/25/50/100)。

【问题讨论】:

好吧,如果您已经运行了测试并且您对优化不感兴趣,那么实际的问题是什么? 在 nginx 后面运行 Unicorn(8 个工作人员)的专用服务器(Ubuntu 11.04,双 Xeon E5620,12GB RAM)上,我每秒收到大约 1,200 个请求(在没有数据库命中的页面上)。 @Dylan 谢谢!,我知道 Phusion 乘客会自动扩展到幕后的更多工作人员,也许由于某种原因它没有启动? 【参考方案1】:

EC2 m1.large 实例确实没有那么快,所以这些数字并不令人惊讶。如果您想要性能,您可以选择更大的实例,因为现在有一些具有 80 个 ECU,或者尝试不同的提供商。

我发现Linode 通常以相同的价格提供更高的性能,但不够灵活,也不能扩展到非常多的服务器。如果您处于“20 台以下服务器”的推出阶段,它会更合适。

也不要认为 MySQL 是免费的操作。

【讨论】:

感谢您的建议,在相同的实例类型上,我使用 java 获得了超过 1K (对 mysql 执行相同的插入 1 行) 为什么不尝试使用 JRuby 进行基准测试呢?使用rvm 很容易安装。除了严格的 Rails 之外,您还有其他选择,它是一个程序员速度友好的框架,例如 Sinatra 或plain Rack,它是一个性能友好的框架。 这更多是为了了解 Rails 的潜力,我知道显然有更快的解决方案只是想了解会发生什么以及其他人经历了什么(以防我做错了什么)基准)。 查看padrino blog 上的性能优化部分,他们比较了几个框架

以上是关于Rails 可以期待每秒 100 个或更少的请求(对于非缓存页面)吗?的主要内容,如果未能解决你的问题,请参考以下文章

在 PHP 中的 while / foreach 内包装 3 个或更少的对象

SQL 查询来自不同区域的选择行

Cassandra - 许多小的或更少的大节点?

weka 中的测试文件是不是需要与训练相同或更少的功能?

选择更少的 SQL 列是不是会使请求更快? [复制]

更少的 Rails 视图查询