Skip to content

ADR-007: Неймспейс движка без generic-абстракции

Status: Accepted · Date: 2026-07-03

Предложение: спроектировать Astral как универсальный оркестратор сетевых сервисов (Provider → Protocol → Resource → Deployment), где Xray — один из движков наряду с будущими WireGuard, sing-box, Hysteria.

Generic-абстракция движков не вводится. Вместо этого покупается опциональность двумя дешёвыми мерами:

  1. Xray-специфика контракта изолирована в поле NodeConfig.xray (gRPC API) — второй движок станет аддитивным полем, а не v2 контракта.
  2. Синтаксис Xray в backend знает единственный пакет controlplane/render/xray (Структура backend) — второй движок станет вторым пакетом рендера.

Отклонённые альтернативы

Section titled “Отклонённые альтернативы”

Универсальный оркестратор сейчас. Абстракция, спроектированная по одной реализации, почти всегда неправильная: WireGuard устроен фундаментально иначе (обмен ключами вместо секретов в конфиге, kernel-модуль, нет per-user-счётчиков в процессе, нет TLS-маскировки). «Generic Resource», придуманный глядя только на Xray, пришлось бы ломать при первой же реальной второй реализации — оплата за слой дважды. Принцип: abstract over things that have already proven to be the same, not merely similar.

  • (+) Транспорт и структура backend не мешают появлению второго движка; стоимость подготовки — одно поле proto и одно правило импорта.
  • (+) Общая модель движков будет извлечена из двух реальных реализаций, когда вторая появится (новый ADR).
  • (−) До этого момента доменная модель (профили, инбаунды, креденшелы) Xray-центрична — осознанно.