Вызываем демонов на WordPress & WooCommerce, делаем асинхронную обработку. Про high load и тяжелые операции.
Worker Mode — это архитектурный паттерн, который позволяет веб-приложениям эффективно обрабатывать ресурсоемкие задачи асинхронно. Он отделяет основной поток приложения от фоновой обработки для поддержания оптимальной производительности и удобства использования.
Ключевые преимущества Worker Mode
- Повышенная производительность: За счет передачи тяжелых задач фоновым работникам основное приложение остается отзывчивым и быстрым
- Лучшее управление ресурсами: Воркеры могут эффективно распределять системные ресурсы между различными задачами
- Масштабируемость: Легко масштабировать процессы воркеров независимо в соответствии с требованиями нагрузки
- Улучшенный пользовательский опыт: Пользователи не испытывают задержек, пока сложные операции выполняются в фоновом режиме
Популярные сценарии использования в электронной коммерции и для магазинов
- Обработка заказов: Обработка платежей, обновление инвентаря и выполнение заказов в фоновом режиме
- Управление запасами: Обработка массовых обновлений товаров и синхронизация с внешними системами
- Email-уведомления: Асинхронная отправка подтверждений заказов, обновлений о доставке и маркетинговых рассылок
- Формирование отчетов: Создание сложных отчетов и аналитики без влияния на производительность магазина
- Обработка изображений: Фоновая оптимизация изображений товаров и создание вариантов
- Обновление цен: Эффективное управление массовыми изменениями цен и промо-обновлениями
Примеры для Laravel & MedusaJS
Подобные конфиги часто встречаются для микросервисов или для магазинов.
Пример для ларавел на базе railway https://docs.railway.com/guides/laravel#set-up-database-migrations-crons-and-workers
Пример стартер шаблона для магазины на базе Медузы https://railway.app/template/zC7eOq
Решение для WordPress & WooCommerce
В базе Woo — используется решение ActionScheduler. В случае с WordPress надо ставить плагин отдельно.
Если же стоит WooCommerce — то этот компонент идет сразу в коробке.
Все с ним хорошо — но в базе он работает через PHP FPM.
Если постараться то можно настроить WP CLI.
Однако я не нашел в нем режиме Worker Mode так чтобы было похоже на Laravel или MedusaJS или любые другие фреймворки с поддержкой этого режима.
Чтобы исправить эту досаду — написал простой плагин https://github.com/aiiddqd/as-worker
Работает так:
- ставим плагин и активируем
- запускаем unixcron на команду
wp as-worker
Все — теперь PHP FPM отключен, а запуск идет через unixcron, PHP CLI & WP CLI.
Главный плюс в том что теперь доступно выполнение даже очень сложных и долгих задач — которые на PHP FPM просто будут обрываться с ошибкой таймаута.
Пример
На сайте aappss.ru надо выполнять тяжелые операции типа парсинг или запросы к нейросетям.
Там уже есть WooCommerce и просто ставим плагин as worker, активируем.
Далее идем в unixcron и настраиваем запуск каждую минуту.
В данном кейсе применяется Beget и выглядит это так:
Итого
Мы получаем работу демона или воркера в фоне — который позволяет быстро и просто делать асинхронные обработки.
Все что требует большого времени обработки — отправляется в AS.
А демон-воркер — обрабатывает это все в фоне.
По сути это аналог Worker Mode от Laravel.