Skip to content

ADR 0044: переносимые зеркала и отдельный HA-профиль ​

Статус: proposed; mirror-профиль заменён ADR 0058 (2026-10-02: свой каталог и ключи у зеркала, забор по публичному API). Синхронный HA-профиль остаётся предложением. Дата: 2026-09-26. Runtime этим документом не добавлен.

Причина ​

Существующий reader требует общий согласованный root и primary PostgreSQL. Два независимых диска, копирование storage-id и heartbeat не выполняют запрос владельца на репликацию. Одновременно продукт ориентирован на Windows/Linux, а конкретная инфраструктура HA и политика подтверждения ещё не выбраны.

Предлагаемое решение ​

Первый переносимый профиль — асинхронное зеркало опубликованных immutable artifacts. Собственные node/volume identities, bounded copy/resume, durable receipts, ordered outbox и pins, защищающие данные от обоих GC. Каталог и ACL остаются на primary; read gateway получает ограниченные свежие grants. Mirror не становится writer и не считается самостоятельной резервной копией установки.

Control API обслуживает web/CLI/интеграции одинаково. Privileged installer и future fencing provider отделены от public API; node protocol — mTLS с ограниченными capabilities. UI различает состояние сети, копирования, раздачи и допустимость cutover; недоступный backend не заменяется заглушкой.

Синхронный HA — отдельный профиль на проверенной инфраструктуре. Для Linux рассматривается replicated volume + внешний fencing; PostgreSQL и bytes/parts участвуют в едином подтверждении. Нет собственного leader election, multi-master или автоматического повышения app mirror. Принятие конкретного HA-профиля требует выбора ОС/backend/fencing и испытаний.

Последствия ​

Появятся новые миграции outbox/pins/receipts и отдельная supervised worker role; они реализуются только вместе с завершёнными сценариями. Global journal commit ordering может стать точкой сериализации и измеряется. GC учитывает durable obligations и backlog pressure. Независимые зеркала нельзя подключить через действующий reader flag. Доступность чтения первого профиля зависит от authority primary; для автономного чтения понадобится отдельное решение о каталоге и отзыве прав.

Отклонённые сокращения ​

Копирование живых PGDATA/blob каталогов, повышение узла по тайм-ауту, удаление pins по TTL, max(BIGSERIAL) как commit cursor, перенос администратора/root key в зеркало, возврат «готово» по heartbeat и обещание RPO=0 только на основании SHA-256.

Приёмка ​

REPLICATION задаёт R1–R6 и отказные сценарии; API и UX фиксируют границы управления. До реализации и локальной/стендовой приёмки не менять README status на implemented. Ответы владельца о первом режиме и ОС могут изменить порядок этапов, но не отменяют fencing/ACK/GC инварианты.

Arkvory · ProAnimaStudio