我一直在使用Ruby Enterprise Edition和Passenger(对于Apache,因为我为其他事情运行Apache)已经有一段时间了,但是我想知道现在服务器上有什么用的新趋势。 例如,我听说过Thin,Unicorn ......我也知道1.9.2比REE快,但我想知道RAM消耗。我宁愿让它消耗更少的RAM,即使牺牲一些速度。
感谢所有建议。
答案 0 :(得分:7)
如果你想要最小的内存,你应该尝试Thin。 它没有主工作为Unicorn或Passenger,因此使用更少的内存。 假设您有一个非常小的应用程序需要在小型VM上运行,那么您可以使用1个瘦工作者+ nginx。我在256MB虚拟机上使用Thin + nginx + postgres运行了几个rails 3.2应用程序而无需交换。
Unicorn速度更快但需要一名主工作者。如果你想在Heroku上运行它是好的,你可以设置2或3个工作者并且在512MB范围内。
如果您的应用程序非常大并且您有太多长时间运行的请求,我会查看jRuby和Thinidad / Torquebox。
我将一些应用程序从MRI + Sidekiq转换为jruby + Trinidad + Trinidad_Scheduler。我在trinidad服务器中使用50个线程池获得大约100-200 req / sec!
我喜欢jRuby的是你可以在一个Rails服务器上组合所有东西。您可以将具有EHcache,调度,后台处理和实际多线程的cache_store放在同一个JavaVM上。
您不需要分别运行redis,memcached,resque或sidekiq。
我不是说他们不好,我喜欢sidekiq和resque,但你可以通过在一个进程中组合所有内容并具有高并发性来降低复杂性。
更先进的企业解决方案是Torquebox,它支持群集并且具有超级可扩展性。但是我的应用程序崩溃时遇到了问题,所以我现在坚持使用特立尼达。
jRuby的缺点?记忆!特立尼达服务器将使用最小512MB,最高2-3GB内存。 此外,对于单线程服务器,来自运行Ruby-1.9.3的rails应用程序的单个请求大约是jRuby上相同请求的两倍。
另一个选择是Puma,你可以用美洲狮在MRI上获得完整的多线程。我自己无法在我的应用程序上保持稳定。
因此,这完全取决于您的要求,内存使用情况,完整线程和并发性。
除乘客外,还可以看看Unicorn,Trinidad,Puma和Torquebox。那些似乎是现在的顶级铁路服务器。
有一本很棒的书介绍了如何将您的Rails应用程序转换为jRuby并使用多种方法(如trinidad)部署您的应用程序。 http://pragprog.com/book/jkdepj/deploying-with-jruby
Torquebox文档非常棒。它非常详细,并解释了如何使用所有Torquebox功能。 http://torquebox.org/documentation/
我希望分享我的经验有所帮助。
答案 1 :(得分:6)
乘客仍然非常强大,尤其是REE自然会在不久的将来支持1.9。您的应用程序可能崩溃的事实,但它不会影响您的计算机上的任何其他内容是一个惊人的功能。部署代码非常简单,因为服务器将继续接受连接,这意味着您可以减少挫折/压力。
然而,就比较而言:
这是一个很好的资源,可以查看所有新服务器的各种比较(包括内存消耗)。
它比较Thin,Unicorn,Passenger,TorqueBox,Glassfish和Trinidad:
http://torquebox.org/news/2011/03/14/benchmarking-torquebox-round2/
答案 2 :(得分:4)
Mike Lewis的链接在比较那些不同的ruby服务器方面做得很好。我个人的经验是nginx / REE / Passenger,一直很好。我没有尝试过其他人,所以我不能对此发表评论。
但是,我可以谈谈RAM的使用情况。您最大的RAM节省将来自使用32位服务器。根据我的经验(3x 3GB应用程序服务器),64位REE /乘客进程占用的内存量是32位同类产品的2倍。我们看到显着的性能提升从64位服务器转移到32位服务器,其他一切都保持不变。除非您的应用程序需要64位,否则我建议您以32位运行应用程序服务器(而不是数据库)。
答案 3 :(得分:1)
乘客仍然是一个非常好的选择,所以你不会落后于时代或任何事情。它也得到了积极支持,并拥有一支非常优秀的开发团队,为社区做出了巨大贡献。我们一直在使用Unicorn,它一直非常好。我们最喜欢的功能是能够在不断开连接的情况下升级apps / ruby / nginx。