我试图评估各种Rails服务器解决方案。我的名单上首先是一个nginx +乘客系统。我用8 gig的RAM和2个处理器启动了一个EC2实例,安装了nginx和passenger,然后将它添加到nginx.conf文件中:
passenger_max_pool_size 30;
passenger_pool_idle_time 0;
rails_framework_spawner_idle_time 0;
rails_app_spawner_idle_time 0;
rails_spawn_method smart;
我向仅render :text => (2+2).to_s
然后我旋转了一个小盒子并运行它来测试它:
ab -n 5000 -c 5 'http://server/awesome'
而在盒子上运行的CPU看起来非常像这样:
05:29:12 PM CPU %user %nice %system %iowait %steal %idle
05:29:36 PM all 62.39 0.00 10.79 0.04 21.28 5.50
而且我注意到只需要7-10个同时请求就可以使CPU空闲时间<1%,当然这会严重拖延响应时间。
所以我想知道,很多CPU负载只是与Rails做生意的成本?它是否只能同时提供六打左右的超便宜请求,即使有一大堆内存和几个内核?有什么好的建议可以让我同时提供15-30个请求吗?
更新:尝试在“超级大型和大量CPU”EC2之类的东西上做同样的事情。神圣的废话是那很多CPU的力量。最佳点似乎是每个CPU大约2个同时请求,能够在16个同时请求时将其提升到大约630个请求/秒。不过,不知道这对于很多小盒子来说是否真的具有成本效益。
答案 0 :(得分:1)
我必须说,在添加了一些memcached服务器(EC2的4个媒体)之后,我的Rails应用程序大大提升了支持大约20个最初支持的大约80个并发用户。几个月前,我经营着一个高流量的体育网站。数据库大小约为6演出,有大量更新/插入。
MySQL(RDS大量高使用率)缓存也有所帮助。
我尝试过使用乘客设置,但得到了一些奇怪的结果 - 比如每个线程占用250兆内存,考虑到应用程序不是很大,这很奇怪。
你也可以通过使用现货实例来节省大量的$但不完全依赖它 - 它们的价格似乎有时会飙升。我使用两个策略AutoScale - 一个带有spot实例,另一个带有on demand(读取:保留)实例。