Arquitetura

O BackupAlly é construído com uma arquitetura modular e pipeline-based.

Visão Geral

┌─────────────────────────────────────────────────────────────┐
│                         CLI / API                           │
├─────────────────────────────────────────────────────────────┤
│                      Core Engine                            │
│  ┌───────────┐  ┌─────────────┐  ┌──────────┐              │
│  │ Scheduler │→ │ TaskManager │→ │ Executor │              │
│  └───────────┘  └─────────────┘  └──────────┘              │
├─────────────────────────────────────────────────────────────┤
│                       Pipeline                              │
│  ┌───────────┐  ┌────────┐  ┌────────┐  ┌──────────────┐  │
│  │ Collector │→ │ Packer │→ │ Crypto │→ │ Notification │  │
│  └───────────┘  └────────┘  └────────┘  └──────────────┘  │
├─────────────────────────────────────────────────────────────┤
│  ┌─────────────────────┐  ┌────────────────────────────┐   │
│  │       Drivers       │  │         Storage            │   │
│  │ MySQL, PostgreSQL,  │  │   Local, S3, B2, MinIO     │   │
│  │ MongoDB, ClickHouse │  │                            │   │
│  └─────────────────────┘  └────────────────────────────┘   │
└─────────────────────────────────────────────────────────────┘

Componentes

CLI

Interface de linha de comando construída com Clap v4.

Responsabilidades:

  • Parsing de argumentos
  • Validação de entrada
  • Formatação de saída
  • Interatividade (wizard)

Core Engine

Orquestra a execução de backups.

Scheduler

  • Avalia expressões cron
  • Gerencia fila de prioridades
  • Controla concorrência
  • Hot-reload de tasks

TaskManager

  • Carrega configurações de tasks
  • Valida configurações
  • Monitora estado

Executor

  • Executa pipeline de backup
  • Gerencia ciclo de vida
  • Trata erros e retries

Pipeline

Sequência de operações em cada backup.

Collector

  • Coleta dados do target
  • Aplica chunking (FastCDC)
  • Detecta mudanças incrementais

Packer

  • Comprime dados (Zstd, Gzip, LZ4)
  • Empacota em formato .ally
  • Calcula checksums

Crypto

  • Gera chave AES por sessão
  • Criptografa dados (AES-256-GCM)
  • Protege chave com RSA-4096
  • Adiciona fingerprint

Notification

  • Envia webhooks
  • Executa callbacks
  • Reporta status

Drivers

Conectam a diferentes fontes de dados.

Driver Biblioteca Protocolo
MySQL mysql_async MySQL Protocol
PostgreSQL tokio-postgres PostgreSQL Protocol
MongoDB mongodb MongoDB Wire Protocol
ClickHouse clickhouse ClickHouse HTTP/Native
SQLite rusqlite Embedded
Docker bollard Docker API
SSH russh SSH2

Storage

Backends de armazenamento.

Backend Biblioteca Protocolo
Local std::fs Filesystem
S3 aws-sdk-s3 S3 API
B2 b2client B2 API
MinIO aws-sdk-s3 S3-compatible

Formato de Arquivo .ally

┌─────────────────────────────────┐
│ Header (48 bytes)               │
├─────────────────────────────────┤
│ Magic: 0x518a1f01 (4 bytes)     │
│ Version: 2 (2 bytes)            │
│ Flags (2 bytes)                 │
│ Fingerprint (8 bytes)           │
│ Compression type (4 bytes)      │
│ Reserved (28 bytes)             │
├─────────────────────────────────┤
│ RSA-encrypted AES key (512 B)   │
├─────────────────────────────────┤
│ Nonce (12 bytes)                │
├─────────────────────────────────┤
│ AES-256-GCM encrypted data      │
└─────────────────────────────────┘

Fluxo de Backup

1. Scheduler detecta task agendada
         ↓
2. TaskManager carrega configuração
         ↓
3. Executor verifica condições (when, window)
         ↓
4. Collector coleta dados do target
         ↓
5. Packer comprime e empacota
         ↓
6. Crypto criptografa
         ↓
7. Storage faz upload (paralelo)
         ↓
8. Notification envia status
         ↓
9. Cleanup aplica retenção

Fluxo de Restore

1. Localiza snapshot no catálogo
         ↓
2. Download do storage
         ↓
3. Valida checksum
         ↓
4. Descriptografa com chave RSA
         ↓
5. Descomprime
         ↓
6. Extrai para destino

Hot Reload

O scheduler monitora mudanças em arquivos de task:

Intervalo: 5 segundos
Ações detectadas:
- Novo arquivo → Task carregada
- Modificado → Task recarregada
- Removido → Task descarregada
- enabled=false → Task removida do scheduler

Concorrência

[global]
max_concurrent_backups = 2

Controle por priority queue:

  • Tasks com maior priority executam primeiro
  • Tasks aguardam slot se limite atingido
  • Mesma task nunca executa em paralelo
By Borlot.com.br on 11/02/2026