Una cache di compilazione dedicata è utile quando gli stessi repository vengono compilati su un portatile, un desktop, un runner CI o piattaforme con CPU diverse e il lavoro ripetuto costa più del trasferimento e della manutenzione della cache.
La cache dovrebbe restare un'ottimizzazione, non la fonte di verità. Le compilazioni devono riuscire anche in caso di cache miss, mentre le chiavi della cache, i confini di attendibilità, le quote e la garbage collection impediscono a un dispositivo di compromettere o saturare il servizio condiviso.
Misura il lavoro ripetuto tra dispositivi
Registra i download delle dipendenze, i layer dei container, gli oggetti compilati, gli asset generati e il tempo totale di compilazione su ogni dispositivo. Conta quante volte gli stessi input vengono ricompilati dopo aver cambiato macchina o avviato un job CI temporaneo.
Una pratica guida alla cache remota di Bazel spiega come diverse macchine possano riutilizzare gli artefatti invece di ricompilare in modo indipendente input identici.
Una cache dedicata è giustificata quando il lavoro ripetuto è frequente, gli artefatti sono deterministici e il tempo di trasferimento è inferiore a quello necessario per ricalcolarli. Aggiunge poco valore se i progetti sono piccoli o i dispositivi condividono raramente gli input.
Definisci le chiavi della cache e i confini di attendibilità
Le chiavi dovrebbero includere gli input sorgente, i file di lock delle dipendenze, la versione del compilatore o del runtime, l'architettura di destinazione, le principali flag dell'ambiente e la fase di compilazione. Una chiave troppo generica genera corrispondenze errate; una troppo specifica impedisce il riutilizzo.
Concedi ai job CI attendibili l'accesso in scrittura e valuta l'accesso in sola lettura per i computer degli sviluppatori o i branch non attendibili. Una voce della cache può contenere output eseguibile, quindi accettare scritture da codice arbitrario è una decisione che riguarda la sicurezza della supply chain.
Architetture e generazioni di toolchain diverse. Un portatile Apple Silicon e un runner Linux x86 possono condividere i pacchetti sorgente scaricati, ma richiedere artefatti compilati diversi.
Posiziona la cache vicino alle attività più onerose
| Percorso della cache | Punto di forza | Limite |
|---|---|---|
| Locale per dispositivo | Latenza minima | Nessun riutilizzo tra dispositivi |
| Server cache LAN | Riutilizzo rapido a casa | Non disponibile quando si è fuori sede |
| Registro o archivio di oggetti | Funziona in più sedi | Costi di caricamento e trasferimento in uscita |
| Host di compilazione remoto | La cache resta accanto alla potenza di calcolo | Diventa un'infrastruttura di esecuzione |
| Locale più condivisione | Hit rapidi e ampio riutilizzo | Più policy da gestire |
Per un flusso di lavoro domestico, tieni una piccola cache locale su ogni dispositivo e una cache condivisa più grande sul server. Gli sviluppatori remoti possono usare il livello condiviso solo quando la connessione di rete è abbastanza veloce da risultare più vantaggiosa rispetto alla ricompilazione.
Tieni la cache lontana dalle condivisioni familiari protette e dalle destinazioni dei backup. Un elevato ricambio e l’eliminazione automatica devono avvenire in un dataset dedicato con una quota propria.
Gestisci quote, garbage collection e cache miss
Imposta una dimensione massima, soglie superiore e inferiore, un’età massima e una policy per le voci di grandi dimensioni. Monitora il tasso di hit, i byte trasferiti, il tempo di build risparmiato, il tasso di eliminazione e il tempo impiegato nella ricerca nella cache.
Un resoconto operativo sull’esecuzione di un’infrastruttura di build remota osserva che i dischi di cache possono riempirsi più rapidamente della garbage collection e che la latenza di coda della rete può annullare i vantaggi medi.
In caso di indisponibilità della cache, procedi comunque: la build deve ricalcolare i dati invece di fermarsi. Ripristina il servizio dalla configurazione e lascia che le voci si ripopolino, a meno che una specifica cache non contenga dati di provenienza insostituibili.
Definisci una soglia per scegliere tra cache e interruzione
Implementa una cache dedicata quando almeno due dispositivi ricreano gli stessi input costosi, il tasso di hit è misurabile e si può applicare una policy affidabile per gli scrittori. Inizia con una toolchain invece di mettere subito in cache tutti i package manager.
Suddividi i servizi di cache quando i progetti hanno requisiti diversi di affidabilità, conservazione o I/O. Aggiungi capacità SSD quando l’eliminazione rimuove artefatti usati di frequente; aggiungi capacità di rete solo quando i trasferimenti, e non la ricerca o la compilazione, sono il collo di bottiglia misurato. Il flusso di test SMB per file piccoli può aiutare a individuare i limiti dei trasferimenti dovuti all’elevato numero di operazioni sui metadati.
Smetti di ampliare la cache se il tasso di hit resta basso o gli incidenti di invalidazione costano più del tempo risparmiato sulle build. Un cache miss pulito costa meno di un artefatto errato, anche se ottenuto rapidamente.
Regola finale per la configurazione
La configurazione è pronta quando ogni servizio ha un ruolo definito, uno stato protetto, un percorso di accesso controllato, un ripristino testato e una soglia misurabile per suddividere o ampliare la topologia.
Configurazione NAS e server
Altre letture

Un server in dormitorio può essere abbastanza silenzioso da permettere di dormire, studiare e fare videochiamate?
Sì: un server in dormitorio può restare discreto se l’hardware consuma poco, le vibrazioni dei dischi sono controllate, le attività più impegnative vengono pianificate...

Un homelab per studenti che può trasferirsi dalla stanza del dormitorio al primo appartamento
Mantieni portatile il laboratorio domestico di uno studente separando i servizi dalla rete specifica della stanza, riducendo al minimo l’hardware, eseguendo il backup dello...

Come condividere un server domestico con i coinquilini senza condividere account o file privati
Assegna a ogni coinquilino un’identità personale e uno spazio di archiviazione privato, concedendo solo i ruoli condivisi necessari; mantieni separate l’amministrazione, i backup e...



