Ответ вслух Senior Celery и очереди спрашивают часто обновлено

Надёжные фоновые задачи

Вопрос

Как вы сделаете фоновые задачи надёжными: чтобы они не терялись и не выполнялись с повторным эффектом?

Попробуйте сами

Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.

Показать ответ и разбор

Коротко

Образцовый ответ: «Начинаю с постановки: задача, которая читает новые данные, уходит через transaction.oncommit, а для важных событий использую outbox, чтобы публикация была атомарной с данными.

Что должно прозвучать в ответе

  • Постановка после коммита или outbox

  • acks_late и reject_on_worker_lost для гарантии выполнения

  • Идемпотентность: проверка состояния, уникальные ключи, ключ идемпотентности во внешних API

  • Ретраи только временных ошибок с backoff, лимит попыток

  • Лимиты времени, мониторинг очередей и упавших задач

  • Передача id, а не объектов; маленькие задачи

Что могут спросить следом

  • Что будет с задачей при деплое и перезапуске воркеров?
  • Как вы мониторите очереди?

Разбор

Образцовый ответ: «Начинаю с постановки: задача, которая читает новые данные, уходит через transaction.on_commit, а для важных событий использую outbox, чтобы публикация была атомарной с данными. Дальше гарантия выполнения: acks_late=True и task_reject_on_worker_lost=True, тогда задача вернётся в очередь при падении или перезапуске воркера. Раз возможны повторы, каждая задача идемпотентна: перед действием проверяю состояние, захватываю работу атомарным условным UPDATE, во внешние API передаю ключ идемпотентности, вставки делаю с уникальными ключами. Ретраи настраиваю только на временные ошибки с экспоненциальной задержкой, джиттером и пределом попыток, а исчерпавшие попытки задачи логирую и алертю. Ставлю soft_time_limit и time_limit. В задачу передаю id и мелкие данные. Мониторю длину очередей, возраст самого старого сообщения, долю ошибок и время выполнения, например через Flower или метрики в Prometheus».

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.