La migliore spiegazione può essere trovata (come sempre) nell'articolo bliki di Martin Fowler su Immutable Server .
Un server, sia esso hardware o un server virtuale nel cloud, di solito ha un sistema operativo e un'applicazione in esecuzione su di esso.
Spesso l'applicazione e i componenti del sistema operativo richiedono la configurazione e l'applicazione delle modifiche. Ad esempio patch di sicurezza, distribuzione di nuove versioni dell'applicazione e modifiche alla configurazione.
Se si considera che qualsiasi modifica è una mutazione sullo stato del server, il termine immutable
inizia a dare più senso. Significa che non sono consentite mutazioni su tale server.
Spesso accade quando le persone sono coinvolte nella modifica dello stato del server, che si tratti di una distribuzione di una versione, di una modifica della configurazione o di un percorso di sicurezza. Il risultato è un server che non funziona più come previsto. Ad esempio, l'applicazione potrebbe non essere in esecuzione ora a causa di un'errata configurazione, ecc.
Ecco perché viene stabilita una pratica per la creazione di server immutabili . Con server immutabili , viene creata un'immagine di un server con tutte le configurazioni, le patch e le versioni dell'applicazione raggruppate. Quindi l' immagine del server può essere utilizzata per creare server in vari ambienti.
Il primo ambiente in cui viene utilizzata tale immagine , sarebbe un ambiente in cui l'immagine può essere testata per funzionare. Vengono rilevate eventuali anomalie e solo allora una tale immagine può essere promossa in un ambiente di produzione per sostituire i server lì con la nuova versione (che è noto per funzionare bene).
Una volta automatizzato il processo di creazione delle immagini e promozione delle immagini, si ottiene un processo a prova di fallimento che comporta uno sforzo umano molto ridotto e una probabilità molto bassa di introdurre guasti nel servizio.
Spesso i server immutabili non includono nemmeno alcun modo per "inserirli", come ad esempio manca il server ssh. In questo caso, spesso accade anche che tutta la metrologia di un server (metriche, registri) sia spedita a sistemi esterni come un database di metriche o un servizio di aggregazione dei registri.
Con i contenitori (vedi: Docker ) esiste anche un processo per creare immagini e quindi generarle in contenitori in esecuzione. Questi sono abbastanza spesso sostituiti da nuovi contenitori basati su immagini aggiornate e non sono mai mutati. Ciò significa che nessun essere umano entra nel contenitore per "riparare qualcosa" introducendo un cambiamento.