YETI³ STUDIO / Коллекция готовых сайтовЭто может быть ваш сайт ↗
JOURNALтехнологии · опыт · люди
← К публикациям
ННикита Орловдемо

Очередь задач без магии: что случится после перезапуска

Бэкенд

Почему задача должна иметь владельца, срок выполнения и понятное состояние.

Сначала договоритесь о гарантиях

Фоновая задача может быть получена дважды, завершиться после тайм-аута или потерять соединение в момент записи результата. Не начинайте с обещания exactly once. Опишите, какие повторы безопасны и где хранится окончательный результат.

Забирайте работу атомарно

Блокировка записи и SKIP LOCKED позволяют нескольким работникам выбирать разные задания. Состояние processing фиксируется до тяжёлой операции. Длительное вычисление выполняется вне транзакции.

SELECT id FROM jobs
WHERE status = 'queued'
ORDER BY created_at
FOR UPDATE SKIP LOCKED
LIMIT 1;

Сбой должен быть виден

Храните время начала, номер попытки и безопасное сообщение об ошибке. Отдельно отслеживайте задания, которые слишком долго остаются в processing. Не запускайте бесконечные повторы повреждённого файла.

Проверка на практике

Остановите работника во время обработки тестового задания. Запустите его заново и убедитесь, что очередь сохраняется, соседние задания выполняются, а незавершённая работа получает явный статус. Метрика размера очереди без возраста старейшего задания не показывает всю картину.

↑ 3 · Оценить▢ В закладки
Н
Никита Орлов

Пишу о надёжности сервисов и спокойных релизах. Вымышленный автор демо.

Обсуждение 2

Обсуждаем идеи, делимся опытом и уважаем собеседника.

Полезный разговор начинается с вас.

Войти и обсудить ↗
ААлексей Морозовдемо

Что делать с задачей, которую работник забрал и завис? Сразу возвращать в очередь?

ННикита Орловдемо

Сначала нужен явный срок и проверка живого работника. Повтор должен быть безопасным: промежуточные файлы не считаются завершённым результатом.

YETI³ STUDIO / ГОТОВОЕ РЕШЕНИЕ

Ваш бизнес.
Ваш новый сайт.

Этот дизайн уже работает. Смените название, добавьте своё содержание и управляйте сайтом из одного кабинета.

Мобильная версияУправление контентомСвой домен
Решение JOURNALот 6900 ₽

Лицензия дизайна и функций решения. Размещение и ядро рассчитываются отдельно.

Настроить в конструкторе ↗

Окончательный расчёт и доступность установки — в конструкторе. Здесь демонстрационные данные.

JOURNAL / КОЛЛЕКЦИЯ

Один журнал.
Ваш характер.

42 готовые композиции. Общие публикации, сообщество и видео.

JournalСообществоСмотреть ↗CheerUpMirandaСмотреть ↗CheerUpLifestyleСмотреть ↗CheerUpBoldСмотреть ↗CheerUpMagazineСмотреть ↗CheerUpFoodСмотреть ↗CheerUpFashionСмотреть ↗CheerUpMomСмотреть ↗CheerUpTravelСмотреть ↗CheerUpRovellaСмотреть ↗CheerUpFitnessСмотреть ↗CheerUpGeneralСмотреть ↗CheerUpTrendyСмотреть ↗CheerUpBeautyСмотреть ↗CheerUpDefaultСмотреть ↗Lets BlogКлассическийСмотреть ↗Lets BlogСлайдер в 3 колонкиСмотреть ↗Lets BlogСетка без рамкиСмотреть ↗Lets BlogКонтейнерСмотреть ↗Lets BlogВерхнее менюСмотреть ↗Lets BlogПростое менюСмотреть ↗LaFeminiteРедакционный разворотСмотреть ↗LaFeminiteПростая главнаяСмотреть ↗LaFeminiteАвторский журналСмотреть ↗WritingОсновной · на всю ширинуСмотреть ↗WritingОсновной · с колонкойСмотреть ↗WritingРазновысокая сетка · на всю ширинуСмотреть ↗WritingРазновысокая сетка · с колонкойСмотреть ↗WritingСписок · на всю ширинуСмотреть ↗WritingСписок · с колонкойСмотреть ↗WritingКлассический · на всю ширинуСмотреть ↗WritingКлассический · с колонкойСмотреть ↗WritingСетка с главным материалом · на всю ширинуСмотреть ↗WritingСетка с главным материалом · с колонкойСмотреть ↗WritingСписок с главным материалом · на всю ширинуСмотреть ↗WritingСписок с главным материалом · с колонкойСмотреть ↗SoledadТехнологииСмотреть ↗SoledadЖурналСмотреть ↗SoledadНаукаСмотреть ↗SoledadСетка без колонкиСмотреть ↗SoledadСетка с колонкойСмотреть ↗SoledadВидеожурналСмотреть ↗