2012-08-15 231 views
1

我有一個Rails應用程序,它執行大量的媒體編碼。我通過後臺進程處理它,但是我發現CPU過載,前端加載時間肯定比他們應該慢(或者在後端部分變大之前)。在Rails應用程序中分離後端服務器和前端服務器?

所以問題:與媒體編碼功能的Rails應用程序經歷CPU負載和前端放緩。目標 - 解耦前端和後端(媒體編碼)部分。

問題 - 將現有應用程序分爲兩部分(前端部分和後端部分)的最佳方法是什麼?

1)在兩臺服務器上運行應用程序的兩個副本,然後在通過HTTP發送POST/PUTting信息(或連接到遠程數據庫)之間進行調用是一個好主意嗎?

2)將CPU-intesive部分保存在Rails代碼中是否是一個好主意,還是應該將其從Rails功能中剝離出來?

如果有人可以指出一個關於運行多服務器Rails應用程序的好指南,那會很好(搜索返回多服務器Capistrano部署上的問題,但我需要一些不太具體的配方)。

回答

0

適用的常用方法是使用像Resque這樣的工作隊列。

管理代碼
爲了便於管理,保持處理代碼和「應用程序」的應用程序。 部署兩個應用程序服務器,但在處理服務器上運行resque worker。

狀態變化
如果處理作業涉及到的ActiveRecord持久對象可以從前端輪詢狀態,並定期從在編碼過程中後端更新。

您可能會覺得它適用於使用state machine

你的問題已經轉移
現在你是雲的規模™:d運行工 更多處理主機可以,如果你的隊列變得太長添加。如果您的前端是唯一可通過網絡訪問的主機,則可以設置機架中間件或運行彩虹以將處理後的結果通過前端代理到客戶端。

聽起來像一個有趣的項目。祝你好運!

相關問題