Esegui test per il ripristino dagli errori

Last reviewed 2024-12-30 UTC

Questo principio del pilastro dell'affidabilità del Google Cloud Well-Architected Framework fornisce consigli per aiutarti a progettare ed eseguire test per il ripristino in caso di errori.

Questo principio è pertinente all'area di interesse apprendimento dell'affidabilità.

Panoramica del principio

Per assicurarti che il tuo sistema possa ripristinarsi in caso di errori, devi eseguire periodicamente test che includano failover regionali, rollback delle release e ripristino dei dati dai backup.

Questi test ti aiutano a esercitarti a rispondere a eventi che comportano rischi elevati per l' affidabilità, come l'interruzione di un'intera regione. Questi test ti aiutano anche a verificare che il sistema si comporti come previsto durante un'interruzione.

Nell'improbabile eventualità che un'intera regione vada in down, devi eseguire il failover di tutto il traffico in un'altra regione. Durante il normale funzionamento del workload, quando i dati vengono modificati, devono essere sincronizzati dalla regione principale alla regione di failover. Devi verificare che i dati replicati siano sempre molto recenti, in modo che gli utenti non subiscano perdite di dati o interruzioni della sessione. Il sistema di bilanciamento del carico deve anche essere in grado di spostare il traffico nella regione di failover in qualsiasi momento senza interruzioni del servizio. Per ridurre al minimo i tempi di inattività dopo un'interruzione regionale, gli ingegneri delle operazioni devono anche essere in grado di spostare manualmente ed efficientemente il traffico utente da una regione, nel minor tempo possibile. Questa operazione viene a volte chiamata svuotamento di una regione, il che significa che interrompi il traffico in entrata verso la regione e sposti tutto il traffico altrove.

Consigli

Quando progetti ed esegui test per il ripristino in caso di errori, tieni in considerazione i consigli nelle seguenti sottosezioni.

Definire gli obiettivi e l'ambito dei test

Definisci chiaramente cosa vuoi ottenere dai test. Ad esempio, i tuoi obiettivi possono includere quanto segue:

  • Convalidare il Recovery Time Objective (RTO) e il Recovery Point Objective (RPO). Per maggiori dettagli, vedi Nozioni di base RE emergenza.
  • Valutare la resilienza e la tolleranza agli errori del sistema in vari scenari di errore.
  • Testare l'efficacia dei meccanismi di failover automatico.

Decidi quali componenti, servizi o regioni rientrano nell'ambito dei test. L' ambito può includere livelli di applicazione specifici come frontend, backend e database oppure risorse specifiche come Google Cloud istanze Cloud SQL o cluster GKE. L'ambito deve anche specificare eventuali dipendenze esterne, come API di terze parti o interconnessioni cloud.

Preparare l'ambiente per i test

Scegli un ambiente appropriato, preferibilmente un ambiente di staging o sandbox che replichi la configurazione di produzione. Se esegui il test in produzione, assicurati di avere misure di sicurezza pronte, come il monitoraggio automatico e le procedure di rollback manuale.

Crea un piano di backup. Scatta snapshot o backup di database e servizi critici per evitare la perdita di dati durante il test. Assicurati che il tuo team sia pronto a eseguire interventi manuali in caso di guasto dei meccanismi di failover automatico.

Per evitare interruzioni dei test, assicurati che i ruoli, le policy e le configurazioni di failover IAM siano configurati correttamente. Verifica che siano presenti le autorizzazioni necessarie per gli strumenti e gli script di test.

Informa gli stakeholder, inclusi i proprietari di operazioni, DevOps e applicazioni, sulla pianificazione, sull'ambito e sul potenziale impatto dei test. Fornisci agli stakeholder una tempistica stimata e i comportamenti previsti durante il test.

Simulare scenari di errore

Pianifica ed esegui gli errori utilizzando strumenti come Chaos Monkey. Puoi utilizzare script personalizzati per simulare errori di servizi critici, ad esempio l'arresto di un nodo principale in un cluster GKE multi-zona o un'istanza Cloud SQL disabilitata. Puoi anche utilizzare script per simulare un'interruzione di rete a livello di regione utilizzando regole firewall o restrizioni API in base all'ambito del test. Aumenta gradualmente gli scenari di errore per osservare il comportamento del sistema in varie condizioni.

Introduci i test di carico insieme agli scenari di errore per replicare l'utilizzo reale durante le interruzioni. Testa gli impatti degli errori a cascata, ad esempio il comportamento dei sistemi frontend quando i servizi backend non sono disponibili.

Per convalidare le modifiche alla configurazione e valutare la resilienza del sistema agli errori umani, testa gli scenari che comportano configurazioni errate. Ad esempio, esegui test con impostazioni di failover DNS errate o autorizzazioni IAM errate.

Monitorare il comportamento del sistema

Monitora il modo in cui i bilanciatori del carico, i controlli di integrità e altri meccanismi reindirizzano il traffico. Utilizza Google Cloud strumenti come Cloud Monitoring e Cloud Logging per acquisire metriche ed eventi durante il test.

Osserva le modifiche alla latenza, alle percentuali di errore e al throughput durante e dopo la simulazione dell'errore e monitora l'impatto complessivo sul rendimento. Identifica eventuali cali o incoerenze nell'esperienza utente.

Assicurati che vengano generati log e che vengano attivati avvisi per gli eventi chiave, come interruzioni del servizio o failover. Utilizza questi dati per verificare l'efficacia dei sistemi di avviso e di risposta agli incidenti.

Verificare il ripristino rispetto a RTO e RPO

Misura il tempo necessario al sistema per riprendere le normali operazioni dopo un errore, quindi confronta questi dati con l'RTO definito e documenta eventuali lacune.

Assicurati che l'integrità e la disponibilità dei dati siano in linea con l'RPO. Per testare la coerenza del database, confronta gli snapshot o i backup del database prima e dopo un errore.

Valuta il ripristino del servizio e verifica che tutti i servizi siano ripristinati a uno stato funzionale con un'interruzione minima per l'utente.

Documentare e analizzare i risultati

Documenta ogni passaggio del test, scenario di errore e comportamento del sistema corrispondente. Includi timestamp, log e metriche per analisi dettagliate.

Evidenzia i colli di bottiglia, i single point of failure o i comportamenti imprevisti osservati durante il test. Per dare la priorità alle correzioni, classifica i problemi in base alla gravità e all'impatto.

Suggerisci miglioramenti all'architettura del sistema, ai meccanismi di failover o alle configurazioni di monitoraggio. In base ai risultati dei test, aggiorna le policy e i manuali di failover pertinenti. Presenta un report post-mortem agli stakeholder. Il report deve riassumere i risultati, le lezioni apprese e i passaggi successivi. Per maggiori informazioni, vedi Eseguire post-mortem approfonditi.

Iterare e migliorare

Per convalidare l'affidabilità e la resilienza continue, pianifica test periodici (ad esempio trimestrali).

Esegui test in diversi scenari, tra cui modifiche all'infrastruttura, aggiornamenti software e aumento dei carichi di traffico.

Automatizza i test di failover utilizzando le pipeline CI/CD per integrare i test di affidabilità nel ciclo di vita dello sviluppo.

Durante il post-mortem, utilizza il feedback degli stakeholder e degli utenti finali per migliorare il processo di test e la resilienza del sistema.