ADR-003: PostgreSQL как единственное хранилище
Status: Accepted · Date: 2026-07-03
Контекст
Section titled “Контекст”Системе нужны: реляционные данные, фоновые задачи с расписанием и ретраями, распределённые блокировки. Целевой масштаб — до ~100 нод и ~100 тыс. клиентов на инсталляцию; типовой оператор — self-hosted.
Решение
Section titled “Решение”Всё — в PostgreSQL: данные, очередь задач (River), блокировки (advisory locks). Redis и отдельные брокеры не используются.
Отклонённые альтернативы
Section titled “Отклонённые альтернативы”Redis + Asynq (предыдущий стек): второй stateful-компонент, который нужно разворачивать, мониторить, бэкапить и объяснять пользователю self-hosted-инсталляции. На целевом масштабе очередь в PostgreSQL держит нагрузку с запасом; транзакционность задач с данными (enqueue в той же транзакции, что и изменение) — бонус, которого Redis-очередь не даёт без outbox.
Последствия
Section titled “Последствия”- (+) Один компонент для бэкапа и восстановления; меньше страница «Требования».
- (+) Задача ставится атомарно с изменением данных.
- (−) При росте нагрузки на очередь на порядки решение пересматривается — это будет новый ADR с измеренными цифрами, а не преждевременный брокер.