2012-02-20 27 views
1

我已經看到一些參考資料,指的是一旦用戶負載增加,開發人員必須用Ruby(Java或C)以外的語言編寫其rails應用程序的某些部分(後臺處理,密集任務)(似乎Twitter是前。 這個的)。這些可能是Rails 1.0 -2.0時期出現的大多數問題。不過,如果事實確實如此,我想確認那些經營真正生產應用的開發人員。需要使用另一種語言編寫軌道生產應用程序的代碼?

+4

您將會發現,沒有大型Web應用程序完全建立在單個環境或語言上。例如,Facebook開始使用PHP和數據庫,但現在依賴於數十種技術。 Instagram從Django開始,現在使用Node.js來處理一些事情,或者至少在工作列表中進行名稱檢查。任何長期存活的應用程序最終都需要與第一天所需的技術不同的技術。 (順便說一句,包括Twitter在內的所有這些公司仍然使用這些原創技術來實現他們最擅長的事情。) – 2012-02-20 21:41:10

+1

這是大型應用程序的唯一問題,除非您有10^6個客戶同時運行 - 或者純粹設計的應用程序,否則您應該可以使用rails生產應用程序,但爲此,您可以使用newrelic指示您要改進哪些內容 – mpapis 2012-02-20 21:42:06

回答

5

根據我的經驗,很少有人需要用Ruby以外的語言編寫Rails應用程序的服務器端部分。

像Twitter這樣的公司遭受的問題遠遠超出了大多數Web應用程序必須處理的範圍,因此爲了討論起見,應該排除它們。 Twitter是一個極端的異常。

但是,在大多數非平凡的Rails應用程序中,通常需要後臺作業排隊和處理,儘管這些作業通常也是用Ruby編寫的。

遵守的一條好規則是,您絕對不應該讓用戶等待,並立即返回對HTTP請求的響應,而不會不必要地捆綁(Ruby支持的)請求處理器。例如,如果上傳大圖像並且需要大量密集轉換 - 這應該是異步和脫機完成的。無論其性能如何,其他Web應用程序框架和語言也是如此。

如果您需要更高的後臺作業性能,則可以簡單地擴展正在處理作業的工作進程的數量。這對服務於Rails請求也是如此 - 您可以添加更多的Unicorn工作進程來處理更多請求。

雖然Ruby確實比C或熱身的JVM慢得多,但它通常「足夠快」。

如果您使用的是MRI Ruby,那麼您應該使用Ruby 1.9.3,它至少比1.8.x系列快兩倍,並且垃圾收集略有改善。 JRuby也表現良好,並且在每個發行版中都獲得了更高的性能。最後,現代的Rails應用程序爲客戶端分配了更多的處理,並且通常包含比以前更多的JavaScript/CoffeeScript。他們經常在視圖中使用更多的部分AJAX更新,從而減少了Rails堆棧渲染所花費的時間,以及比4年前更少的服務器端Ruby處理所需的更小,更輕的數據庫查詢。

您的應用程序的最大風險與性能無關,並且通常會快速變化,並且需要按時按預算交付。任何技術選擇都是如此,儘管Rails已知可以幫助減輕這些領域的負擔。我從一個多年來使用了許多框架和語言的開發人員的角度寫這篇文章,其中包括速度更快的語言和堆棧,即PHP,C#/ ASP.NET MVC。

+1

正如Twitter的開發者在接受採訪時指出的那樣,Ruby和Rails不是*問題*,他們是*解決方案*,因爲使用較少的敏捷語言和框架,他們不可能在如此短的時間內與這麼小的團隊一起進行如此激烈的大規模架構變革。 – 2012-02-21 02:39:45

+0

@JörgWMittag正是!除了你說的比我更好:-) – Scott 2012-02-21 03:42:14

+0

但是他們確實重寫了Ruby垃圾回收器,所以問題的一部分一定是語言特定的,或者? – Jason 2012-02-21 16:44:47

相關問題