几台服务器上的Ruby on Rails

时间:2015-05-14 00:52:27

标签: ruby-on-rails deployment server

我有一个很大的应用程序。其中一个部分是使用用户文件进行高负载处理。我决定提供这个专用服务器。将有分发内容的nginx和用于处理文件的一些程序(非rails)。

我有两个问题:

  1. 在这台服务器上有什么更好用的? (Rails或其他东西,也许是Sinatra)
  2. 如果我使用Rails如何部署?我找不到任何指示。如果我有一个应用程序和两个服务器如何部署它并为彼此委派任务?
  3. ps我需要在两台服务器上授权用户。在Rails中我使用Devise。

1 个答案:

答案 0 :(得分:1)

您可以使用Rails。如果两台服务器都充当最终用户的Web客户端,那么您需要在两台服务器前面安装某种负载均衡器。 HAProxy在这方面做得很好。

至于让两个应用程序相互通信,这可能不像你想象的那么简单。您应该做的是在执行任务时使用锁定机制。默认情况下,Delayed_job会将作业锁定在队列中,这样任何其他作品都不会尝试在同一作业上工作。您可以使用ActiveJob的回调,在作业完成时通过Web套接字通知用户。

任何花费时间或调用外部API的内容通常都应该放在后台处理队列中,这样你就不会阻止用户。

如果您无法启动超过两台服务器,则应将其中一台服务器作为主服务器,或者至少具有两台服务器的明确角色。例如,一个服务器可能是您的后台处理和内存缓存服务器,而另一个服务器是存储您的数据库并处理您的Web套接字。

有许多不同的方式来配置服务,除了我所提到的内容以外的所有内容都是自以为是。

具有用于处理任务的单独服务器是我的首选,因为它使得从Sys Admin透视图更容易管理。例如,如果我们发现我们的Web套接字服务器受到了重创,我们可以简单地启动一些Web套接字服务器并将它们放入负载均衡器池中。最终用户不会受到网络更改的负面影响。然而,如果您的服务器在标准Rails安装之外执行双重角色,您可能会发现自己克隆并浪费资源。我的每个Web服务器通常还在低中间优先级队列上执行后台任务,同时留下专用服务器来处理关键任务。