Worker Mode для сайтов на WordPress и магазинов WooCommerce с использованием ActionScheduler

Вызываем демонов на 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.

Фото аватара
Антон Y

Веб разработчик, специализация на CMS, eCommerce, SEO, LMS, ECM, BPM: WordPress, WooCommerce, NextJS, Strapi, JAMStack ...

Статей: 19

Ответить

Ваш адрес email не будет опубликован. Обязательные поля помечены *