我已經閱讀了大量關於線程安全性和不同版本的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