ADR 0001: Inngest владеет своим датастором¶
- Статус: принято
- Дата: 2026-06-12
- Связано: #8 (консолидация БД парка, later), event-bus-concept.md разделы 4, 10
Контекст¶
Self-hosted Inngest требует Postgres (конфигурация, история запусков) и Redis (очередь, стейт шагов). В парке уже несколько сервисов (n8n, Mautic, Plane, …), и возникает соблазн вынести базу в один общий для всех сервис ради экономии ресурсов.
Решение¶
Postgres и Redis Inngest остаются приватными внутри стека шины и не выносятся в общую базу.
Это внутреннее состояние движка — по принципу концепта (раздел 4,
«внутренняя оркестрация одного обработчика») оно наружу не выходит. Датастор
вынесен за абстракцию через INNGEST_POSTGRES_URI / INNGEST_REDIS_URI
(env), поэтому при будущей нужде его можно перецелить на внешний сервер
сменой одной переменной — без переархитектуры.
Почему не общая база¶
- Радиус поражения. Общая база — единая точка отказа для всех сервисов; рестарт/мейнтенанс/распухшая история Inngest роняет всех. Противоречит тезису проекта о независимости участников.
- Связанность жизненного цикла. Нельзя обновить Postgres под Inngest, не задев остальных; версии разойдутся.
- Шум и изоляция. Очередь Inngest в общем Redis рядом с чужими ключами —
коллизии, риск
FLUSHALL, конкуренция за память. - Преждевременность (раздел 10). Слой добавляется, когда боль реальна. Сейчас боли нет, фундамент даже не развёрнут.
Граница (важно)¶
«Общая БД» (одна база, общие таблицы) — отвергнута для стейта движка навсегда. Отдельный вопрос — «общий сервер, изолированные базы/роли»: он допустим ради экономии и рассматривается в #8. Но даже на общем сервере стейт движка остаётся логически приватным (своя база, своя роль).
Последствия¶
- (+) Максимальная изоляция и независимый жизненный цикл движка.
- (+) Дверь для консолидации открыта без долга (env-абстракция).
- (−) Один дополнительный инстанс Postgres и Redis — принято как приемлемая цена изоляции.