2011-01-07 72 views
4

是否有可能將應用程序託管在一臺服務器中並將作業排隊到另一臺服務器中?Rails:我可以在不同的服務器上運行背景作業嗎?

可能實例:

  1. 兩種不同的EC2實例中,一個與主服務器和所述第二與排隊的服務。

  2. 主機在Heroku上的應用,並使用EC2實例與排隊服務

這可能嗎?

謝謝

回答

13

是的,絕對。在我工作的地方,我們已經設置了delayed_job。

有一對夫婦的要求,它的工作:

  1. 的服務器必須有同步的時鐘。只要服務器時區都設置​​爲相同,這通常不是問題。
  2. 服務器都必須訪問相同的數據庫。

要做到這一點,只需在兩臺服務器(或全部服務器,如果超過兩臺服務器)上都有相同的應用程序,並啓動任何想要處理作業的服務器上的工作人員。任何一臺服務器仍然可以對作業進行排隊,但只有正在運行的工人才能真正處理它們。

例如,我們有一個interface服務器,一個db服務器和幾個worker服務器。 interface服務器通過Apache/Passenger服務於應用程序,將Rails應用程序連接到db服務器。 workers具有相同的應用程序,儘管Apache沒有運行,並且您無法通過http訪問應用程序。另一方面,他們確實有一些延遲工作的員工在跑步。在一般情況下,interface服務器在dbworker服務器中對作業進行排隊。

請注意一句:如果您依賴應用程序中的物理文件(附件,日誌文件,下載的XML或其他任何文件),您很可能需要像S3這樣的解決方案來保留這些文件。原因是個別服務器可能沒有實際的文件。這方面的一個例子是,如果您的用戶要在您的面向網絡的服務器上上傳他們的個人資料圖片,這些文件可能會存儲在該服務器上。如果您然後有另一臺服務器來調整配置文件圖片的大小,則映像將不存在於工作服務器上。

+0

感謝您的回覆。我現在明白如何使用我自己的服務器來做到這一點。有沒有辦法使用Heroku +我的服務器? – donald 2011-01-07 02:08:52

+0

這實際上取決於Heroku是否允許從外部服務器直接訪問他們的數據庫。我不認爲他們這樣做,所以答案是「不」。 – vonconrad 2011-01-07 02:19:00

+0

'mount'怎麼樣?這不是一個可靠的解決方案嗎? – mdesantis 2012-10-17 08:53:15

5

只是提供了另一種可行的選擇:您可以使用全新的工作服務,如IronWorker,它完全依賴於EC2內部雲服務器的彈性服務器場。

這樣,您可以對作業進行排隊/計劃運行,並且跨多個服務器跨越大量線程進行並行處理 - 所有這些都不必擔心基礎架構。

雖然與數據庫相同,但它需要從外部訪問。

完全披露:我幫助建立IW

相關問題