Questo principio del pilastro dell'affidabilità del Google Cloud Well-Architected Framework fornisce consigli per aiutarti a progettare ed eseguire test per il recupero in caso di errori.
Questo principio è pertinente all'area di interesse apprendimento dell'affidabilità.
Panoramica del principio
Per assicurarti che il tuo sistema possa riprendersi da errori, devi eseguire periodicamente test che includano failover regionali, rollback delle release e ripristino dei dati dai backup.
Questo test ti aiuta a esercitarti con le risposte a eventi che comportano rischi significativi per l'affidabilità, come l'interruzione di un'intera regione. Questo test ti aiuta anche a verificare che il tuo sistema si comporti come previsto durante un'interruzione.
Nell'improbabile caso in cui un'intera regione non sia disponibile, devi eseguire il failover di tutto il traffico verso 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 inoltre essere in grado di spostare il traffico verso la regione di failover in qualsiasi momento senza interruzioni del servizio. Per ridurre al minimo i tempi di inattività dopo un'interruzione a livello di regione, gli ingegneri operativi devono anche essere in grado di spostare manualmente ed efficacemente il traffico degli utenti da una regione nel minor tempo possibile. Questa operazione viene talvolta chiamata svuotamento di una regione, il che significa che interrompi il traffico in entrata verso la regione e lo sposti altrove.
Consigli
Quando progetti ed esegui test per il ripristino in caso di errore, tieni conto dei consigli riportati nelle sottosezioni seguenti.
Definisci gli obiettivi e l'ambito dei test
Definisci chiaramente cosa vuoi ottenere dai test. Ad esempio, i tuoi obiettivi possono includere:
- Convalida il Recovery Time Objective (RTO) e il Recovery Point Objective (RPO). Per maggiori dettagli, consulta Nozioni di base sulla RE DR.
- Valutare la resilienza e la tolleranza di errore del sistema in vari scenari di errore.
- Testa l'efficacia dei meccanismi di failover automatico.
Decidi quali componenti, servizi o regioni rientrano nell'ambito del test. L'ambito può includere livelli di applicazione specifici come frontend, backend e database oppure risorse Google Cloud specifiche come istanze Cloud SQL o cluster GKE. L'ambito deve inoltre specificare eventuali dipendenze esterne, come API di terze parti o Cloud Interconnect.
Prepara l'ambiente per i test
Scegli un ambiente appropriato, preferibilmente un ambiente di gestione temporanea o sandbox che replichi la configurazione di produzione. Se esegui il test in produzione, assicurati di avere pronte misure di sicurezza, come il monitoraggio automatico e le procedure di rollback manuale.
Crea un piano di backup. Acquisisci 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 intervenire manualmente se i meccanismi di failover automatico non funzionano.
Per evitare interruzioni dei test, assicurati che i ruoli, le policy e le configurazioni di failover di Identity and Access Management (IAM) siano configurati correttamente. Verifica che siano presenti le autorizzazioni necessarie per gli strumenti e gli script di test.
Informa gli stakeholder, tra cui i team operativi, DevOps e i proprietari delle applicazioni, in merito alla pianificazione, all'ambito e al potenziale impatto del test. Fornisci agli stakeholder una cronologia stimata e i comportamenti previsti durante il test.
Simula scenari di errore
Pianifica ed esegui gli errori utilizzando strumenti come Chaos Monkey. Puoi utilizzare script personalizzati per simulare errori di servizi critici, come l'arresto di un nodo principale in un cluster GKE multizona o un'istanza Cloud SQL disabilitata. Puoi anche utilizzare gli script per simulare un'interruzione della rete a livello di regione utilizzando regole firewall o limitazioni dell'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 di frontend quando i servizi di 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.
Monitora il comportamento del sistema
Monitora il modo in cui i bilanciatori del carico, i controlli di integrità e altri meccanismi cambiano il percorso del traffico. Utilizza strumenti Google Cloud come Cloud Monitoring e Cloud Logging per acquisire metriche ed eventi durante il test.
Osserva le variazioni di latenza, frequenza degli errori e velocità effettiva durante e dopo la simulazione degli errori e monitora l'impatto complessivo sulle prestazioni. Identifica eventuali peggioramenti o incoerenze nell'esperienza utente.
Assicurati che vengano generati log e attivati avvisi per gli eventi chiave, come interruzioni del servizio o failover. Utilizza questi dati per verificare l'efficacia dei tuoi sistemi di avviso e risposta agli incidenti.
Verifica il recupero in base ai tuoi 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 dei servizi e verifica che tutti i servizi siano stati ripristinati in uno stato funzionale con un'interruzione minima per gli utenti.
Documenta e analizza i risultati
Documenta ogni passaggio del test, lo scenario di errore e il 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 stabilire le priorità delle 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 di failover e i playbook pertinenti. Presentare un report post-mortem agli stakeholder. Il report deve riassumere i risultati, le lezioni apprese e i passaggi successivi. Per saperne di più, consulta Esegui post-mortem approfonditi.
Itera e migliora
Per convalidare l'affidabilità e la resilienza nel tempo, 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 la fase di post-mortem, utilizza il feedback degli stakeholder e degli utenti finali per migliorare il processo di test e la resilienza del sistema.