Перейти к содержанию

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 — принято как приемлемая цена изоляции.