如何用 Ruby on Rails 編寫支持高并發(fā)的網(wǎng)站?
時(shí)間:2023-11-25 13:18:01 | 來源:網(wǎng)站運(yùn)營(yíng)
時(shí)間:2023-11-25 13:18:01 來源:網(wǎng)站運(yùn)營(yíng)
如何用 Ruby on Rails 編寫支持高并發(fā)的網(wǎng)站?:很高興你能選擇 Rails 來開發(fā)你的 Web 應(yīng)用。
在談高并發(fā)前,
首先要了解應(yīng)用的場(chǎng)景。外行嘴里的『百萬并發(fā)』往往和實(shí)際開發(fā)人員所想的不是同一回事。
如果只是一個(gè)簡(jiǎn)單的網(wǎng)站類應(yīng)用,比如是一個(gè)博客,論壇。在這種情況下,所謂的百萬并發(fā)也許僅僅只是指日活百萬;或者是同時(shí)在線人數(shù)有百萬,而我們知道普通的網(wǎng)站應(yīng)用的 HTTP 請(qǐng)求是不會(huì)一直跟服務(wù)器保持連接的,所以一般是指某一段時(shí)間出現(xiàn)過的用戶數(shù)量。
在這種情況下,所謂的百萬并發(fā),真正同時(shí)的并發(fā)連接數(shù),可能僅僅只有幾百幾千。這種情況下,普通的 Web 三層架構(gòu)是完全沒有問題的。如果能很好的利用緩存,能對(duì)數(shù)據(jù)庫做一些優(yōu)化,那么 Rails 是完全可以勝任的。Rails 的模式是一個(gè)進(jìn)程/線程處理一個(gè)請(qǐng)求,這是一種非常傳統(tǒng)可靠的模型,適合一些傳統(tǒng)的業(yè)務(wù)。我過去在暴走漫畫就處理過這種類型的『高』并發(fā)應(yīng)用,可以參考我的分享
曹力 - 屌絲程序員如何一個(gè)人打造日 PV 百萬的網(wǎng)站架構(gòu)
而如果真的是一個(gè)同時(shí)需要百萬個(gè)并發(fā)鏈接的話,那么 Rails 的模型也許并不合適。而且具體的解決方案,還是要根據(jù)場(chǎng)景才能設(shè)計(jì)出來。
如果是簡(jiǎn)單的 IO 密集型的應(yīng)用,可以考慮使用基于 Reactor 模型的框架如 EventMachine。Goliath 就是基于 EventMachine 和 Fiber的。
如果系統(tǒng)壓力更大,則并不建議使用 Rails,而 Padrino,Sinatra 因?yàn)椴l(fā)模型其實(shí)跟 Rails 接近,并不能極大提高并發(fā)能力。極端情況下還是應(yīng)該考慮更加適合業(yè)務(wù)模型的工具,如 Go,Erlang 等。