Можно ли использовать PHP-FPM для управления потребителями очереди? - PullRequest
0 голосов
/ 27 октября 2011

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

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

Является ли хорошей идеей использовать PHP-FPM для настройки количества рабочих и экономии оперативной памяти? Готово ли это к производству? Есть ли лучшие решения?

Спасибо

Ответы [ 2 ]

1 голос
/ 27 октября 2011

Я использую систему очередей, которая обрабатывает миллионы сообщений в день.В основном через Amazon SQS, но я также использую новую систему Beanstalkd с более чем 600 000 сообщений там прямо сейчас.

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

Эти сценарии оболочки запускаются с Supervisord ,Есть еще одно сообщение в блоге об использовании этого .В настоящее время я выполняю более 800 рабочих сценариев (для нескольких различных типов заданий) на девяти компьютерах, все они извлекают данные из разных очередей и помещают данные в другие очереди, записывая их в базу данных или файлы.Увеличение числа рабочих на машину - это вопрос увеличения числа «numprocs» (или его уже достаточно большого размера), а затем, при необходимости, запуска большего количества.Можно также сказать, 5 автозапуска, а затем еще один блок из 50, которые готовы к запуску при необходимости.

Я считаю, что каждый работник занимает только около 20 МБ неиспользуемой памяти (остальное является общим для процессов).Конечно, это зависит от задач, которые выполняют рабочие.Изменение размера изображения может занять много усилий.Отчасти по этой причине у меня есть возможность часто перезапускать скрипт PHP.

1 голос
/ 27 октября 2011

Всякий раз, когда мне приходилось запускать вещи одновременно (или асинхронно), я отправлял задания механику работникам. У меня обычно было по крайней мере один процесс на ядро ​​ЦП на каждую работающую физическую машину.

PHP-FPM - это демон cgi. Таким образом, ваш beanstalkd-процессор будет выполнять множество HTTP-запросов к вашей собственной системе. Те, вероятно, должны пройти через ваш стек http. Не уверен, что это отличная идея.

Вы также можете проверить pcntl_fork , чтобы преобразовать текущий процесс в несколько текущих процессов.

...