● Документация · пример раздела

Архитектура и устройство Homyak

Это образец раздела документации продукта: устройство и принципы — без детальных спецификаций. Точные описания протокола, API и форматов предоставляются по запросу: hello@inter-forum.org.


Обзор

Homyak — система серверного резервного копирования с централизованным хранением и контролем целостности. Состоит из агентов, которые снимают копии и передают их, и сервера хранения, который проверяет целостность принимаемых и хранимых данных, управляет копиями и отдаёт состояние по REST API.

Принцип: сервер принимает данные только от заранее настроенных агентов; каждый файл копии сопровождается манифестом с контрольной суммой и описанием.

Компоненты

Серверная часть и агенты написаны на Go и собираются из единой моно-репозитории. Кодовая база компактна: ~17 тыс. строк production-кода и ~10 тыс. строк тестов на весь комплекс — высокая плотность функциональности на объём кода упрощает аудит и сопровождение.

КомпонентНазначениеПлатформа
homyak-serverПриём, хранение, контроль целостности, REST APILinux
homyak-agent-kvmКопирование ВМ KVM/libvirtLinux
homyak-agent-mssqlКопирование баз MS SQL Server (BACKUP DATABASE)Windows
homyak-agent-pgКопирование баз PostgreSQL (pg_dump -Fc)Linux
homyak-stagingКонсолидированный слепок копий перед выгрузкойLinux
homyak-tapeВыгрузка staging-слепка на стример LTOLinux
homyak-genhashГенерация argon2id-хэшей секретов агентовLinux

Потоки данных

Жизненный цикл одной копии — от снятия на агенте до фоновой перепроверки на сервере:

01

Снятие

Агент делает копию и считает SHA-256.

02

Загрузка

Потоковая передача во временный объект, с возобновлением после обрыва.

03

Фиксация

Сверка суммы и атомарный rename в финальный файл + манифест.

04

Rescan

Фоновый сканер периодически пересчитывает суммы хранимых копий.

Протокол агент ↔ сервер

Общий HTTP-протокол для всех агентов: сервер принимает данные только от заранее настроенных агентов, каждый запрос аутентифицируется токеном. Загрузка двухшаговая — сначала описание копии (манифест), затем поток данных: все проверки проходят до начала длинной передачи, повторы идемпотентны. Обрыв крупной копии не означает перезаливку — передача возобновляется с последнего принятого байта.

загрузка · схема
# двухшаговая загрузка (упрощённо)
шаг 1  манифест копии
       → аутентификация и проверки до передачи данных
шаг 2  поток данных
       → сверка контрольной суммы → атомарная фиксация

# отказоустойчивость
обрыв   → возобновление с последнего принятого байта
повтор  → идемпотентен, дублей не создаёт
занято  → имя существует — перезапись отклоняется
Точная спецификация протокола (эндпоинты, заголовки, коды ответов) — в полной документации, по запросу: hello@inter-forum.org.

Целостность и режим «Копилка»

Контрольная сумма SHA-256 проверяется при приёме и затем периодически фоновым пересканированием уже сохранённых копий. Расхождения пишутся в отдельный журнал целостности и влияют на состояние здоровья сервера.

Режим «Копилка» — это модель write-once: агент может только добавлять копии. Удаление принятых данных по запросу агента не предусмотрено протоколом; стирание возможно лишь серверной retention-политикой или решением оператора. Без политики копия хранится бессрочно.

Эффект безопасности: компрометация узла-источника не приводит к потере или подмене уже сохранённых копий.

Staging и архивный контур LTO

Сервер хранения накапливает историю копий каждого задания. Для выгрузки вовне нужен один консолидированный набор — эту задачу решает сервис homyak-staging: проходит по хранилищу и собирает слепок — по одному файлу на каждое задание (агент + БД/ВМ) — в отдельный каталог с описью. Прогон — демоном по cron-расписанию или вручную (--once).

  • Отборlatest или earliest на задание; allowlist агентов исключает, например, тестовые базы.
  • Переносcopy (источник остаётся) или move (вывод из горячего хранилища; выполняется при остановленном сервере).
  • Верификация — опциональная пересверка SHA-256 с манифестом при отборе; несовпадение исключает файл из слепка, не валя прогон.
  • Двойная опись — машиночитаемая для автоматизации и табличная для оператора (агент, задание, файл, размер, контрольная сумма).
  • Атомарная публикация — новый слепок собирается отдельно и публикуется атомарным переключением; глубина хранения снапшотов настраивается.
  • Защита прогонов — копии с незавершённой загрузкой пропускаются; параллельные прогоны не накладываются.
staging → tape · схема
# контур архивирования (упрощённо)
основное хранилище — вся история копий
   отбор: один файл на (агент + задание)
слепок — самодостаточный набор + опись
   атомарная публикация актуального слепка
архив — запись слепка на кассету LTO
   восстановление штатными средствами Linux,
    без ПО Homyak
Контур целиком: сервер хранения → staging-слепок → лента LTO. Актуальный слепок — вход модуля homyak-tape; модуль ведёт дисковый каталог кассет и учёт ресурса привода.

Безопасность

Безопасность контура хранения обеспечивается непрерывным динамическим анализом уязвимостей на основе передовых моделей Claude Mythos 5 и Fable 5. Модель работает в adversarial-режиме — как атакующий, исследующий поверхность атаки сервера и протокола: пути записи и удаления данных, аутентификацию и авторизацию, изоляцию агентов, состояния гонки. Процесс встроен в цикл разработки и повторяется при каждом значимом изменении кодовой базы.

Этап циклаСодержание
Выявление (discovery)Динамическое исследование поверхности атаки моделью в роли атакующего, по сценариям из модели угроз
TriageКлассификация находок по уровню критичности, регистрация с привязкой к коду
МитигацияУстранение в коде либо компенсирующие контроли (сетевые ACL, hardening конфигурации); принятие риска — только с документированным обоснованием
Регрессионная верификацияПовторный анализ: подтверждение закрытия находок и отсутствия деградации защитных свойств
Принцип: анализ — не разовый аудит, а постоянный контроль: каждое изменение контура хранения проходит цикл выявления и митигации до выпуска.

REST API

Сервер отдаёт машиночитаемое состояние — основа для мониторинга и ИИ-наблюдателей. Группы возможностей API:

ГруппаВозможности
состояниеСводное здоровье сервера: агрегаты по агентам, целостности, хранилищу
агентыРеестр, heartbeat, состояние последних заданий каждого агента
копииИндекс копий с фильтрами и пагинацией, манифесты
целостностьЗафиксированные проблемы, квитирование оператором
приёмЗагрузка копий агентами по протоколу (см. выше)
Read-операции — под отдельным операторским токеном; спецификация эндпоинтов и форматов ответов — по запросу.

Мониторинг

Состояние агентов и сервера отдаётся машиночитаемым JSON: Zabbix снимает его штатным HTTP-агентом (JSONPath-препроцессинг), Prometheus — через стандартный json_exporter; доработки кода не требуются. Heartbeat агентов с настраиваемым тайм-аутом помечает «отвалившиеся» источники; события целостности идут в JSON-лог с ротацией.

Конфигурация

Конфигурация — YAML, секреты — отдельно в .env; поведение меняется конфигом, без пересборки. Настраиваются, в частности:

  • Контроль целостности — сверка при приёме (в v1 всегда включена), cron-расписание фонового пересчёта, влияние находок на здоровье сервера, степень параллелизма.
  • Retention — политики срока жизни копий и периодичность очистки; без политики — бессрочное хранение.
  • Приём — лимит параллельных загрузок, отдельные корни хранилища под конкретных агентов.
  • Логирование — уровень, формат, ротация; отдельный канал для событий целостности.
Полный справочник параметров конфигурации — в документации по запросу.

Готовность к доработкам

Модульность (агенты ↔ общий протокол ↔ сервер) позволяет адаптировать систему под инфраструктуру заказчика:

  • Новые типы агентов — поверх KVM, MS SQL и PostgreSQL: файловые деревья, произвольные команды.
  • Бэкенды хранения — расширение файлового хранилища на объектное (S3); ленточный контур LTO реализован модулем homyak-tape.
  • Интеграции — выгрузка слепка staging во внешние системы архивирования.
Обсудить доработку под вашу задачу: hello@inter-forum.org · homyak.interforum.su