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

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

Это образец раздела документации продукта. Полная и актуальная документация публикуется на homyak.interforum.su; вопросы — на hello@inter-forum.org.


Обзор

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

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

Компоненты

Серверная часть и агенты написаны на Go и собираются из единой моно-репозитории.

КомпонентНазначениеПлатформа
homyak-serverПриём, хранение, контроль целостности, REST APILinux
homyak-agent-kvmКопирование ВМ KVM/libvirtLinux
homyak-agent-mssqlКопирование баз MS SQL ServerWindows
homyak-stagingКонсолидированный слепок копий перед выгрузкойLinux

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

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

01

Снятие

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

02

Загрузка

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

03

Фиксация

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

04

Rescan

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

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

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

upload
POST /api/v1/backups
X-Homyak-Agent-Id: mssql-prod-1

# 1) манифест (YAML) + 2) поток данных
# resume: повтор с того же смещения при обрыве
201 Created   # копия принята и зафиксирована
409 Conflict  # имя занято — перезапись запрещена
422           # манифест/сумма не прошли валидацию

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

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

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

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

REST API

Сервер отдаёт машиночитаемое состояние — основа для мониторинга и ИИ-наблюдателей.

МетодНазначение
GET /api/v1/healthСводное состояние: агенты, целостность, хранилище
GET /api/v1/backupsИндекс копий с фильтрами и пагинацией
GET /api/v1/integrityЗафиксированные проблемы целостности
POST /api/v1/backupsПриём копии от агента

Мониторинг

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

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

Конфигурация — YAML, секреты — в .env. Пример блока контроля целостности:

server.yaml
integrity:
  verify_on_receive: true
  background_rescan:
    enabled: true
    schedule: "0 3 * * *"   # 5-польный crontab
    affect_health: true
    max_concurrent: 1

retention:
  cleanup_interval: "5h"

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

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

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