megakor
@megakor
Go/PHP developer | ВКонтакте

Laravel Horizon: много супервизоров — мало очередей или мало супервизоров — много очередей?

В чем разница - много супервизоров - мало очередей или мало супервизоров - много очередей.
Как я понимаю, второй вариант лучше - т.к. работает балансировка внутри супервизара?

1 вариант:
'defaults' => [
        'supervisor-1' => [
            'connection' => 'redis',
            'queue' => ['high'],
            'balance' => 'auto',
            'minProcesses' => 1,
            'maxProcesses' => 1,
            'memory' => 128,
            'tries' => 3,
            'nice' => 0,
        ],
        'supervisor-2' => [
            'connection' => 'redis',
            'queue' => ['default'],
            'balance' => 'auto',
            'minProcesses' => 1,
            'maxProcesses' => 1,
            'memory' => 128,
            'tries' => 3,
            'nice' => 10,
        ],
        'supervisor-3' => [
            'connection' => 'redis',
            'queue' => ['low'],
            'balance' => 'auto',
            'minProcesses' => 1,
            'maxProcesses' => 1,
            'memory' => 128,
            'tries' => 3,
            'nice' => 20,
        ],
    ],


2 вариант:
'defaults' => [
        'supervisor-1' => [
            'connection' => 'redis',
            'queue' => ['high', 'default', 'low'],
            'balance' => 'auto',
            'minProcesses' => 1,
            'maxProcesses' => 3,
            'memory' => 128,
            'tries' => 3,
            'nice' => 0,
        ],
    ],
  • Вопрос задан
  • 797 просмотров
Решения вопроса 2
@vism
Да, в верном направлении мысль.
Вобще по ситуации обычно, разные настройки.
Вот например у меня
один супервизор на всё подряд
второй на загрузку и обработку фотографий
И разные настройки соотвественно.

Так же может забиться high queue.
Чтоб не мучаться с очередностью, 2 разных супервизора, гарантия, что мои MEDIA queue будут выполняться всегда и не зависеть от нагрузки или зависаний первого супервизора

'production' => [
            'supervisor-1' => [
                'connection' => 'redis',
                'queue' => ['high','medium', 'low'],
                'balance' => 'simple',
                'tries' => 3,
                'timeout' => 300,
                'maxProcesses' => 5,
                'balanceMaxShift' => 1,
                'balanceCooldown' => 3,
            ],
            'supervisor-2' => [
                'connection' => 'redis',
                'queue' => [
                    \App\Services\QueueService::QUEUE_NAME__MEDIA_TO_STORAGE,
                    \App\Services\QueueService::QUEUE_NAME__MEDIA_LIBRARY,
                ],
                'balance' => 'simple',
                'tries' => 3,
                'timeout' => 120,
                'maxProcesses' => 1,
                'balanceMaxShift' => 1,
                'balanceCooldown' => 3,
            ],
        ],
Ответ написан
@Samuel_Leonardo
В 1-м варианте индивидуальные настройки для каждой очереди с приоритетами,
во 2-м варианте от обработки очередей остается в данном случае только разбивка по названиям.
horizon просто создаст по потоку с дефолтным приоритетом на каждую очередь, автоскейлу некуда расти
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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