Questo principio del pilastro dell'affidabilità del Google Cloud Architecture Framework fornisce consigli per aiutarti a progettare ed eseguire test per il recupero in caso di guasti.
Questo principio è pertinente all'area di interesse dell'apprendimento dell'affidabilità.
Panoramica del principio
Per assicurarti che il sistema possa riprendersi dagli errori, devi eseguire periodicamente test che includono failover regionali, rollback delle release e ripristino dei dati dai backup.
Questi test ti aiutano a fare pratica con le risposte a eventi che rappresentano rischi significativi 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 caso di interruzione di un'intera regione, devi eseguire il failover di tutto il traffico in un'altra regione. Durante il normale funzionamento del carico di lavoro, 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 perdano dati o non interrompano la sessione. Il sistema di bilanciamento del carico deve anche essere in grado di trasferire il traffico alla 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 e in modo efficiente il traffico dell'utente da una regione, nel minor tempo possibile. Questa operazione è talvolta chiamata svuotamento di una regione, il che significa che interrompi il traffico in entrata nella regione e sposti tutto il traffico altrove.
Consigli
Quando progetti ed esegui test per il recupero in caso di errore, tieni conto dei consigli riportati nelle sezioni seguenti.
Definisci gli obiettivi e l'ambito dei test
Definisci chiaramente cosa vuoi ottenere dai test. Ad esempio, i tuoi scopi possono includere:
- Convalida l'obiettivo di tempo di recupero (RTO) e l'obiettivo di punto di recupero (RPO). Per maggiori dettagli, consulta Nozioni di base sulla pianificazione del RE dati.
- Valutare la resilienza e la tolleranza di errore del sistema in vari scenari di errore.
- Verifica 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 di Google Cloud come istanze Cloud SQL o cluster GKE. L'ambito deve specificare anche 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 a disposizione 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 preparato a eseguire interventi manuali in caso di guasto dei meccanismi di failover automatico.
Per evitare interruzioni dei test, assicurati che i ruoli IAM, i criteri e le configurazioni di failover siano configurati correttamente. Verifica che siano presenti le autorizzazioni necessarie per gli script e gli strumenti di test.
Informa gli stakeholder, tra cui operazioni, DevOps e proprietari di applicazioni, sulla pianificazione, sull'ambito e sul potenziale impatto del test. Fornisci agli stakeholder una sequenza temporale stimata e i comportamenti previsti durante il test.
Simulare scenari di errore
Pianifica ed esegui errori utilizzando strumenti come Chaos Monkey. Puoi utilizzare script personalizzati per simulare guasti di servizi critici, ad esempio l'arresto di un nodo principale in un cluster GKE multizona o un'istanza Cloud SQL disattivata. Puoi anche utilizzare script per simulare un'interruzione della rete su larga scala utilizzando regole firewall o restrizioni API in base all'ambito del test. Esegui la riassegnazione graduale degli scenari di errore per osservare il comportamento del sistema in varie condizioni.
Introduci i test di carico insieme a 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 di backend non sono disponibili.
Per convalidare le modifiche alla configurazione e valutare la resilienza del sistema agli errori umani, testa scenari che prevedono configurazioni errate. Ad esempio, esegui test con impostazioni di failover DNS 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 gli strumenti di Google Cloud , come Cloud Monitoring e Cloud Logging, per acquisire metriche ed eventi durante il test.
Osserva le variazioni di latenza, percentuale di errori e throughput durante e dopo la simulazione di errore e monitora l'impatto complessivo sul rendimento. Identifica eventuali sviluppi o incoerenze nell'esperienza utente.
Assicurati che i log vengano generati e che gli avvisi vengano attivati per eventi chiave, come interruzioni del servizio o failover. Utilizza questi dati per verificare l'efficacia dei tuoi sistemi di avviso e risposta agli incidenti.
Verificare il recupero in base a RTO e RPO
Misura il tempo necessario al sistema per riprendere le normali operazioni dopo un guasto, poi confronta questi dati con il RTO definito e documenta eventuali lacune.
Assicurati che l'integrità e la disponibilità dei dati siano in linea con il RPO. Per verificare 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 stati ripristinati in uno stato operativo con un'interruzione minima per gli utenti.
Documentare e analizzare i risultati
Documenta ogni passaggio del test, ogni 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 dare la priorità alle correzioni, classifica i problemi in base alla gravità e all'impatto.
Suggerire miglioramenti all'architettura del sistema, ai meccanismi di failover o alle configurazioni di monitoraggio. In base ai risultati del test, aggiorna eventuali criteri di failover e playbook pertinenti. Presenta un report post mortem agli stakeholder. Il report deve riepilogare i risultati, le lezioni apprese e i passaggi successivi. Per ulteriori informazioni, consulta Eseguire autopsie approfondite.
Esegui l'iterazione e migliora
Per convalidare l'affidabilità e la resilienza continua, pianifica test periodici (ad esempio trimestrali).
Esegui test in scenari diversi, 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 la procedura di test e la resilienza del sistema.