2015-05-14 155 views
1

我有一個很大的應用程序。其中一部分是用戶文件的高負荷處理。我決定爲這個專用服務器提供服務。將有用於分發內容的nginx和用於處理文件的一些程序(非軌)。幾個服務器上的Ruby on Rails

我有兩個問題:

  1. 有什麼更好的在此服務器上使用? (Rails或其他東西,也許Sinatra)
  2. 如果我將使用Rails如何部署?我找不到任何指示。如果我有一個應用程序和兩個服務器如何部署它併爲對方委派任務?

ps我需要在兩臺服務器上授權用戶。在Rails中,我使用Devise。

回答

1

您可以使用Rails來做到這一點。如果兩臺服務器都將作爲最終用戶的Web客戶端,那麼您需要在兩臺服務器之前安裝某種負載平衡器。 HAProxy在這方面做得很好。

就讓兩個應用程序彼此進行通信而言,這並不像您想象的那麼微不足道。你應該做的是在執行任務時使用鎖定機制。默認情況下,Delayed_job會將作業鎖定在隊列中,以便其他作品不會嘗試在同一作業上工作。您可以使用ActiveJob的回調,通過網絡套接字在用戶完成作業時通知用戶。

任何需要時間或調用外部API的東西通常應放置在後臺處理隊列中,這樣您就不會阻止用戶。

如果你不能啓動超過兩臺服務器,你應該讓它們中的一個成爲主服務器,或者至少有兩個服務器的明確角色。例如,一臺服務器可能是您的後臺處理和memcache服務器,而另一臺服務器則存儲您的數據庫並處理您的網絡套接字。

有很多不同的方式來配置服務和任何東西,包括但不限於我提到的內容。

具有獨立的服務器來處理任務是我的首選,因爲它使他們更容易從系統管理員的角度進行管理。例如,如果我們發現我們的網絡套接字服務器受到攻擊,我們可以簡單地啓動幾個網絡套接字服務器並將它們放入負載平衡器池中。最終用戶不會受到網絡更改的負面影響。然而,如果您的服務器在標準Rails安裝之外執行雙重角色,您可能會發現自己正在克隆和浪費資源。我的每個Web服務器通常還會在低中等優先級隊列上執行後臺任務,而專門的服務器則用於處理關鍵任務作業。

+0

謝謝!我可以在哪裏閱讀關於如何在兩臺服務器上部署Rails?這將是兩個應用程序的克隆? –

+0

您可以閱讀並非特定於任何應用程序的HAProxy。 – kobaltz