Beauty in the Breaks: creazione di sistemi resilienti attraverso l'ingegneria del caos

Autore: Laura McKinney
Data Della Creazione: 2 Aprile 2021
Data Di Aggiornamento: 1 Luglio 2024
Anonim
Beauty in the Breaks: creazione di sistemi resilienti attraverso l'ingegneria del caos - Tecnologia
Beauty in the Breaks: creazione di sistemi resilienti attraverso l'ingegneria del caos - Tecnologia

Contenuto


Fonte: pressureUA / iStockphoto

Porta via:

I sistemi moderni devono essere in grado di gestire il caos per evitare tempi di inattività. Ecco perché è più importante che mai testare a fondo i sistemi e garantirne la resilienza.

Nonostante i nostri maggiori sforzi per evitarli, gli incidenti IT sono una parte inevitabile del lavoro e cercare di stare al passo con i tempi di inattività che incidono sul business sta diventando sempre più complicato. I sistemi oggi sono strettamente accoppiati e sempre più complessi, e con più parti in movimento arrivano maggiori opportunità che qualcosa vada storto.

Questo è uno dei motivi per cui sempre più organizzazioni si rivolgono ai microservizi per una maggiore disponibilità del servizio e una migliore resilienza ai guasti. Ma mentre queste sono ottime premesse per rompere le applicazioni monolitiche, possono anche potenzialmente aggravare il rischio di fallimento - a meno che non siano progettate espressamente pensando alla resilienza.


Prepararsi al fallimento

Data la natura intrinsecamente caotica dei sistemi distribuiti, i servizi dovrebbero essere sviluppati non solo per anticipare i guasti, ma per ripristinarli automaticamente in caso di guasti. Ciò significa istigare regolarmente guasti per garantire che i sistemi possano gestire il caos senza interrompere il servizio ai clienti finali. A tal fine, è necessario simulare il traffico simile alla produzione in ambienti di test.

Certo, è una buona idea testare la resilienza prima che le modifiche arrivino alla produzione. Se non lo fai, non sarai in grado di verificare che i tuoi servizi siano in grado di supportare carichi medi e di picco. In effetti, la scommessa più sicura è garantire che il tuo prodotto sia in grado di gestire fino al doppio dell'importo massimo senza dover ridimensionare.

Quando si tratta di test di resilienza, gli strumenti giusti non dovrebbero preoccuparsi troppo di come vengono gestite le richieste, ma solo che alla fine avranno il giusto impatto. Ricordare che in determinate condizioni, il servizio di input può non riuscire a consegnare una richiesta al resto del sistema ma non segnalare l'errore. Non rischiare problemi che volano sotto il radar del monitoraggio assicurandoti che la convalida end-to-end stia effettivamente avvenendo. (Per ulteriori informazioni, vedi Guasti tecnici: possiamo vivere con loro?)


I prossimi passi

Dopo aver capito come si comportano i servizi sotto carico, è tempo di iniziare a presentare gli eventi di errore. Come per tutti i test software, è meglio disporre di strumenti automatizzati che consentano di riprodurre facilmente e rapidamente scenari, in modo da poter coordinare eventi complessi che incidono su diverse tecnologie di infrastruttura. E oltre alla possibilità di verificare correzioni e modifiche ai servizi, ciò consente di eseguire scenari di errore casuali in qualsiasi ambiente e secondo una pianificazione.

Gli eventi di errore significativi dipendono in gran parte dal layout dei servizi e puoi formularli ponendo domande specifiche pertinenti per te. Ad esempio, qual è l'impatto per le persone che utilizzano il front-end quando un database diventa irraggiungibile per un determinato periodo di tempo? Questi utenti possono comunque navigare nell'interfaccia utente Web? Possono ancora inviare aggiornamenti alle loro informazioni e tali aggiornamenti verranno elaborati correttamente quando il database tornerà raggiungibile?

Se si eseguono più microservizi, è possibile chiedere se si verificherà un'interruzione globale in caso di arresto anomalo di un singolo servizio. O se si dispone di un meccanismo di accodamento per bufferizzare la comunicazione tra servizi, cosa succede quando il servizio (o servizi) del consumatore smette di funzionare? Gli utenti saranno ancora in grado di lavorare con la tua applicazione? E dato un carico medio, quanto tempo hai prima che le code trabocchino e inizi a perdere s?

Nessun bug, nessuno stress: la tua guida passo passo alla creazione di software che ti cambia la vita senza distruggere la tua vita

Non puoi migliorare le tue capacità di programmazione quando a nessuno importa della qualità del software.

Dopo aver definito alcune domande chiave sulla tua infrastruttura, puoi quindi iniziare a elencare diversi modi per simulare tali guasti. Potrebbe essere sufficiente arrestare un determinato servizio o un server di database. Potresti voler bloccare il thread principale di un servizio per simulare un dead-lock, mentre il suo contenitore è ancora reattivo e in esecuzione. Potresti decidere di introdurre regole nella tua rete per bloccare il traffico tra servizi specifici. In ambienti Linux, è possibile utilizzare strumenti come "tc" per emulare situazioni di rete come pacchetti ad alta latenza, eliminati, danneggiati o duplicati. (Può essere importante coinvolgere gli utenti nei test. Leggi di più in 4 Ragioni per cui gli utenti finali devono partecipare ai test prima dell'UAT.)

Imparare e migliorare attraverso le esercitazioni

Uno degli aspetti più preziosi della creazione di scenari di fallimento è che possono esporre tutti i potenziali modi in cui il sistema può fallire, scolpendo così il percorso verso la logica autorigenerante. Il tuo team eseguirà i passaggi per ripristinare i servizi manualmente: un ottimo esercizio, a proposito, per confermare che sono in grado di farlo all'interno degli SLA. È possibile lavorare sull'automazione di questo processo di recupero, ma nel frattempo puoi stare tranquillo sapendo che il tuo team ha attraversato il processo di recupero dei servizi. Rendendo gli scenari di errore casuali e regolari e non rivelando i dettagli completi della corsa, è anche possibile includere il rilevamento e le diagnosi al trapano, che è, dopo tutto, una parte critica degli SLA.

Fondamentalmente, l'ingegneria del caos prende in considerazione la complessità del sistema, lo verifica simulando condizioni nuove e stravaganti e osserva come il sistema risponde. Questo è il team di ingegneria dei dati che deve riprogettare e riconfigurare il sistema per ottenere una maggiore resilienza. Ci sono così tante opportunità per imparare cose nuove e utili. Ad esempio, potresti trovare casi in cui i servizi non ricevono aggiornamenti quando i servizi a valle sono cambiati o aree in cui il monitoraggio manca completamente. Non mancano modi entusiasmanti per rendere il tuo prodotto più resistente e robusto!