Yii Queue (Очереди)
Добавлено: 2019.01.30, 13:46
Добрый день. Недавно эволюционировал от CRON до работы с Linux Workers.
Установил расширение yiisoft/yii2-queue все настроил - все работает.
Но с повышением нагрузки потребовалось запустить несколько Рабочих для одной очереди. И здесь начались проблемы: процессы стали конфликтовать между собой и выкидывать ошибки.
Сейчас использую Supervisor для менеджмента процессов и запускаю по 3 процесса на очередь. и DB драйвер для Yii компонента.
Суть моих Рабочих: конвертация файлов, загрузка на облако, удаление файлов и т.д.
Пробовал следующее:
1. записывать в таблицу queue время старта. и в Queue::beforeExec проверять не взял ли паралельный процесс это задание
2. в самих Job-классах писал кучу проверок типа file_exists, ActiveRecord->exists() и т.д.
это минимизировало ошибки но они всеравно выбрасываються в связи с параллельным выполнением. тобишь система не стабильна
Подскажите пожалуйста как быть в этой ситуации? Возможно нужно как-то манипулировать приоритетами, или создавать Воркера динамически под каждого пользователя или я уже хз что придумать...
Или организовать другую архитектуру?
Установил расширение yiisoft/yii2-queue все настроил - все работает.
Но с повышением нагрузки потребовалось запустить несколько Рабочих для одной очереди. И здесь начались проблемы: процессы стали конфликтовать между собой и выкидывать ошибки.
Сейчас использую Supervisor для менеджмента процессов и запускаю по 3 процесса на очередь. и DB драйвер для Yii компонента.
Суть моих Рабочих: конвертация файлов, загрузка на облако, удаление файлов и т.д.
Пробовал следующее:
1. записывать в таблицу queue время старта. и в Queue::beforeExec проверять не взял ли паралельный процесс это задание
2. в самих Job-классах писал кучу проверок типа file_exists, ActiveRecord->exists() и т.д.
это минимизировало ошибки но они всеравно выбрасываються в связи с параллельным выполнением. тобишь система не стабильна
Подскажите пожалуйста как быть в этой ситуации? Возможно нужно как-то манипулировать приоритетами, или создавать Воркера динамически под каждого пользователя или я уже хз что придумать...
Или организовать другую архитектуру?