Какие хорошие менеджеры распределенных очередей в php? - PullRequest
10 голосов
/ 18 марта 2009

Я работаю на веб-сайте обработки изображений, вместо того, чтобы выполнять длинные задания, удерживая браузер пользователей. Я хочу, чтобы все команды быстро возвращались с идентификатором задания и выполняла фоновую задачу. Затем идентификатор можно использовать для проверки статуса и результатов (т. Е. URL обработанного изображения). Я нашел много распределенных администраторов очередей для ruby, java и python, но я не знаю почти ни одного из этих языков, чтобы можно было их использовать.

Мои собственные тесты были с общей базой данных mysql для постановки в очередь заданий, блокировки их для работника и пометки их как выполненных (сохранение возвращаемых данных в БД). Это был просто грязный прототип, и все время мне казалось, что я заново изобретаю колесо (и не очень элегантно). Существует ли что-то в php (или что я могу говорить с RESTful?), Что я мог бы использовать?

Читая немного больше, я обнаружил, что я ищу систему очередей с php api, ее не нужно писать на php. Я нашел только классы для использования с SQS Amazon, но это не только то, что они не бесплатны, но иногда они также довольно латентны (более минуты для появления сообщения).

Ответы [ 3 ]

5 голосов
/ 18 марта 2009

Вы пробовали ActiveMQ? В нем упоминается о поддержке PHP через протокол Stomp. Подробности доступны на сайте activemq .

Я уже многое понял из базы данных, подходящей к твоему описанию, поэтому я не стал бы сильно беспокоиться об этом.

3 голосов
/ 18 марта 2009

У вас есть полный контроль над сервером?

В таком случае с MySQL может быть все в порядке. Имейте PHP-скрипт, который работает постоянно (в бесконечном цикле while), запрашивая базу данных MySQL для новых «задач» и переходя в режим сна () между ними, чтобы уменьшить нагрузку во время простоя.

Когда каждое задание выполнено, отметьте его в базе данных и перейдите к следующему.

Чтобы предотвратить остановку всего этого, если ваш скрипт сломается / существует (переполнение памяти PHP и т. Д.), Вы можете, например, поместить его в inittab (если вы используете Linux в качестве сервера) и init перезапустит его автоматически.

2 голосов
/ 07 апреля 2009

Zend_Framework имеет класс очереди с несколькими реализациями Mysql-backed, SQS и некоторых других серверных частей.

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

...