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çãoFluxo 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 destinoHot 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 schedulerConcorrência
[global]
max_concurrent_backups = 2Controle por priority queue:
- Tasks com maior
priorityexecutam primeiro - Tasks aguardam slot se limite atingido
- Mesma task nunca executa em paralelo
By Borlot.com.br on 11/02/2026