Files
transcriber/tasks/items/job-queue-choice.md
T
av bb973b0a68 Пересмотр очереди, выводы из текста, наблюдаемость
Разведка job-queue-choice — очередь написана вручную: захват не
транзакционен, повторов и счётчика попыток нет, очереди мёртвых задач
нет. Стоит перед сменой хранилища, чтобы не переписывать захват дважды.

Цель text-insights: заголовок, пересказ и темы внешним сервисом с
OpenAI-совместимым интерфейсом. Граница паспорта сдвинута — «понимание
сказанного» было записано как то, чем проект не является; за границей
остались ответы на вопросы по записи и поиск по смыслу.

Цель service-observability в сопровождении и разведка opentelemetry-fit:
/metrics остаётся и развивается, способ решает замер.
2026-08-10 21:46:08 +03:00

3.5 KiB

🔬 Очередь задач: своя таблица или готовая библиотека

  • Тип: research
  • Категория: Очередь
  • Зачем: Очередь написана вручную: захват двумя запросами без транзакции, протухание временем, опрос раз в секунду вхолостую тремя воркерами.

Сегодняшняя очередь — принцип «очередь таблицей» из architecture.md плюс FindAndAcquire в репозитории. Работает она на единицах записей в день, но написана целиком своими руками, и вот чего в ней нет:

  • захват не транзакционенUPDATE проставляет acquisition_id, отдельный SELECT читает строку по нему; сегодня это безопасно только потому, что три воркера читают три разных состояния и одну строку не делят;
  • повторов с нарастающей паузой нет — задача либо повторяется каждую секунду, либо ждёт истечения захвата целый час;
  • число попыток не считается — задача, падающая всегда, падает вечно;
  • опрос вхолостую — три воркера дёргают базу раз в секунду независимо от того, есть ли работа;
  • очереди мёртвых задач нетis_error = 1 исключает запись из выборки навсегда и молча.

Разведка идёт перед pocketbase-storage: смена хранилища перепишет захват задачи в любом случае, и переписывать его дважды незачем.

Вопрос

Берём ли готовую очередь на Go поверх той же базы, и если да — какую, или оставляем свою таблицу, дописав к ней повторы, счётчик попыток и очередь мёртвых задач.

Куда ляжет ответ

docs/research/job-queue.md — сравнение кандидатов с числами: зависимости, какая база нужна, переживает ли перезапуск, есть ли повторы и очередь мёртвых задач. Решение и причина отказа от остальных — в docs/adr/: принцип «очередь таблицей» записан в архитектуре, и его пересмотр обратной правкой не откатывается. Следом правится раздел «Принципы» в architecture.md.

Рамки

Внешнего брокера (Redis, RabbitMQ, NATS) не рассматриваем: он добавляет к выкладке процесс, которого там нет, ради нагрузки в единицы записей в день. Кандидаты — библиотеки, работающие поверх той же встроенной базы. Ответ обязан учесть, что хранилище скоро сменится на PocketBase.