Асинхронная обработка или очереди сообщений в PHP (CakePHP) [закрытый]

Хранение большинства переменных локально и уменьшение их объема помогает продвигать лучшие практики программирования. Это также снижает риск ошибочного изменения переменной и необходимости отслеживать через функции в поисках непредвиденных или неочевидных последствий. Я считаю, что это также облегчает чтение и обслуживание кода, поскольку большинство переменных, относящихся к определенному разделу кода, определены и инициализированы поблизости. В противном случае я, кажется, постоянно возвращаюсь к разделу кода, определяющему все golbals. Я использую некоторые глобальные переменные, но в основном для передачи информации о конфигурации в субмодули.

33
задан Whymarrh 23 August 2014 в 15:40
поделиться

3 ответа

У меня были отличные результаты с BeanstalkD и серверной частью, написанной на PHP, для получения заданий и последующей обработки их. Я заключил фактическое выполнение задания в bash-скрипт, чтобы оно продолжало работать, даже если оно завершилось (если я не сделаю ' exit (UNIQNUM); ', когда скрипт его проверит и действительно выйдет). Таким образом, перезапущенный сценарий PHP очищает всю память, которая могла быть использована, и может запускать заново каждые 25/50/100 заданий, которые он выполняет.

Пара преимуществ его использования заключается в том, что вы можете устанавливать приоритеты и задержки в задании BeanstalkD - «запустите это с более низким приоритетом, но не запускайте в течение 10 секунд». Я также иногда ставил в очередь несколько заданий (запустите это сейчас, через 5 секунд и снова через 30 секунд).

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

I '

25
ответ дан 27 November 2019 в 19:30
поделиться

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

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

4
ответ дан 27 November 2019 в 19:30
поделиться

Может, стоит также попробовать Amazon SQS для использования вместе с EC2?

0
ответ дан 27 November 2019 в 19:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: