Rails: Могу ли я запускать фоновые задания на другом сервере? - PullRequest
4 голосов
/ 07 января 2011

Можно ли разместить приложение на одном сервере и поставить в очередь задания на другом сервере?

Возможные примеры:

  1. Два разных экземпляра EC2, один с главным сервером, а второй со службой очередей.

  2. Разместите приложение в Heroku и используйте экземпляр EC2 со службой очередей

Это возможно?

Спасибо

Ответы [ 2 ]

13 голосов
/ 07 января 2011

Да, определенно.Мы настроили delayed_job таким образом, чтобы я работал.

Для его работы есть пара требований:

  1. Серверы должны иметь синхронизированные часы.Обычно это не проблема, если все часовые пояса сервера установлены одинаково.
  2. Все серверы должны иметь доступ к одной и той же базе данных.

Чтобы сделать это, вы простоиметь одно и то же приложение на обоих (или на всех, если их более двух) серверах и запускать рабочие на любом сервере, который вы хотите обрабатывать.Любой сервер все еще может ставить в очередь задания, но только те, на которых работают работники, будут фактически обрабатывать их.

Например, у нас есть один interface сервер, db сервер и несколько worker серверов.,Сервер interface обслуживает приложение через Apache / Passenger, соединяя приложение Rails с сервером db.workers имеет такое же приложение, хотя Apache не работает, и вы не можете получить доступ к приложению через http.С другой стороны, у них есть работающие delayed_jobs.В обычном сценарии сервер interface ставит в очередь задания на db, а серверы worker обрабатывают их.

Одно слово предостережения: если вы полагаетесь на физические файлы в своем приложении(вложения, файлы журналов, загруженный XML или что-либо еще), вам, скорее всего, понадобится решение, подобное S3, для хранения этих файлов.Причина этого заключается в том, что отдельные серверы могут не иметь реальных файлов.Примером этого является то, что если ваш пользователь должен загрузить свое изображение профиля на ваш веб-сервер, файлы, скорее всего, будут храниться на этом сервере.Если у вас есть другой сервер для изменения размера изображений профиля, изображение не будет существовать на рабочем сервере.

5 голосов
/ 07 февраля 2011

Просто чтобы предложить другой жизнеспособный вариант: вы можете использовать новый рабочий сервис, такой как IronWorker , который полностью зависит от гибкой фермы облачных серверов внутри EC2.запланируйте выполнение заданий, и они будут распараллеливаться между тоннами потоков, охватывающих несколько серверов - и все это, не беспокоясь об инфраструктуре.

То же самое относится и к базе данных - она ​​должна быть доступна снаружи.* Полное раскрытие: я помог построить IW .

...