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 dell'apprendimento dell'affidabilità.
Panoramica del principio
Per assicurarti che il 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 maggiori per l'affidabilità, come l'interruzione di un'intera regione. Questi test ti aiutano anche a verificare che il tuo 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 primaria 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 degli utenti da una regione, nel minor tempo possibile. Questa operazione a volte viene 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 errore, considera i consigli riportati nelle seguenti sottosezioni.
Definisci gli obiettivi e l'ambito del test
Definisci chiaramente cosa vuoi ottenere dal test. Ad esempio, i tuoi obiettivi possono includere quanto segue:
- Convalida il Recovery Time Objective (RTO) e il Recovery Point Objective (RPO). Per maggiori dettagli, vedi Nozioni di base della pianificazione del DR.
- Valuta 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 specifiche come istanze Cloud SQL o cluster GKE. Google Cloud 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. Scatta snapshot o esegui backup di servizi e database critici per evitare la perdita di dati durante il test. Assicurati che il tuo team sia pronto a eseguire interventi manuali in caso di errore dei meccanismi di failover automatico.
Per evitare interruzioni dei test, assicurati che i ruoli IAM, i criteri e le configurazioni di failover siano impostati correttamente. Verifica che siano presenti le autorizzazioni necessarie per gli strumenti e gli script di test.
Informa le parti interessate, inclusi i proprietari di operazioni, DevOps e 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.
Simulare scenari di errore
Pianifica ed esegui errori utilizzando strumenti come Chaos Monkey. Puoi utilizzare script personalizzati per simulare errori di servizi critici, ad esempio l'arresto di un nodo primario in un cluster GKE multizona o un'istanza Cloud SQL disabilitata. Puoi anche utilizzare script per simulare un'interruzione di rete a livello di regione utilizzando regole firewall o limitazioni API in base all'ambito del test. Aumenta gradualmente gli scenari di errore per osservare il comportamento del sistema in varie condizioni.
Introduci 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 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 variazioni di latenza, percentuali di errore e velocità effettiva durante e dopo la simulazione di errore e monitora l'impatto complessivo sulle prestazioni. Identifica eventuali degradazioni o incongruenze nell'esperienza utente.
Assicurati che i log vengano generati e gli avvisi attivati per gli eventi chiave, ad esempio interruzioni del servizio o failover. Utilizza questi dati per verificare l'efficacia dei tuoi sistemi di avviso e risposta agli incidenti.
Verificare il ripristino in base a RTO e RPO
Misura il tempo necessario al sistema per riprendere il normale funzionamento 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 in uno stato funzionale con interruzioni minime per gli utenti.
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.
Metti in evidenza 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 del test, aggiorna le norme di failover e i playbook pertinenti. Presenta un report post mortem alle parti interessate. Il report deve riassumere i risultati, le lezioni apprese e i passaggi successivi. Per saperne di più, vedi Eseguire analisi post mortem approfondite.
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 l'analisi post mortem, utilizza il feedback degli stakeholder e degli utenti finali per migliorare la procedura di test e la resilienza del sistema.