Cosa sono i server immutabili?


23

Ci sono alcune domande sui server immutabili , come:

Sembra ovvio che abbia a che fare con i server (quella parte che ottengo). E solo digerendo la grammatica dell'immutabile , penso che abbia qualcosa a che fare con "non è possibile silenziare ". Se questa ipotesi è vicina, non avrei idea di cosa esattamente non possa essere disattivato (e dubito che abbia a che fare con le schede audio o qualcosa del genere ...).

Le mie domande :

  • Che cosa è in realtà un "server immutabile" (nel contesto di DevOps)?
  • Perché sono usati?

4
impossibile mutare
Evgeny

3
@Evgeny: ggggggggggggrrrrrrrrrrrrrrrr, ero vicino, ma completamente sbagliato con la mia ipotesi muta (per favore non ridere di me ...).
Pierre.Vriens


Mi dispiace essere così schietto, ma una semplice ricerca su Internet per definire "immutabile" era onerosa? Capisco che la domanda sia più grande di così, ma cercare il significato della parola piuttosto che indovinarla potrebbe aver dato un vantaggio decente.
Adrian

@Adrian nessun problema a proposito dell'essere smussato (poiché soffro ESL, dovrei cercarlo su Google per ottenere davvero l'esatto significato di smussatura). Tuttavia mi chiedo se sei a conoscenza di questa domanda meta.SA ? A parte questo, preferirei imparare dagli esperti DevOps, invece che da alternative simili a Wikipedia.
Pierre.Vriens

Risposte:


19

Immutabilità è un termine spesso usato nei circoli informatici, che in genere si riduce a "impossibile cambiare dopo la creazione". Viene in genere utilizzato in riferimento al parallelismo, concorrenza e sicurezza dei thread.

La discussione su questo argomento è affascinante, ma generalmente si può trovare altrove su StackTranslate.it . Sto resistendo alla tentazione di immergerci qui. Il concetto chiave "non è possibile cambiare dopo la creazione".

Immagina se, su Amazon, distribuisci un servizio web inserendolo in una Machine Image (AMI - un'istanza pre-costruita che puoi ripetere il provisioning ripetutamente). Si collega a un database back-end tramite credenziali che esce da un registro all'avvio. Scarica i log in uno strumento di registrazione come Splunk. Per il normale funzionamento quotidiano, non hai motivo di entrare in questa casella. Se è necessario ridimensionare tale servizio, è sufficiente creare più istanze di tale AMI e regolare un bilanciamento del carico. La riduzione è semplicemente la distruzione di istanze e bilanciamento del carico.

Per l'operazione quotidiana, questa casella non ha motivo di cambiare . Possiamo semplicemente accendere di più dall'AMI.

Cosa succede quando è necessario fornire una patch di sicurezza a livello di sistema operativo? Questo è quando hai una decisione da prendere ... crei una nuova AMI con la patch installata e ridistribuisci tutte le istanze in esecuzione, o fai ssh in immagini esistenti e aggiorni la patch? Ci sono molte persone che vogliono semplicemente entrare. Gli aderenti all '"architettura immutabile" mi hanno appena urlato per aver persino suggerito che una cosa del genere fosse possibile.

Gli immutabilisti (se esiste una parola del genere) sostengono la cottura del nuovo ami. Sostengono la rimozione di tutte le ragioni per ssh in una macchina di sempre. Sostengono che qualsiasi configurazione specifica della macchina dovrebbe avvenire all'avvio di quella macchina estraendo i dettagli di configurazione da un repository. Questa è la massima espressione di "bestiame, non di animali domestici".

L'architettura immutabile riguarda in particolare le configurazioni della macchina che non hanno motivo di cambiare dopo la creazione dell'immagine della macchina . Se qualcosa deve cambiare, crea una nuova immagine di istanza, spegni la vecchia, fai apparire la nuova.


"chiudi il vecchio, fai apparire il nuovo". Oppure, se la tua architettura lo consente, visualizza il nuovo, regola il bilanciamento del carico, spegni il vecchio. In questo modo puoi farlo in qualsiasi momento, anche durante l'ora di punta. :)
Tim Malone,

Immutabilità se dalla programmazione funzionale (anni '60), si sta ora realizzando che non solo riduce i bug (qualcosa a cui spesso non ci si preoccupa), ma aiuta anche con la concorrenza.
ctrl-alt-delor

Sarei davvero interessato a qualsiasi aggiunta a questa fantastica risposta su come agenti di monitoraggio o software aggiuntivo che potrebbero essere difficili da inserire nell'originale potrebbero entrare in gioco qui. Ad esempio, il software di monitoraggio APM che deve rilevare il suo nuovo ambiente macchina dopo la creazione e modificare i parametri. Sto esplorando SSM e l'automazione per implementare questo in AWS, ma ho trovato ben poco per discutere l'immutabile con AMI / immagini quando si tratta di agenti aggiuntivi che potrebbero essere installati in un secondo momento.
SheldonH

10

Le tecnologie cloud hanno spostato la frontiera tra hardware e software in modo che molte operazioni tecniche precedentemente cittadine esclusive del mondo hardware siano anch'esse oggetto del regno del software. Gli ambienti informatici condivisi potrebbero essere vecchi quanto i computer stessi 1 ma le tecnologie cloud potrebbero diffonderli offrendo metafore comode e familiari per interagire con loro: gli utenti cloud riservano un'istanza, un computer completo o un mimo, mentre gli ambienti informatici condivisi più vecchi hanno tutte le impostazioni possibili di limitazioni ingombranti e "il tuo programma deve essere caricato su quel server FTP, verrà eseguito in ambiente X (di solito con una versione di 10 anni di qualsiasi software che si desidera utilizzare), per un massimo di 60 minuti" potrebbe sembrare familiare agli utenti precedenti o effettivi dei centri di calcolo.

La conseguenza pratica di questo spostamento è che le procedure di implementazione possono ora essere rappresentate da artefatti software. (Le procedure di distribuzione sono le istruzioni che spiegano come configurare un'infrastruttura, con database, web server o qualunque cosa appartenga a questa infrastruttura, insieme alla rete su cui vengono eseguiti.) Equipaggiato con questi nuovi obiettivi, la manutenzione manuale dei server sembra quasi patching manuale del codice di produzione - che è solo in rare occasioni una cosa desiderabile. La manutenzione manuale è suscettibile di introdurre discrepanze tra i sistemi effettivamente in esecuzione in produzione e il codice che descrive questi sistemi, il che a sua volta significa comportamento irreproducibile e analisi di bug impossibile, correzione di due bug e altre calamità.

Il modello di server immutabile è solo la trasposizione per le operazioni cloud del mantra sopra, in base al quale dovremmo evitare la manutenzione manuale dei programmi in esecuzione. Invece di configurare manualmente i server, il modello di server immutabile consiglia di automatizzare questa configurazione.

Aromi di implementazione

Mentre l'idea generale del modello di server immutabile è abbastanza chiara, ci sono molte sfumature di implementazione. Ad esempio, alcuni approcci suggeriscono di non aggiornare affatto i server ma di sostituire sistematicamente i server. Questo perché l'aggiornamento produce una situazione in cui una distribuzione è costituita da server che sono stati avviati in diversi momenti distinti e che hanno attraversato diversi processi di aggiornamento distinti, il che implica un insieme disomogeneo di server e può portare a sottili differenze nel modo in cui i server gestiscono i loro lavori. Un secondo punto di variazione popolare è la disciplina relativa all'accesso remoto ai server. Ad alcuni piace disabilitare l'accesso amministrativo remoto completo ai server, al fine di garantire che la manutenzione manuale non avvenga mai.

Nota storica

Per quanto ne so, il termine "server immutabile" è stato reso popolare da Kief Morris, ma l'idea stessa è molto più antica. Nel 1999 le jail di FreeBSD hanno già reso popolare l'idea di automatizzare completamente la configurazione degli ambienti di elaborazione usa e getta, è così che ho iniziato a implementare il modello di "server immutabile" molti anni prima di sentire questo nome per descrivere questa tecnica.

L'immutabilità, sotto forma di immutabilità fisica basata su CD-ROM, è stata anche una misura popolare per produrre sistemi di elaborazione affidabili. Questo non deve essere confuso con il modello di server immutabile.


1 Se non contiamo le tabelle automatiche dei telai o gli organi a rulli come computer.


1
Caspita, ancora un'altra spiegazione interessante, merci! Ora mi sto davvero mettendo nei guai per decidere quale risposta contrassegnare come accettata (pazienza su questo per favore, e per favore sappi che posso solo segnare 1 al massimo, anche se in questo momento non sono affatto deciso su quale .. .).
Pierre.Vriens

1
Con plaisir! - Penso che sia una buona idea aspettare diversi giorni per accettare una risposta, questo aumenta le possibilità che gli utenti scrivano più risposte.
Michael Le Barbier Grünewald

9

I server immutabili sono server su cui non è possibile apportare modifiche (se non idealmente aggiornamenti e patch di sicurezza). Invece di modificare il software sul server, si esegue lo spooling di un nuovo server con il software desiderato e quindi si termina quello precedente.

Questo concetto aiuta a garantire che test, sviluppo e server QA siano tutti identici, il che è importante per molteplici ragioni al di fuori dell'ambito di questa domanda. Un altro vantaggio dei server immutabili è la possibilità di eseguire il rollback dell'applicazione su un server più vecchio. Ad esempio, ho bisogno di cambiare K sul server di produzione 1, quindi eseguo lo spooling del server 2 e cambio K. Ora dopo 10 minuti, noto che K ha rotto qualcosa con la mia applicazione, piuttosto che doverlo riparare subito che potrebbe richiedere ore e potenzialmente causando tempi di inattività per i miei clienti, reindirizzo il traffico al server 1, mentre capisco cosa non va in 2.


Hm, interessante ... Ho bisogno di un po 'di tempo per digerire ulteriormente questo ... Conosci il detto come "1 risposta a una domanda innesca 10 nuove domande?" ...
Pierre.Vriens

1
Questa pratica di "rollback" rapido è spesso chiamata "Blue / Green Deployment" (anche rosso / nero, dipende da chi effettua la chiamata).
Evgeny

@Evgeny e peggio di tutto, potrebbero anche essere chiamati schieramenti A / B, linea di fuoco con esperimenti A / B. (e ancora peggio, quando questo tipo di distribuzione, versione multipla della stessa app, sono in diretta per fare esperimenti A / B anziché flag di funzionalità)
Tensibai

Mi è sempre stato detto che le distribuzioni Blue / Green erano destinate alla distribuzione di un aggiornamento a un'applicazione esistente, NON al server stesso. @Evgeny
Turtle

Sì. Puoi scambiare server, container, applicazioni e quant'altro e comunque chiamarlo Blu / Verde . Penso che qui meriti le sue domande e risposte. Volevo solo sottolineare che il modo in cui hai spiegato il rollback nella tua risposta è abbastanza spesso chiamato B / G.
Evgeny

6

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 immutableinizia 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.


Spiegazione interessante, forse vuoi mutarlo un po ', se puoi, e se ha senso, elaborare qualcosa che credo sia in qualche modo correlato, cioè "svuotare" un sistema. Il che penso sia che lasci (più o meno) qualcuno "giocare" con qualcosa, e li avverti in anticipo che (ad esempio) ogni notte c'è una sorta di ripristino di un certo stato iniziale. Sembra che l'ingresso per tale ripristino sia ... euh ... cosa stavo per dire ... giusto: un tale oggetto immutabile che può essere usato per questo.
Pierre.Vriens

2
L'esecuzione di un servizio che riporta il server a uno stato noto (ad esempio Chef / Puppet / Ansible / ecc ...), significa solo che non si sta utilizzando un server immutabile. en.wikipedia.org/wiki/Promise_theory è fantastico, ma martinfowler.com/bliki/ImmutableServer.html è ancora meglio.
Evgeny

Mi stai prendendo in giro, credo, o è piuttosto "sfidarmi" (per cercare di scoprire il limite di domande quotidiane). Non esiste anche da qualche parte una regola SE che dice "puoi fare solo 50 domande in 30 giorni"?
Pierre.Vriens

0

Cominciamo con l'inverso, che cos'è un server mutabile?

Tradizionalmente, un'infrastruttura server mutabile è quella che viene continuamente modificata e aggiornata sul posto. È possibile proteggere la shell al suo interno, aggiornare i pacchetti, configurarlo, installare i servizi e distribuire ad esso un nuovo codice. Questo è ciò che lo rende mutevole, puoi mutarlo o modificarlo.

Un'infrastruttura immutabile è un altro paradigma dell'infrastruttura in cui i server non vengono mai modificati dopo essere stati distribuiti. Se qualcosa deve essere aggiornato, riparato o modificato in qualche modo, vengono forniti nuovi server creati da un'immagine comune con le modifiche appropriate per sostituire quelli vecchi. Dopo essere stati convalidati, vengono messi in uso e quelli vecchi vengono disattivati.

Perché sono usati? I vantaggi di un'infrastruttura immutabile sono maggiore coerenza e affidabilità nella propria infrastruttura e un processo di distribuzione più semplice e prevedibile e mitiga i problemi comuni del server nell'infrastruttura mutevole, come i tempi di inattività del server o altro.

Ma devi sapere come effettuare il provisioning in modo efficiente tramite automazioni di distribuzione complete e provisioning rapido dei server.

Immagina di estrarre bitcoin, non vorresti alcun tempo di inattività se il tuo server si arrestasse in modo anomalo, avresti bisogno di eseguirne il backup il più velocemente possibile, quindi si suppone che un'infrastruttura immutabile sia la soluzione.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.