Suggerimenti per la progettazione di una strategia di test di affidabilità

Si applica a questa raccomandazione per l'affidabilità di Azure Well-Architected Framework:

RE:08 Testare gli scenari di resilienza e disponibilità applicando i principi di chaos engineering negli ambienti di test e produzione. Usare i test per garantire che le strategie di implementazione e ridimensionamento della riduzione delle prestazioni siano efficaci eseguendo un malfunzionamento attivo e test di carico simulati.

Questa guida descrive le raccomandazioni per la progettazione di una strategia di test di affidabilità per convalidare e ottimizzare l'affidabilità del carico di lavoro. I test di affidabilità sono incentrati sulla resilienza e sulla disponibilità del carico di lavoro, in particolare sui flussi critici identificati durante la progettazione della soluzione. Questa guida fornisce indicazioni generali per i test e linee guida specifiche per l'inserimento di errori e la progettazione del caos.

Definizioni

Termine Definizione
Disponibilità Quantità di tempo in cui un carico di lavoro dell'applicazione viene eseguito in uno stato integro senza tempi di inattività significativi.
Ingegneria del caos La pratica di sottoporre applicazioni e servizi a stress e fallimenti reali. L'obiettivo dell'ingegneria del caos è creare e convalidare la resilienza a condizioni inaffidabili e dipendenze mancanti.
Fault injection Atto di introdurre un errore a un sistema per testare la resilienza del sistema.
Recuperabilità Sinonimo della resilienza.
Resilienza Capacità di un carico di lavoro dell'applicazione di resistere e recuperare dalle modalità di errore.

Strategie di progettazione chiave

Linee guida generali per i test

  • Eseguire regolarmente test per convalidare soglie, destinazioni e presupposti esistenti. Quando si verifica una modifica importante nel carico di lavoro, eseguire test regolari. Eseguire la maggior parte dei test negli ambienti di test e gestione temporanea. È anche utile eseguire un subset di test sul sistema di produzione. Pianificare una parità uno-a-uno degli ambienti di test principali con l'ambiente di produzione.

  • Automatizzare i test per garantire la coerenza della copertura dei test e la riproducibilità. Automatizzare attività di test comuni e integrarle nei processi di compilazione. Il test manuale del software è noioso e soggetto a errori, ma è possibile eseguire test esplorativi manuali. Per i casi in cui è necessario sviluppare test automatizzati, usare test manuali per determinare l'ambito dei test da sviluppare.

  • Adottare un approccio di test a sinistra per eseguire test di resilienza e disponibilità nelle prime fasi del ciclo di sviluppo.

  • Adattare un formato di documentazione semplice, quindi è facile per tutti comprendere il processo e i risultati di ogni test regolare.

  • Condividere i risultati documentati con i team appropriati, ad esempio team operativi, leadership tecnologica, stakeholder aziendali e stakeholder del ripristino di emergenza. I risultati dovrebbero informare il perfezionamento degli obiettivi di affidabilità, ad esempio obiettivi a livello di servizio (SLO), contratti di servizio (SLA), obiettivi del tempo di ripristino (RTO) e obiettivi del punto di ripristino (RPO).

  • Creare una cadenza di test regolare per i backup. Ripristinare i dati in sistemi isolati per garantire che i backup siano validi e che i ripristini siano funzionali.

  • Documentare e condividere le metriche del tempo di ripristino con gli stakeholder del ripristino di emergenza per garantire che le aspettative per il ripristino siano appropriate.

  • Usare le procedure di test della distribuzione standard del settore per assicurarsi di avere un processo di distribuzione automatizzato, prevedibile ed efficiente.

  • Testare la capacità del carico di lavoro di resistere agli errori temporanei. Per altre informazioni, vedere Raccomandazioni per la gestione degli errori temporanei.

  • Testare la capacità del carico di lavoro di rispondere alle modifiche apportate ai modelli di carico e ai picchi di utilizzo. Usare queste informazioni per testare la strategia di ridimensionamento. Per informazioni sui test di carico e stress, vedere Raccomandazioni per i test.

  • Testare il modo in cui il carico di lavoro gestisce gli errori nei servizi dipendenti o in altre dipendenze usando l'inserimento di errori.

  • Testare e convalidare il modo in cui la progettazione di auto-guarigione e auto-conservazione risponde a malfunzionamenti. Testare le operazioni di ripristino automatizzate e manuali.

  • Testare il piano di ripristino di emergenza per rispondere a errori irreversibili e ad altri eventi imprevisti importanti.

  • Testare la capacità del carico di lavoro di ridursi normalmente e ridurre al minimo il raggio di esplosione del malfunzionamento del componente usando l'inserimento di errori.

Sfruttare i vantaggi delle interruzioni pianificate e non pianificate

Quando il carico di lavoro è offline a causa di una manutenzione pianificata o di un'interruzione non pianificata, è possibile eseguire test e migliorare la comprensione del carico di lavoro. Le sezioni seguenti forniscono raccomandazioni per ogni scenario.

Manutenzione pianificata

Quando sono state pianificate finestre di manutenzione per aggiornamenti o patch, è possibile testare componenti e flussi che non sono coinvolti nel lavoro di manutenzione. Eseguire test senza il rischio potenziale di degradare in modo imprevisto il carico di lavoro o portarlo offline completamente. Se si dispone di tempo sufficiente durante la finestra di manutenzione, è anche possibile testare i componenti e i flussi coinvolti nella manutenzione dopo il completamento del lavoro di manutenzione.

Interruzione non pianificata

Usare ogni evento imprevisto di interruzione come opportunità per ottenere altre informazioni sul carico di lavoro e migliorare la resilienza seguendo questi passaggi, ordinati in base alla priorità:

  • Ottenere il carico di lavoro online per i clienti. A tale scopo, è possibile eseguire una soluzione alternativa per il problema, risolvere il problema o avviare i processi di ripristino.

  • Determinare la causa radice dell'interruzione e risolverla. Se è possibile correggere la causa radice come parte dell'indagine, documentare la causa radice e le misure adottate per correggerla. Se il problema richiede l'esecuzione di una finestra di manutenzione aggiuntiva in un secondo momento, assicurarsi che le misure di mitigazione possano gestire il carico previsto testandolo accuratamente. Assicurarsi di aver configurato un monitoraggio sufficiente per coprire le misure di mitigazione.

  • Se applicabile, cercare lo stesso problema o i punti deboli di configurazione che potrebbero essere interessati da problemi simili in tutti i componenti del carico di lavoro. Usare questa opportunità per risolvere in modo proattivo tali componenti. Consultare la cronologia degli eventi imprevisti per rilevare modelli di problemi simili nel carico di lavoro.

  • Usare i risultati per migliorare la strategia di test. Assicurarsi di aver risolto correttamente la causa radice e problemi simili testando direttamente lo stesso errore.

Materiale sussidiario per l'inserimento di errori e la progettazione del caos

I test di inserimento degli errori seguono i principi della progettazione del caos evidenziando la capacità del carico di lavoro di reagire agli errori dei componenti. Eseguire test di iniezione di errore in ambienti di pre-produzione e produzione. Applicare il test ai livelli dell'infrastruttura e dell'applicazione. Applicare le informazioni apprese Raccomandazioni per l'esecuzione dell'analisi della modalità di errore per assicurarsi di testare solo gli errori classificati in ordine di priorità e di avere strategie di mitigazione per risolvere gli errori. Le linee guida principali dell'ingegneria del caos sono:

  • Essere proattivi. Non aspettare che si verifichino errori. Provare a prevedere gli errori eseguendo esperimenti chaos per individuare e risolvere i problemi prima che influiscano sull'ambiente di produzione.

  • Accettare l'errore. Accettare e apprendere dagli errori che si verificano nel sistema. Vedere gli errori come parte naturale dei sistemi complessi e usarli come opportunità per apprendere e migliorare l'affidabilità del sistema.

  • Interrompere il sistema. Inserire deliberatamente errori o stress nel sistema per testare la resilienza. Simulare errori o interruzioni reali per testare e migliorare le funzionalità di ripristino del carico di lavoro.

  • Identificare e risolvere i singoli punti di guasto in anticipo. Durante il test, consultare e aggiornare l'analisi della modalità di errore per convalidare e risolvere gli errori nella documentazione. Applicare approcci di affidabilità, ad esempio ridondanza e segmentazione, per aumentare la disponibilità del carico di lavoro e ridurre al minimo i tempi di inattività.

  • Adottare strategie di protezione e mitigazione. Implementare misure di sicurezza, ad esempio il modello interruttore o il modello di limitazione, per aumentare la disponibilità. Implementare approcci di riduzione delle prestazioni normale che consentono la continuità aziendale durante gli errori.

  • Ridurre al minimo il raggio di attacco. Implementare strategie di isolamento degli errori per garantire che, anche in caso di errore, l'ambito sia limitato. Il sistema continua a funzionare con un effetto minimo sui clienti.

  • Generare immunità. Usare gli esperimenti di progettazione chaos per migliorare la capacità del carico di lavoro di impedire e recuperare errori.

Chaos Engineering è una parte integrante della cultura del team del carico di lavoro e una pratica in corso, non un impegno tattico a breve termine in risposta a un'interruzione singola. Seguire questo metodo standard quando si progettano gli esperimenti chaos:

  1. Iniziare con un'ipotesi. Ogni esperimento deve avere un obiettivo chiaro, ad esempio il test della capacità di un determinato flusso di resistere alla perdita di un determinato componente.
  2. Valutare il comportamento iniziale. Assicurarsi di disporre di metriche di affidabilità e prestazioni coerenti per il flusso e i componenti coinvolti in un determinato esperimento per confrontare lo stato danneggiato durante l'esecuzione dell'esperimento.
  3. Inserire uno o più errori. L'esperimento dovrebbe indirizzare intenzionalmente componenti specifici che possono essere recuperati rapidamente e si dovrebbe avere una previsione informata dell'effetto che l'iniezione di errore causerà per aiutare a controllare il raggio di esplosione dell'esperimento.
  4. Monitorare il comportamento risultante. Raccogliere dati di telemetria sui singoli componenti del flusso e sul comportamento del flusso end-to-end destinato all'esperimento per comprendere correttamente gli effetti dell'errore. Confrontare le metriche raccolte con le metriche di base per un quadro completo dei risultati dell'inserimento degli errori.
  5. Documentare il processo e le osservazioni. Mantenere i record dettagliati degli esperimenti informerà le decisioni future sulla progettazione del carico di lavoro, assicurandosi di risolvere le lacune che sono state rivelate nel corso del tempo.
  6. Identificare e agire sul risultato. Pianificare i passaggi di correzione che possono essere aggiunti al backlog del carico di lavoro come miglioramenti. Assicurarsi che i piani di miglioramento della progettazione vengano esaminati e testati in ambienti non di produzione in base agli stessi processi di altre distribuzioni.

Convalidare periodicamente il processo, le scelte di architettura e il codice per rilevare rapidamente il debito tecnico, integrare nuove tecnologie e adattarsi ai requisiti mutevoli.

Quando si eseguono esperimenti di iniezione di errore, si:

  • Verificare che il monitoraggio sia attivo e che gli avvisi siano configurati.
  • Convalidare il processo di assegnazione di un individuo direttamente responsabile (DRI) per acquisire la proprietà di un evento imprevisto.
  • Assicurarsi che i processi di documentazione e indagine siano aggiornati.

Integrare le raccomandazioni e le considerazioni seguenti per ottimizzare la strategia di chaos testing:

  • Contestare i presupposti del sistema. Con i test si tenta di migliorare la resilienza del carico di lavoro e le strategie di progettazione del carico di lavoro. Cercare le opportunità di inserire errori nei componenti e nei flussi che si presuppone siano affidabili in base alle esperienze passate. Potrebbero non essere affidabili nel nuovo carico di lavoro.

  • Convalidare le modifiche, ad esempio la topologia, la piattaforma e le risorse. Senza test approfonditi, inclusi i test di inserimento degli errori, potrebbe essere disponibile un'immagine incompleta del carico di lavoro dopo aver apportato le modifiche. Ad esempio, è possibile introdurre inavvertitamente nuove dipendenze o dipendenze esistenti interrotte in modi che non sono immediatamente evidenti.

  • Usare i buffer del contratto di servizio. Limitare i test di caos per rimanere all'interno dei contratti di servizio ed evitare potenziali effetti di reputazione o effetti finanziari da interruzioni. Le destinazioni di ripristino del flusso e del componente consentono di definire l'ambito dei test.

  • Definire un budget per gli errori come investimento nell'ottica dell'inserimento di caos ed errori. Il budget degli errori è la differenza tra il raggiungimento del 100% dell'SLO e il raggiungimento dell'accordo sull'SLO.

  • Arrestare l'esperimento se supera l'ambito. I risultati sconosciuti rappresentano un esito previsto degli esperimenti di caos. Cercare di ottenere un equilibrio tra la raccolta di dati dei risultati sostanziali e la possibilità di influire sul minor numero possibile di utenti di produzione.

  • Collaborare con i team di sviluppo per garantire la pertinenza degli errori inseriti. Usare eventi imprevisti o problemi precedenti come guida. Esaminare le dipendenze e valutare i risultati quando si rimuovono tali dipendenze.

  • Identificare e documentare le dipendenze individuate in precedenza tra componenti diversi all'interno del carico di lavoro che vengono rivelate tramite il chaos testing.

  • Modificare i piani di ripristino in base alle esigenze per tenere conto delle dipendenze individuate durante il test del caos.

  • Usare i risultati degli esperimenti e dei test come base per nuovi esperimenti e test. Quando si verificano comportamenti imprevisti, i nuovi test potrebbero essere destinati direttamente a tali comportamenti e offrono la possibilità di progettare strategie di correzione per tali comportamenti.

Compromesso: i test di iniezione di errore nell'ambiente di produzione possono causare interruzioni e possono causare tempi di inattività. Essere trasparenti con gli stakeholder su questa possibilità e assicurarsi di disporre di misure di sicurezza per terminare gli esperimenti ed eseguire il rollback dei piani per invertire rapidamente gli errori introdotti. Per evitare interruzioni impreviste nell'ambiente di produzione, assicurarsi di pianificare una ridondanza sufficiente e che gli stakeholder comprendano il compromesso sui costi.

Facilitazione di Azure

Azure Test Plans è una soluzione di gestione dei test basata su browser facile da usare che offre tutte le funzionalità necessarie per i test manuali pianificati, i test di accettazione degli utenti, i test esplorativi e la raccolta di feedback dagli stakeholder.

Azure Chaos Studio è un servizio gestito che usa la progettazione chaos per misurare, comprendere e migliorare la resilienza dell'applicazione cloud e del servizio. Azure Chaos Studio ha raggiunto la disponibilità generale a Ignite 2023 e offre numerose funzionalità che consentono di iniziare a usare il test di inserimento e resilienza degli errori per l'applicazione usando l'infrastruttura di Azure.

Elenco di controllo per l'affidabilità

Fare riferimento al set completo di raccomandazioni.