Ноды
Нода — сервер с агентом и Xray. Backend хранит её описание и желаемое состояние; агент поддерживает соответствие (см. Архитектуру).
Атрибуты
Section titled “Атрибуты”| Поле | Назначение |
|---|---|
name |
Отображаемое имя (nl-1) |
public_address |
Адрес, который попадает в клиентские конфиги и аутбаунды соседних хопов |
block_torrent |
Политика торрент-трафика на ноде, см. Трафик |
desired_revision |
Монотонный счётчик желаемого состояния |
applied_revision |
Последняя ревизия, подтверждённая агентом |
Поля, которые нода сообщает сама (агент → backend, backend только отображает): версия агента и Xray, ОС, IP-адреса, системные метрики, время последнего контакта.
Состояния
Section titled “Состояния”Два независимых измерения — административное состояние (управляется админом и enrollment-процессом) и связность (наблюдаемый факт):
stateDiagram-v2
direction LR
[*] --> provisioning : создана в панели
provisioning --> active : агент прошёл enrollment
active --> disabled : выключена админом
disabled --> active
active --> [*] : удалена
| Административное | Значение |
|---|---|
provisioning |
Создана, enrollment-токен выдан, агент ещё не подключался |
active |
Агент зарегистрирован; нода участвует в рендере конфигов и подписок |
disabled |
Исключена из подписок и цепочек; агент может подключаться, но desired state пуст |
| Связность | Значение |
|---|---|
online |
gRPC-стрим агента открыт |
offline |
Стрим закрыт; фиксируется last_seen_at |
Связность не хранится как колонка-состояние — она выводится из наличия живого стрима и last_seen_at. Дополнительно наблюдаемый сигнал: applied_revision < desired_revision дольше порога — нода не может применить конфигурацию (ошибка применения приходит в статус-отчёте агента).
Жизненный цикл
Section titled “Жизненный цикл”- Создание. Админ задаёт
nameиpublic_address. Backend генерирует одноразовый enrollment-токен (TTL 24 ч), показывает команду установки агента. - Enrollment. Агент на сервере предъявляет токен, отправляет CSR, получает клиентский mTLS-сертификат и открывает стрим. Детали — Безопасность агента.
- Эксплуатация. Любое изменение, затрагивающее ноду, инкрементирует
desired_revision; агент применяет и подтверждает. - Отключение.
disabled: backend рендерит ноде пустое состояние (Xray без клиентских инбаундов), подписки перестают включать её адрес. Обратимо. - Удаление. Запрещено, пока нода входит в активную цепочку (Мультихоп) — сначала цепочка перестраивается. Инбаунды ноды удаляются каскадно. Суточная статистика трафика (агрегирована по подпискам) сохраняется; теряется только почасовая детализация этой ноды за последние 30 дней (Трафик).
Ревизии
Section titled “Ревизии”desired_revision инкрементируется в той же транзакции, что и изменение данных, влияющих на рендер: инбаунды ноды, клиенты с доступом к ним, сертификаты этих инбаундов, цепочки с участием ноды, флаг торрентов. Рендер выполняется при отправке, а не при записи: хранится только счётчик, сам снапшот не материализуется в БД (нет хранения вычисляемых данных, нечему рассинхронизироваться).
Один снапшот всегда целиком заменяет предыдущий, поэтому пропуск ревизий безопасен: нода, отставшая на 10 ревизий, применяет только последнюю.