Rails: можно ли запускать фоновые задания на другом сервере?



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



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





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



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



Возможно ли это?



Спасибо

620   2  

2 ответов:

Да, определенно. У нас есть delayed_job, настроенный таким образом, где я работаю.

Есть несколько требований для его работы:

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

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

Например, у нас есть один сервер interface, сервер db и несколько серверов worker. Сервер interface обслуживает приложение через Apache / Passenger, соединяя приложение Rails с сервером db. У workers есть то же самое приложение, хотя Apache не работает, и вы не можете получить доступ к приложению через http. С другой стороны, у них есть отложенные вызовы. работников, работающих. В общем случае сервер interface ставит задания в очередь в db, а серверы worker обрабатывают их. Одно слово предостережения: если вы полагаетесь на физические файлы в вашем приложении (вложения, файлы журналов, загруженный XML или что-нибудь еще), вам, скорее всего, понадобится решение, подобное S3, чтобы сохранить эти файлы. Причина этого заключается в том, что отдельные серверы могут не иметь реальных файлов. Например, если ваш пользователь должен был загрузить свою фотографию профиля на ваш компьютер. веб-сервер, файлы, скорее всего, будут храниться на этом сервере. Если бы у вас был другой сервер для изменения размера изображений профиля, изображение не существовало бы на рабочем сервере.

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

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

То же самое относится и к базе данных - она должна быть доступна извне.

Полное раскрытие: я помогал строить IW .

Comments

    Ничего не найдено.