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

Si applica a questa raccomandazione per l'affidabilità del framework ben progettato di Azure:

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 assicurarsi che le strategie di implementazione e ridimensionamento delle prestazioni siano efficaci eseguendo malfunzionamenti attivi 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. Il test di affidabilità è incentrato 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à Tempo di esecuzione di un carico di lavoro dell'applicazione 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 L'atto di introdurre un errore a un sistema per testare la resilienza del sistema.
Recuperabilità Sinonimo di resilienza.
Resilienza Capacità di un carico di lavoro dell'applicazione di resistere e ripristinare da modalità di errore.

Strategie di progettazione chiave

Preparazione dell'affidabilità dei test

  • Eseguire regolarmente test per convalidare soglie, destinazioni e presupposti esistenti. Quando si verifica un cambiamento importante nel carico di lavoro, eseguire test regolari. Eseguire la maggior parte dei test in ambienti di test e gestione temporanea. È utile anche 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 una copertura coerente dei test e 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 semplice formato di documentazione, 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 devono informare il perfezionamento degli obiettivi di affidabilità, ad esempio gli obiettivi del livello di servizio ( SLA), i contratti di servizio (SLA), gli obiettivi del tempo di ripristino (RTO) e gli obiettivi del punto di ripristino (RPO).

  • Creare una frequenza 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 procedure di test di distribuzione standard del settore per garantire che sia disponibile un processo di distribuzione automatizzato, prevedibile ed efficiente.

  • Testare la capacità del carico di lavoro di resistere a 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-riparazione e 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 degradare 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 potenziale rischio 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.

Usare l'inserimento di errori e la progettazione chaos

I test di iniezione di errore seguono i principi di chaos engineering 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 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 chiave 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 esperimenti di progettazione chaos per migliorare la capacità del carico di lavoro di evitare e ripristinare gli errori.

Chaos Engineering è 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 una singola interruzione. Seguire questo metodo standard quando si progettano gli esperimenti chaos:

  1. Iniziare con un'ipotesi. Ogni esperimento deve avere un obiettivo chiaro, ad esempio testare la capacità di un determinato flusso di resistere alla perdita di un determinato componente.
  2. Valutare il comportamento iniziale. Assicurarsi di avere 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 puntare intenzionalmente a 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 i 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 delle 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, è possibile:

  • Verificare che il monitoraggio sia attivo e che gli avvisi siano configurati.
  • Convalidare il processo di assegnazione di un singolo responsabile diretto (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 test chaos:

  • 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 la modifica, 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 che sono state apportate modifiche. Ad esempio, è possibile introdurre inavvertitamente nuove dipendenze o suddividere le dipendenze esistenti 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 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'obiettivo SLO concordato.

  • 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 diversi componenti all'interno del carico di lavoro che vengono rivelati 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. Man mano che 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 e eseguire il rollback dei piani per annullare 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

Piani di test di Azure è una soluzione di gestione di test semplice basata su browser 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 l'ingegneria chaos per aiutare a 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 eseguire test di inserimento degli errori e resilienza per l'applicazione usando l'infrastruttura di Azure.

Elenco di controllo per l'affidabilità

Fare riferimento al set completo di raccomandazioni.