簡體   English   中英

Rails:我可以在不同的服務器上運行后台作業嗎?

[英]Rails: Can I run backgrounds jobs in a different server?

是否可以在一台服務器中托管應用程序並在另一台服務器中排隊作業?

可能的例子:

  1. 兩個不同的EC2實例,一個與主服務器,另一個與排隊服務。

  2. 在Heroku中托管應用程序並使用EC2實例和排隊服務

那可能嗎?

謝謝

當然是。 我們在工作的地方設置了delayed_job。

它有幾個要求:

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

要做到這一點,您只需在兩個(或所有,如果超過兩個)服務器上擁有相同的應用程序,並在要處理作業的任何服務器上啟動工作程序。 服務器仍然可以對作業進行排隊,但只有運行工作程序的服務器才能實際處理它們。

例如,我們有一個interface服務器,一個db服務器和幾個worker服務器。 interface服務器通過Apache / Passenger為應用程序提供服務,將Rails應用程序連接到db服務器。 雖然Apache沒有運行,但是您無法通過http訪問應用程序,因此workers具有相同的應用程序。 另一方面,他們確實有延遲工作的工人。 在常見情況下, interface服務器將db作業排隊,並且worker服務器處理它們。

需要注意的一點是:如果您依賴應用程序中的物理文件(附件,日志文件,下載的XML或其他任何內容),您很可能需要像S3這樣的解決方案來保存這些文件。 原因是各個服務器可能沒有實際文件。 例如,如果您的用戶要在面向Web的服務器上上傳其個人資料圖片,則這些文件可能會存儲在該服務器上。 如果您有另一台服務器來調整配置文件圖片的大小,那么該工作服務器上將不存在該圖像。

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

通過這種方式,您可以排隊/安排作業運行,並且它們將跨越多個服務器的大量線程並行化 - 所有這些都無需擔心基礎架構。

但是與數據庫相同 - 它需要從外部訪問。

完全披露:我幫助建立了IW

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM