我已经阅读了大量关于线程安全性和不同版本的ruby和rails的性能的Web上的材料,我认为在这一点上我很了解这些事情。如何部署线程安全的异步Rails应用程序?
讨论中似乎很奇怪的是如何实际部署异步Rails应用程序。在谈到一个应用程序的线程和同步性,有两件事情的人要优化:
- 利用所有的CPU内核以最小的RAM使用
- 能够满足新的要求,而以前的要求是在IO 等待
第1点是人们得到JRuby(正确)兴奋的地方。对于这个问题,我只是想优化点2
说这是我的应用程序的唯一控制器:
TheController < ActionController::Base
def fast
render :text => "hello"
end
def slow
render :text => User.count.to_s
end
end
fast
没有IO,可以起到每秒请求数百或数千,并slow
必须通过网络发送请求,等待工作完成,然后通过网络接收答案,因此比fast
慢得多。
因此,一个理想的部署将允许数百请求到fast
被履行,而slow
的请求正在等待IO。
围绕Web的讨论似乎缺少的是堆栈的哪一层负责实现此并发。瘦有一个--threaded
标志,它将“在线程中调用机架应用程序[试验]” - 是否为每个传入请求启动一个新线程?在保持并等待传入请求的线程中缓存机架应用程序实例?
瘦是唯一的方式还是有其他人? ruby运行时对于优化点2是否重要?
我怀疑你的ruby版本对于第2点会有多少发言权。这将更依赖于服务器的并发实现以及如何将rails本身放在一起。 – providence