PHP асинхронная обработка с beanstalkd. Вы рекомендуете это?

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

13
задан Alister Bulman 23 October 2009 в 22:10
поделиться

1 ответ

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

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

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

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

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

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

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

15
ответ дан 2 December 2019 в 00:18
поделиться
Другие вопросы по тегам:

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