Passa al contenuto principale Passa alla navigazione Passa al piè di pagina

Limiti e Quote

Riferimento per i limiti, i massimi e le quote applicabili a repository, servizi, rete e archiviazione di Rediacc.

Limiti e Quote

Limiti di deployment di Rediacc. Tre sono rigidi e non possono essere modificati aggiungendo hardware: il limite di 61 servizi per repository (allocazione dello spazio di indirizzi di rete), il kernel 6.1 minimo (requisiti CRIU) e il limite di rilascio di Let’s Encrypt di 50 certificati wildcard per dominio registrato per settimana. Tutto il resto è flessibile: si sposta quando aggiungi hardware. Conosci la differenza prima di impegnarti in una topologia.


Servizi per Repository

Ogni repository supporta fino a 61 servizi in esecuzione contemporaneamente.

Questo è un limite rigido determinato dallo spazio degli indirizzi di rete allocato a ogni repository. Ogni servizio ottiene il proprio indirizzo IP privato dedicato, e il blocco di indirizzi di ogni repository accoglie esattamente 61 slot di servizio.

Consideralo così: quando raggiungi 61 servizi in un repository, di solito indica un problema architetturale, non un vincolo di Rediacc. La soluzione è spostare i sidecar e gli agenti di monitoraggio nel loro repository con un confine di isolamento separato, oppure ridurre il numero di processi in esecuzione indipendente all’interno dell’applicazione stessa.


Repository per Macchina

Non esiste un limite rigido imposto da Rediacc. Il limite pratico dipende dalle risorse della tua macchina:

RisorsaImpatto
Spazio su discoOgni repository è un’immagine disco cifrata. Una macchina con 1 TB di archiviazione utilizzabile può contenere molti repository, ma la dimensione totale di tutte le immagini deve rientrare nel pool del datastore.
RAMOgni repository in esecuzione avvia il proprio daemon Docker e i container. L’utilizzo della memoria dipende dai tuoi carichi di lavoro.
CPULe operazioni parallele sui repository (avvio, backup, fork) aggiungono un carico CPU temporaneo.

I deployment tipici eseguono da 10 a 50 repository per macchina senza problemi. Le macchine con 32 GB+ di RAM e 500 GB+ di archiviazione eseguono regolarmente 100+ repository.

Limite di ID di rete a livello di sistema

A ogni repository viene assegnato un ID di rete univoco, un numero usato per calcolare il suo intervallo di indirizzi IP privati. Questo pool è condiviso tra tutte le macchine e i repository gestiti dalla stessa configurazione di Rediacc.

LimiteValore
ID di rete totali disponibili~261.944
AmbitoPer configurazione (condiviso tra tutte le macchine in una configurazione)

Quando un repository viene eliminato, il suo ID di rete viene liberato e diventa disponibile per il riutilizzo. Rediacc alloca gli ID in modo sequenziale e cerca gli spazi liberi solo quando il contatore forward si avvicina al limite. In pratica questo limite non viene mai raggiunto. Non lo abbiamo mai visto accadere. L’esaurimento del pool richiederebbe la creazione e il tracciamento di centinaia di migliaia di repository nel corso della vita di una singola configurazione.


Fork

Non esiste un limite al numero di fork attivi di un repository. Ogni fork è un clone copy-on-write completo con la propria archiviazione cifrata, indirizzi di rete e daemon Docker. I fork consumano spazio su disco proporzionale ai dati scritti dopo la creazione (non alle dimensioni complete del genitore).


Porte Esterne

Porte sempre attive

Le porte vengono aperte solo dopo aver configurato un IP pubblico con rdc machine infra set <machine> --public-ipv4. Fino ad allora, nessuna porta è aperta sulla macchina. Una volta configurate:

PortaProtocolloScopo
80TCPHTTP: gestito da Traefik; restituisce 404 per i domini non configurati, non viene passato ad alcun servizio
443TCPHTTPS: come sopra; le richieste senza una route corrispondente vengono rifiutate al livello del proxy
10000–10010TCPIntervallo dinamico per il forwarding TCP gestito da Rediacc

HTTP/HTTPS differiscono dalle porte TCP raw: anche se le porte 80 e 443 sono aperte, ogni richiesta viene validata dal reverse proxy rispetto a una tabella di routing esplicita. Senza un servizio configurato e un dominio corrispondente, nessun codice applicativo viene raggiunto e nessun dato viene esposto.

Forwarding TCP/UDP su richiesta

Tutte le altre porte (database, cache, message broker, DNS, posta) sono chiuse per impostazione predefinita e devono essere aperte esplicitamente. Questo mantiene minima la superficie di attacco della macchina.

Per esporre una porta da un servizio specifico:

labels:
  - "rediacc.tcp_ports=5432"   # expose PostgreSQL from this container
  - "rediacc.udp_ports=53"     # expose DNS from this container

Per aprire una porta a livello di macchina (disponibile a tutti i servizi):

rdc machine infra set server-1 --tcp-ports 25,587,993   # mail server
rdc machine infra push server-1

Non esporre mai le porte di database o cache esternamente a meno che tu non abbia un requisito specifico. Usa le auto-route HTTPS per i servizi web e mantieni i servizi di archiviazione interni.


Datastore

Il datastore è un pool di dimensioni fisse creato quando una macchina viene configurata per la prima volta. La sua dimensione non cresce automaticamente.

  • Dimensione minima consigliata: 50 GB
  • Dimensione massima: limitata dal tuo disco. Un singolo pool può occupare un disco intero.
  • Ridimensionamento: usa rdc datastore resize per modificare la dimensione del pool (tutti i repository devono essere smontati prima).
  • File system: Rediacc usa BTRFS internamente per snapshot copy-on-write e forking efficiente. Richiede una macchina con Linux kernel 6.1 o successivo per la piena stabilità in produzione.

Ogni repository ha una dimensione massima impostata al momento della creazione (predefinita: 10 GB). Usa rdc repo resize per modificarla manualmente, oppure imposta una policy di dimensione automatica affinché la macchina la faccia crescere online quando si riempie (limitata da un tetto esplicito per-repository e da una riserva di spazio libero nel pool). L’auto-grow si applica solo ai singoli repository; il pool stesso non cresce mai automaticamente.

Le immagini di repository sono sparse: un repository occupa nel pool solo quanto ha effettivamente scritto, e lo spazio liberato dalle eliminazioni torna al pool tramite repo trim o un auto-trim pianificato. Le quote possono quindi sommarsi a più della dimensione del pool, con il report sulla salute dello storage che mostra il livello di riempimento reale.


Route HTTP

Ogni servizio con l’etichetta rediacc.service_port ottiene automaticamente una route HTTPS. Non esiste un limite al numero di servizi con route, soggetto al massimo di 61 servizi per repository.

I certificati TLS wildcard vengono provisioning per repository al primo deployment tramite Let’s Encrypt (sfida DNS-01 Cloudflare). Let’s Encrypt limita il rilascio a 50 certificati per dominio registrato per settimana. Poiché Rediacc usa un certificato wildcard per repository (non per servizio), un deployment che crea 50+ nuovi repository in una singola settimana raggiungerà questo limite.

I fork riutilizzano il certificato wildcard esistente del repository genitore e non consumano alcuna quota di certificati.


Checkpoint / Restore (CRIU)

La migrazione live tramite CRIU ha i seguenti vincoli:

  • Su richiesta: solo i container con l’etichetta rediacc.checkpoint=true vengono sottoposti a checkpoint. I database e i servizi senza stato sono esclusi per impostazione predefinita e si avviano di nuovo al restore.
  • Requisito del kernel: Linux 6.1+ sia sulla macchina sorgente che su quella di destinazione.
  • Modalità di rete: CRIU richiede la modalità di rete host. I container che utilizzano configurazioni di rete personalizzate non possono essere sottoposti a checkpoint.
  • Memoria: la dimensione dei dati del checkpoint è uguale alla memoria residente del processo sottoposto a checkpoint. Set di dati in memoria di grandi dimensioni (ad esempio, un’app Node.js che memorizza nella cache 4 GB di dati) producono file di checkpoint da 4 GB.
  • Connessioni TCP: le applicazioni devono tollerare la perdita di connessione al restore. Le connessioni TCP attive non vengono preservate. Il processo ripristinato vede i socket come chiusi e deve riconnettersi. Questo si applica sia ai percorsi di restore sulla stessa macchina che tra macchine diverse.
  • Il fork live sulla stessa macchina reindirizza gli indirizzi del padre: rdc repo fork X --tag Y --checkpoint seguito da rdc repo up funziona mentre il repository padre continua a girare. I processi ripristinati portano gli indirizzi loopback del padre al momento del checkpoint, quindi il sistema li reindirizza in modo trasparente verso gli indirizzi propri del fork (stesso servizio, copia dei dati del fork). Il primo uso di una connessione TCP ripristinata fallisce comunque e l’app deve riconnettersi, come da punto TCP sopra.

Backup

LimiteValore
Snapshot per repositoryNessun limite oltre alla tua quota di storage. Ogni snapshot è ripristinabile in modo indipendente, quindi conservarne di più costa solo storage e nient’altro
Snapshot simultanei di un singolo repository1. Una seconda esecuzione trova il lock di staging del repository già occupato e viene saltata, non messa in coda: segnala che un’altra esecuzione lo detiene ed esce. Rilanciala in seguito
Snapshot a freddo simultanei1 per datastore; un secondo renet backup snapshot --cold viene rifiutato subito e non ferma nulla
Frequenza di backupNessun intervallo minimo imposto; limitata dalla larghezza di banda di archiviazione. Usa rdc backup strategy set <name> --bwlimit "6M" per limitare la velocità di upload
ConservazioneDichiarata con rdc backup retention set (--keep-last, --keep-hourly, --keep-daily, --keep-weekly, --keep-monthly, --keep-yearly) e applicata lato server; rdc backup retention clear la rimuove, dopodiché ogni snapshot viene conservato
Backup tra macchineSupportato; la macchina di destinazione deve avere spazio sufficiente nel datastore

Quota di storage per il backup

Gli snapshot vanno nello storage a chunk, misurato per abbonamento in byte fisici unici memorizzati: ciò che è effettivamente trattenuto dopo la deduplicazione, non la somma di ciò che i tuoi snapshot rappresentano logicamente. Gli snapshot che condividono dati, e i repository della stessa famiglia di fork, contano quei dati una sola volta.

PianoQuotaMostrata da rdc backup usage come
Community10 GB10G
Professional100 GB100G
Business500 GB500G
Enterprise2 TB2T

Questi sono i valori predefiniti del piano. Un abbonamento può avere una propria personalizzazione, quindi controlla rdc backup usage invece di assumere la riga sopra.

La quota viene applicata prima che qualsiasi dato si muova: uno snapshot che la supererebbe viene rifiutato quando la macchina chiede il permesso di caricare, non a metà del trasferimento. Atterrare esattamente sulla quota è consentito; un byte in più viene rifiutato. Ciò che conta come utilizzato include i caricamenti ancora in corso, quindi due esecuzioni concorrenti non possono entrambe infilarsi sotto il limite.

Superare la quota non elimina mai nulla. Blocca solo i nuovi caricamenti, e gli snapshot che hai già restano dove sono.

Se un abbonamento scade, lo storage di backup diventa di sola lettura: gli snapshot esistenti restano leggibili e non se ne possono caricare di nuovi. Questi dati vengono conservati per 60 giorni dopo la scadenza, dopodiché una singola pulizia li rimuove. Un rimborso aperto sull’organizzazione congela quella pulizia invece di eseguirla.

Le copie da macchina a macchina effettuate con rdc repo push non toccano questa quota. Atterrano nel datastore della macchina di destinazione e sono limitate dal suo spazio libero.


CLI e API

LimiteValore
Comandi rdc concorrenti verso la stessa macchinaIllimitati (ogni comando apre la propria connessione SSH)
Concorrenza predefinita di avvio parallelo dei repository3 (regolabile con --concurrency)
Timeout di connessione SSH30 secondi per la connessione iniziale
Durata della sessione rdcNessun timeout; le operazioni di lunga durata mantengono la connessione attiva

Versioni OS Supportate

Le macchine remote devono eseguire uno dei seguenti sistemi per soddisfare i requisiti di kernel, file system e isolamento di rete di Rediacc. Questo elenco è il set testato in CI (matrice Bridge Workers) e deve rimanere sincronizzato con Requisiti:

OSVersione MinimaKernel PredefinitoNote
Ubuntu24.04 LTS (consigliato)6.8AppArmor predefinito.
Debian13 (Trixie); 12 Bookworm funziona anch’esso6.12 (6.1 su Debian 12)
Fedora436.12SELinux enforcing predefinito.
openSUSE Leap16.06.4+AppArmor predefinito.
Oracle Linux10 (UEK)UEK 7+UEK mantiene btrfs; SELinux enforcing predefinito.

Kernel minimo richiesto: 6.1. Le macchine con kernel più vecchi vengono rifiutate al momento della configurazione con un messaggio di errore chiaro.

Perché il kernel 6.1? Rediacc usa BTRFS per l’archiviazione cifrata dei repository e il forking copy-on-write. Linux 6.1 ha introdotto miglioramenti critici a BTRFS che riducono significativamente i tempi di mount per datastore di grandi dimensioni, migliorano le prestazioni di eliminazione degli snapshot e correggono problemi di integrità dei dati presenti nei kernel precedenti. Il kernel 6.1 è anche necessario per gli hook di isolamento di rete a livello kernel che applicano l’isolamento tra repository, riscrivendo in modo trasparente le chiamate bind() e bloccando le connessioni tra repository.

Perché non Rocky Linux 10 / RHEL 10 stock kernel? Il kernel stock di RHEL 10 non include il modulo btrfs (modprobe btrfs fallisce con “Module btrfs not found”). Il backend di archiviazione cifrata di Rediacc non può funzionare senza btrfs. Oracle Linux 10 è l’unico target compatibile con RHEL nell’elenco supportato perché usa per impostazione predefinita l’Unbreakable Enterprise Kernel (UEK), che mantiene btrfs. Vedi Requisiti -> Perché UEK? per la spiegazione completa.

Matrice delle funzionalità del kernel

Leggi la matrice come una panoramica rapida di ciò che ogni OS testato in CI fornisce immediatamente. Tutti e cinque soddisfano ogni requisito, quindi questa è un riferimento per gli operatori, non un criterio di esclusione.

OSModulo btrfscgroups v2Landlock (ABI >= 1)Hook cgroup eBPF
Ubuntu 24.04in-treegerarchia unificatasì (5.13+)
Debian 13in-treegerarchia unificata
Fedora 43in-treegerarchia unificata
openSUSE Leap 16.0in-treegerarchia unificata
Oracle Linux 10 (UEK)in-tree (tramite UEK)gerarchia unificata