2009-10-23 5 views
13

Вы бы порекомендовали использовать beanstalkd [http://kr.github.com/beanstalkd/] дляPHP асинхронная обработка с beanstalkd. Вы порекомендовали его?

асинхронная обработка в PHP?

Мне нужна некоторая обратная связь/комментарии pros-cons, от любого, кто использовал эту библиотеку.

Спасибо,

+0

Мне также будет интересно прочитать комментарии о долгосрочной стабильности beanstalkd от ​​кого-то, кто использовал его в производственной среде –

+0

Мне тоже очень интересно. – inakiabt

+1

Вы пробовали Gearman? Я думаю, что сообщество Gearman-PHP более активно. – mixdev

ответ

15

Я использовал Beanstalk в производстве, а также при тестировании бросали миллионы простых сообщений через него - как правило, ан-масс, но система производства было более 100000 задач, поставленных через него, пока я не оставил компания. Он все еще может работать, и в этом случае сейчас будет десятки миллионов - или больше, если бы они расширили его использование дальше, как я и планировал.

Я бы порекомендовал его, так как он получил множество отличных баллов.

  • Названные трубы могут использоваться для ограничения поставленных задач. Я смотрю трубку, основанную на имени машины, которая ограничивает работу рабочего, полезная для загруженных файлов, которые хранятся только на определенном сервере.
  • Задержки могут быть использованы для установки будущих событий
  • Последние версии сервера также поддерживают ведение журнала, давая настойчивость, хотя он никогда не рушился на меня.

Моей первой задачей, которую я выполнил, была обработка изображений - и эта работа за пределами процесса Apache/mod_php позволила мне изменить размер больших изображений, не затрагивая сервер (выдувая веб-сервер). С легко загруженной очередью он создал эскизы, прежде чем страница обновилась после загрузки.

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

Единственные проблемы, с которыми я когда-либо сталкивался, заключались в том, чтобы убедиться, что рабочие прошли без инцидентов - или что были допущены какие-либо ошибки, чтобы работа могла быть «похоронита», гарантируя тем самым, что задание не было возвращено в очередь для повторного запуска (и снова произойдет сбой рабочего).

Наличие рабочих перезапуска и очистка памяти также может быть полезно, поскольку PHP менее хорошо подходит для длительных процессов.

+0

Что было использовано для вытягивания заданий из очереди и их выполнения? Это также было сделано в PHP? Если это так, были ли рабочие выполнены с использованием чего-то вроде System_Daemon или было ли задание cron, которое выполнялось каждый раз и некоторое время? Другие подходы? –

+1

Я запускаю скрипт оболочки с Supervisord, и он держится, повторяя, ожидая нового элемента, а затем снова. В моем блоге есть сообщение с некоторыми подробностями - http://www.phpscaling.com/2009/06/23/doing-the-work-elsewhere-sidebar-running-the-worker/ –