Лучшие практики сельдерея - PullRequest
1 голос
/ 29 апреля 2020

Я использую Celery для фоновых заданий для моего приложения Django, размещенного на Heroku, с Redis в качестве брокера. и я хочу установить приоритеты задач.

В настоящее время я использую очередь Celery по умолчанию, и все работники получают данные. Я думал о реализации приоритетов в единственной очереди , но это везде описывается как плохая практика. Консенсус в отношении лучшего подхода к решению проблемы приоритета состоит в том, чтобы установить различные очереди Celery для каждого уровня приоритета . Допустим,

  • Очередь1 для задач с наивысшим приоритетом, назначенным для x рабочих

  • Очередь2 - очередь по умолчанию, назначенная всем остальным работникам

Первая проблема, которую я вижу с этим методом, заключается в том, что если в какой-то момент нет задачи с высоким приоритетом, я теряю производительность рабочих x.

Также, скажем, моя инфраструктура расширяется, и у меня есть больше рабочих. Только количество работников по умолчанию будет динамически расширяться. Кроме того, этот метод не позволяет мне хранить идентичные dyno (контейнеры в Heroku), которые не выглядят оптимизированными для масштабируемости.

Существует ли эффективный способ справиться с определением приоритетов задач и одновременно сохранить реплицируемых рабочих?

1 Ответ

0 голосов
/ 29 апреля 2020

Для ответа, W1 и W2 - рабочие, выполняющие задачи с высоким и низким приоритетом соответственно.

Вы можете масштабировать W1 и W2 как отдельные контейнеры. Вы можете иметь три контейнера, по существу нарисованные из одного изображения. Один для приложения, два для рабочих. Если у вас больше задач одного типа, масштабируется только этот контейнер. Кроме того, в зависимости от типа используемого вами динамометрического стенда, вы можете установить параллелизм для рабочих для более эффективного использования ресурсов.

Для справки, это то, что я делал в одном из моих проектов.

Scaling workers

...