Распределенное кодирование видео - Gearman vs Beanstalkd

Я собираюсь построить распределенный кластер кодирования видео из нескольких десятков машин. Я никогда раньше не работал с очередью сообщений, но двое, с которыми я начал экспериментировать, были Gearman и Beanstalkd.

Beanstalk кажется намного проще и проще в использовании, чем Gearman, но он не такой многофункциональный, как.

Одного я не понимаю ... как вы создаете новых рабочих на всех серверах? Планирую использовать php. Это так же просто, как запустить worker.php в интерфейсе командной строки с «&» и просто заставить его ждать работы?

Я заметил, что gearman на самом деле не убивает процесс после выполнения задания, но Beanstalk убивает, поэтому мне приходится перезапускать скрипт после каждого задания на каждом сервере.

В настоящее время я более склонен использовать Beanstalk, общий поток вещей, который я планировал, был следующим:

Моментально запускайте cron на каждом сервере, который проверяет наличие заранее определенного количества запущенных рабочих. Если его меньше, чем должно быть, создайте новые рабочие процессы. Каждый процесс займет примерно 2–30 минут.

Может, у меня здесь ошибка в логике? Дайте мне знать, какой способ сделать это «лучше» или «правильно»?


person Community    schedule 22.02.2012    source источник
comment
Обязательно посетите Pheanstalk: github.com/pda/pheanstalk   -  person Mike Causer    schedule 02.03.2012
comment
Простите за мою наивность, но где устанавливается сервер в любой из этих двух сред обмена сообщениями? На удаленной машине, которая будет обрабатывать выгруженный процесс, или на машине, которая информирует удаленную машину о новом задании?   -  person ariestav    schedule 03.03.2012
comment
Слишком дорого пользоваться любой из этих услуг.   -  person    schedule 10.03.2012


Ответы (1)


Я буду использовать терминологию, чтобы попытаться внести ясность ... Существует понятие производителя и потребителя. Производитель генерирует задания, которые помещаются в очередь (то есть сервис beanstalk), которые затем читаются потребителем.

Есть несколько способов написать потребителя. Вы можете либо каждый временной интервал x через задание cron запускать задачу, либо просто запустить потребителя в цикле while 1 через php (или что у вас есть).

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

Если вам нужна долговечность на стороне очереди, вам следует использовать параметр binlog Beanstalk (-b). Если что-то случится с вашей службой beanstalk, это позволит вам перезагрузиться с минимальной потерей данных в очередях (если нет информации). Долговечность со стороны производителя может быть обеспечена наличием нескольких очередей для проверки.

person RStrad    schedule 05.03.2012