2012-03-03 4 views
3

я ищу для системы массового обслуживания, которая может поддерживать следующий сценарий:система массового обслуживания, которая поддерживает работу пакетирование (например, несколько рабочих мест для 1 работника сразу)

  • клиент добавляет задание - проверить, как многим Facebook нравится конкретный URL (URL1);
  • Клиент добавляет другую работу - для проверки той же информации для URL2;
  • [....]

  • Работник поднимает что-нибудь от 1 до 50 рабочих мест (URLs) из очереди (например, если есть только 5 - он улавливает 5, если есть 60 - подхватывает 50, оставляя других для другого работника) и выдает запрос против API Facebook (который позволяет несколько URL-адресов на запрос). Если это удается, все задания выводятся из очереди, если они терпят неудачу - все они остаются.

Я работаю с PHP, и я посмотрел в Gearman, Beanstalkd, но не нашел подобную функциональность. Есть ли (бесплатная) система очередей, которая поддерживала бы такой «пакетный режим»?

Возможно, любой может предложить альтернативный способ решения такой проблемы? Я рассмотрел список «проверять» URL-адреса вне системы очередей, а затем добавлял их в пакеты из макс. N элементов с заданием cron, которое запускает каждый период Х. Но это своего рода построение собственной очереди, которая побеждает целую цель, не так ли?

+0

Это не самый чистый способ сделать это, но я думаю, что с помощью Beanstalk у вас может быть один рабочий, пытающийся получить несколько заданий (просто используйте цикл). – trutheality

+0

@trutheality Я обязательно посмотрю - пока не нашел никого, кто упоминает такую ​​возможность:/ – Aurimas

+0

@Aurimas, Как вы решили эту проблему с помощью gearman? – Suriya

ответ

1

Я использовал Beanstalkd для получения 100 имен твиттеров за раз, а затем вызывая API со всеми ними. Когда я закончил, я удалил их, но я мог бы выбрать, чтобы не удалить некоторых (или всех), если бы захотел.

Это был простой цикл для резервирования начальных 100 (по одному), и я помещал результаты (идентификатор задания и возвращаемые данные) в массив. Когда я закончил работу с полезной нагрузкой (в данном случае, щебетать), я прошел через их удаление, но я мог бы легко отпустить их обратно в очередь.

+0

Спасибо, я вижу, как вы можете это сделать с Beanstalkd. В конце концов я пошел с Гирмэном, так что теперь мне просто нужно выяснить, смогу ли я сделать то же самое с Гирменом. – Aurimas

0

Возможно, вы могли бы принять вдохновение от MediaWiki's job queue system. Не очень сложно, но у него есть some issues, что вы можете столкнуться, если решите бросить свой собственный.

Таблицы DB, используемые для этого, определены here.

+0

Спасибо за предложение, но я действительно не думаю, что эта система очередей поддерживает то, что я ищу, (если я не пропустил это). Это хорошая отправная точка для разработки собственной системы очередей, тем не менее! – Aurimas