PHP
Frameworks
- YII2
- Laravel
Patterns
Реализации паттернов:
Background Job
- Background Job: выполнить (handle) X Task of Job by X Worker process
- Free
- Cron Job not scalable, limit 1 min period check jobs
- daemon supervisord
- Task Queue YII2 persist to RMQ, Redis, DB on supervisord
- Hermes 2.1.0 2019 persist to Redis, RMQ, ZeroMQ
- SimpleBus 3.0 2022 persist to Doctrine ORM, DBAL, RMQ?, Redis?
- Tactician 1.0 2021 persist by Doctrine to DB, Bernand to RMQ, Redis, MongoDB и тд
- Laravel persist to Redis, DB
- Bernard 0.13 2019 example
- Ruby
- Commercial
- Ruby Sidekiq and PHP workers and GUI
- Workflow, Batches, Statistics
- How to use:
- Ruby worker class
- Jobs in PHP
- Run Sidekiq
- Enqueue job
- Sidekiq process job
- Ruby Sidekiq and PHP workers and GUI
- Free
YII2 queue
- RabbitMQ and AWS SQS drivers don’t support статус задач
- можно Job по разным очередям публиковать (по умолчанию единая)
- Redis, AMQP Interop drivers - Full support for retryable jobs is implemented
- логирование по событиям add task, exec before start\after stop\after error, worker start\stop
мониторинг
выполнения задач
- некоторые driver, которые поддерживают статус задачи (Redis поддерживает, RMQ - нет)
- support queue/info
- GUI queue manager
- необходима поддержка статуса задач на уровне driver
- обрабатывает события yii2-queue: startExec, afterExec, afterError
- в БД хранит статистику
- repeat, create, delete, find, worker status, duration task
- статус задач и workers, длительность ожидания в очереди, выполнения задач, кол-во попыток выполнения
- worker не поддерживаются AMQP driver (Redis поддерживает при запуске в режиме run через cron и периодическом получении задач)
- обрабатывает события yii2-queue: afterPush, beforeExec, afterExec, afterError, workerStart, workerStop, workerLoop
- в БД хранит статистику отдельные таблицы: push, exec, worker
- очистка таблиц статистики
- failed task handle
- to DB, file log for driver Redis, DB, Beanstalkd
- to DB
- for Any driver?
- no GUI
- CLI list, run all\byID, delete
процессов обработчиков очереди задач на уровне supervisord
- обработка сигналов от supervisord перезапуска, остановки через pcntl
- exit code в приложении для supervisord
Laravel
- job execute by Number, All and exit process, Number Of Seconds
- мониторинг
- failed task handle save to table DB, NoSQL DynamoDB
- max count attempts
- Time Based Attempts
- count exception
- timeout task
- pcntl PHP extension need
- retry failed job
- delete failed job
- prune by time create failed job
DDD
Message Bus
Паттерн арх-го стиля EDA
- RMQ AMQP 0.9.1
- prooph
- Symfony Messenger
- Laravel Queues
- Ecotone Framework
- Symfony Messenger vs Laravel Queue vs Ecotone Framework
- php-enqueue поддержка Laravel, Magento2
- simplebus
Observability
Prometheus format metric:
- registry metric and type: counter, gauge set
- collector registry
- storage Redis, InMemory, APC
- exporter in format Prometheus for Prometheus\VM
Configuration
- Variables (Env) not in Code phpdotenv