AllInfo

In che modo “l'ingegneria del caos” ti aiuta a evitare tempi di inattività non pianificati

asharkyu/Shutterstock.com

L'ingegneria del caos è un approccio al test della tolleranza agli errori del software che provoca intenzionalmente errori nelle distribuzioni live. Incorpora un elemento di casualità per imitare l'imprevedibilità della maggior parte delle interruzioni del mondo reale.

L'idea di aggiungere caos a un sistema è generalmente attribuita a Netflix. Nel 2011, la società ha pubblicato Chaos Monkey, uno strumento che ha creato per disabilitare parti della sua infrastruttura di produzione. Inducendo guasti casuali in ambienti monitorati, Netflix ha scoperto che poteva scoprire problemi nascosti che passavano inosservati durante i test regolari.

L'ingegneria del caos fornisce un effetto di risposta immunitaria. È simile al modo in cui vacciniamo le persone sane. Introduci intenzionalmente una minaccia, che potrebbe causare problemi brevi ma osservabili, al fine di sviluppare una resistenza più forte a lungo termine.

Costruire resilienza

È’ È lecito ritenere che qualsiasi sistema sufficientemente grande contenga bug di cui non si è a conoscenza. Nonostante tutti i tuoi test automatizzati e l'utilizzo quotidiano nel mondo reale, non puoi catturare tutto. Alcuni problemi emergono solo in scenari molto specifici, come la perdita di connettività a un servizio di terze parti.

L'ingegneria del caos accetta che i problemi operativi imprevisti saranno sempre un dato di fatto, anche in ambienti di produzione apparentemente a tenuta stagna. Considerando che molte organizzazioni finiscono per prendere un “aspetta e vedi” approccio, giocando a whack-a-mole quando arrivano i rapporti reali, l'ingegneria del caos funziona sul principio che una breve interruzione che si invoca è sempre meglio di quella che il cliente vede per prima.

Pubblicità

Rompere le cose di proposito ti dà un modo per determinare la resilienza complessiva del tuo sistema. Cosa succede se il database va giù? Che ne dici di un'interruzione del servizio di invio di e-mail di terze parti? Il più grande punto di forza dell'ingegneria del caos è la sua capacità di riprodurre eventi che i test unitari e l'uso nel mondo reale da soli di solito non coprono.

Gli strumenti di test del caos vengono spesso eseguiti su implementazioni reali per eliminare le discrepanze tra gli ambienti di sviluppo e produzione. Tuttavia, non è necessario applicare così tanto rischio: se sei sicuro di poter replicare accuratamente la tua infrastruttura, puoi utilizzare la tecnica contro un ambiente di staging sandbox.

Aggiungere caos ai tuoi sistemi

Hai più opzioni se desideri aggiungere un po' di caos alla tua infrastruttura. Gli strumenti automatizzati creati per questo scopo forniscono un punto di partenza, ma possono essere difficili da incorporare nella propria infrastruttura. Normalmente devi integrarti con VM o piattaforme di gestione dei container in modo che lo strumento possa interagire con le tue istanze.

Nel caso di Chaos Monkey, devi utilizzare Spinnaker, la piattaforma di distribuzione continua di Netflix. Sebbene abbia un'ampia compatibilità con i più diffusi provider di cloud pubblico, è anche un'altra dipendenza che stai aggiungendo al tuo stack.

Se stai utilizzando Kubernetes, kube-monkey prende i principi originali di Netflix e li impacchetta per l'uso nel tuo cluster. Funziona su base opt-in, quindi le risorse Kubernetes con l'etichetta kube-monkey/enabled saranno idonee per la terminazione casuale.

Pumba fornisce funzionalità simili per i normali contenitori Docker. Può provocare arresti anomali dei container, stressare le risorse disponibili come CPU e memoria e causare errori di rete.

Pubblicità

Uno strumento che si rivolge specificamente agli errori di rete è Toxiproxy di Shopify. Ciò fornisce un proxy TCP che simula un'ampia gamma di condizioni di rete. Puoi filtrare il traffico della tua applicazione attraverso Toxiproxy per vedere come il sistema si comporta con una latenza grave o una larghezza di banda ridotta.

Per un controllo avanzato, VMWare's Mangle è un'ingegneria del caos orchestratore” che mira a diversi meccanismi di distribuzione. Funziona con Kubernetes, Docker, VMware vCenter e connessioni SSH generiche. Mangle ti consente di definire errori personalizzati per i componenti dell'applicazione e dell'infrastruttura. Gli errori dell'applicazione dovrebbero interessare un singolo servizio. Gli errori dell'infrastruttura prendono di mira i componenti condivisi che potrebbero disattivare più servizi.

Sebbene l'ingegneria del caos sia più comunemente associata allo sviluppo di backend e DevOps, c'è un crescente interesse anche tra gli ingegneri di frontend. React Chaos è una libreria che genererà errori casuali dai componenti di React, permettendoti di identificare sezioni dell'interfaccia utente traballanti che potrebbero mandare in crash l'intera app.

Progettare la tua Esperimenti di caos

Se non riesci a utilizzare con successo uno strumento di caos open source, progetta invece i tuoi esperimenti. Fai un elenco dei presupposti all'interno dell'ambiente della tua applicazione. Identifica le connessioni tra i servizi e pensa a cosa succederebbe se uno abbandonasse.

Dovete quindi verificare la vostra ipotesi. Rompi il sistema e osserva le conseguenze. Quindi, determinare se l'effetto era accettabile. L'app si è arrestata in modo anomalo e ha mostrato all'utente una traccia dello stack? Oppure ha mostrato una pagina di stato di interruzione e ha inviato per e-mail la traccia dello stack al personale di guardia?

È importante mantenere ogni test piccolo e mirato. Ciò limita l'impatto in caso di interruzione della produzione e ti aiuta a essere sicuro che il problema derivi dal presupposto testato, non da un'altra parte del sistema.

Pubblicità

Assicurati sempre di avere una procedura di ripristino chiara prima di condurre manualmente un esperimento di caos. Elevare un'interruzione provocata a un'interruzione attiva e non pianificata è l'ultima cosa che vuoi. Se stai terminando un servizio, tieni presente il tempo necessario per riavviarlo. Potrebbero esserci impatti a catena sulla tua applicazione durante le interruzioni più lunghe: se abbandoni un servizio di distribuzione di posta elettronica, potrebbe esserci un arretrato su cui lavorare quando torna online. Questi aspetti devono essere incorporati nel tuo piano d'azione prima di iniziare a lavorare.

Al termine dell'esperimento, potrebbe essere necessario aggiornare il sistema prima di eseguire nuovamente il test. Testare la tua correzione migliora effettivamente la situazione e ti consente di essere sicuro che il tuo sistema è ora resiliente a quello scenario specifico.

Ecco un riepilogo del processo di esperimento del caos:

  1. Sviluppa un'ipotesi: “Il sistema è resistente all'aumento della latenza di rete.”
  2. Progetta un esperimento mirato:  “Aumenteremo artificialmente la latenza a 500 ms sul 70% delle richieste.” Assicurati di avere una chiara strategia di rollback e ripristino.
  3. Esegui l'esperimento:Osserva l'impatto sulla tua applicazione. Ripristina le modifiche dannose agli ambienti di produzione il prima possibile.
  4. Analizza i risultati: se decidi che il tuo sistema non era abbastanza resiliente, implementa miglioramenti e ripeti il ​​processo.

Il lato non tecnico dell'ingegneria del caos

L'ingegneria del caos è normalmente vista come un compito tecnico per i team di sviluppo e operazioni—dopotutto, “ingegneria” è nel nome. Oltre ai dadi e bulloni di reti e servizi, è importante guardare anche al lato umano. È facile pensare che il tuo sistema dipenda solo da un database, alcuni server di app e una rete stabile. Di solito non è così.

Pensa a come reagirebbe il tuo sistema se i membri del team non fossero disponibili. La conoscenza è facilmente accessibile se un amministratore deve fare un passo indietro inaspettatamente? Soprattutto nelle organizzazioni più piccole, è comune per un “team” essere una persona sola. Cosa succede se il tuo addetto alla rete si ammala durante un'interruzione live?

Allo stesso modo in cui provi gli aspetti tecnici abbandonando i servizi, puoi anche prevedere scenari umani. Prova a escludere intenzionalmente le persone chiave mentre provi un'interruzione. Il resto del team è stato in grado di ripristinare il servizio a uno stato accettabile? In caso contrario, potresti trarre vantaggio dalla documentazione di una parte maggiore del sistema e delle sue dipendenze.

Riepilogo

Il termine “ingegneria del caos” si riferisce alla pratica di rompere intenzionalmente le cose in produzione per scoprire problemi precedentemente nascosti. Sebbene l'approccio possa sembrare scoraggiante all'inizio, strumenti dedicati come Chaos Monkey possono aiutarti a iniziare con il minimo rischio.

Pubblicità

L'aggiunta di caos è una tecnica utile, poiché scopre problemi sia transitori che sistemici. Potresti scoprire che il picco di utilizzo della memoria provoca impatti a catena sulla tua infrastruttura, ma che l'aumento della latenza di rete ha un effetto sporadico su parti specifiche del tuo stack.

Un uso efficace dell'ingegneria del caos può aiutarti a trovare i bug più velocemente , prima che i tuoi clienti se ne accorgano. Ti aiuta a sviluppare la resilienza nel tuo sistema incoraggiando l'anticipazione dei problemi. La maggior parte dei team affronta ancora i problemi in modo reattivo, portando a un aumento del tempo di ciclo che impedisce l'efficienza.

L'ingegneria del caos è meglio trattata come una mentalità piuttosto che una procedura specifica o un prodotto software. Se riconosci che i sistemi tendono al caos, inizierai naturalmente a fornire supporto per ulteriori “what-if” scenari nel tuo codice.

Vale sempre la pena pensare all' “impossibile” eventi, come un'interruzione del data center o una grave congestione della rete. In realtà, non sono impossibili, solo estremamente rari. Quando colpiscono, è probabile che siano gli eventi più distruttivi che il tuo sistema incontra, a meno che la tua infrastruttura non sia pronta a gestirli con routine di fallback.

Exit mobile version