Esse princípio no pilar de confiabilidade do Google Cloud Well-Architected Framework fornece recomendações para ajudar você a projetar e executar testes de recuperação em caso de falhas.
Esse princípio é relevante para a área de foco de aprendizagem da confiabilidade.
Visão geral do princípio
Para garantir que seu sistema possa se recuperar de falhas, execute periodicamente testes que incluam failovers regionais, reversões de lançamento e restauração de dados de backups.
Esse teste ajuda você a praticar respostas a eventos que representam grandes riscos à confiabilidade, como a interrupção de uma região inteira. Esse teste também ajuda a verificar se o sistema se comporta conforme o esperado durante uma interrupção.
No caso improvável de uma região inteira ficar inativa, é necessário fazer failover de todo o tráfego para outra região. Durante a operação normal da sua carga de trabalho, quando os dados são modificados, eles precisam ser sincronizados da região principal para a de failover. É necessário verificar se os dados replicados estão sempre atualizados para que os usuários não sofram perda de dados ou interrupção da sessão. O sistema de balanceamento de carga também precisa conseguir transferir o tráfego para a região de failover a qualquer momento sem interrupções no serviço. Para minimizar o tempo de inatividade após uma interrupção regional, os engenheiros de operações também precisam conseguir desviar o tráfego de usuários de uma região de forma manual e eficiente, no menor tempo possível. Essa operação às vezes é chamada de desativação de uma região, o que significa interromper o tráfego de entrada para a região e mover todo o tráfego para outro lugar.
Recomendações
Ao projetar e executar testes para recuperação de falhas, considere as recomendações nas subseções a seguir.
Definir os objetivos e o escopo do teste
Defina claramente o que você quer alcançar com o teste. Por exemplo, seus objetivos podem incluir o seguinte:
- Valide o objetivo do tempo de recuperação (RTO) e o objetivo do ponto de recuperação (RPO). Para mais detalhes, consulte Noções básicas de planejamento de DR.
- Avalie a capacidade de recuperação e a tolerância a falhas do sistema em vários cenários de falha.
- Teste a eficácia dos mecanismos de failover automático.
Decida quais componentes, serviços ou regiões estão no escopo do teste. O escopo pode incluir camadas de aplicativos específicas, como front-end, back-end e banco de dados, ou recursos específicos do Google Cloud , como instâncias do Cloud SQL ou clusters do GKE. O escopo também precisa especificar dependências externas, como APIs de terceiros ou interconexões de nuvem.
Preparar o ambiente para testes
Escolha um ambiente adequado, de preferência de preparo ou sandbox, que replique sua configuração de produção. Se você fizer o teste em produção, tenha medidas de segurança prontas, como monitoramento automatizado e procedimentos manuais de rollback.
Crie um plano de backup. Faça snapshots ou backups de bancos de dados e serviços críticos para evitar a perda de dados durante o teste. Verifique se sua equipe está preparada para fazer intervenções manuais se os mecanismos de failover automatizados falharem.
Para evitar interrupções no teste, verifique se as funções e políticas do IAM e as configurações de failover estão configuradas corretamente. Verifique se as permissões necessárias estão em vigor para as ferramentas e scripts de teste.
Informe as partes interessadas, incluindo operações, DevOps e proprietários de aplicativos, sobre o cronograma, o escopo e o possível impacto do teste. Forneça aos stakeholders um cronograma estimado e os comportamentos esperados durante o teste.
Simular cenários de falha
Planeje e execute falhas usando ferramentas como o Chaos Monkey. É possível usar scripts personalizados para simular falhas de serviços críticos, como o desligamento de um nó principal em um cluster do GKE multizona ou uma instância do Cloud SQL desativada. Você também pode usar scripts para simular uma interrupção de rede em toda a região usando regras de firewall ou restrições de API com base no escopo do teste. Aumente gradualmente os cenários de falha para observar o comportamento do sistema em várias condições.
Introduza testes de carga junto com cenários de falha para replicar o uso no mundo real durante interrupções. Teste os impactos de falhas em cascata, como o comportamento dos sistemas de front-end quando os serviços de back-end estão indisponíveis.
Para validar mudanças de configuração e avaliar a resiliência do sistema contra erros humanos, teste cenários que envolvam configurações incorretas. Por exemplo, execute testes com configurações de failover de DNS ou permissões de IAM incorretas.
Monitorar o comportamento do sistema
Monitore como os balanceadores de carga, as verificações de integridade e outros mecanismos redirecionam o tráfego. Use ferramentas como o Cloud Monitoring e o Cloud Logging para capturar métricas e eventos durante o teste. Google Cloud
Observe as mudanças na latência, nas taxas de erro e na capacidade durante e após a simulação de falha e monitore o impacto geral na performance. Identifique qualquer degradação ou inconsistência na experiência do usuário.
Verifique se os registros estão sendo gerados e se os alertas estão sendo acionados para eventos importantes, como falhas temporárias do serviço ou failovers. Use esses dados para verificar a eficácia dos seus sistemas de alerta e resposta a incidentes.
Verificar a recuperação em relação ao RTO e ao RPO
Meça quanto tempo leva para o sistema retomar as operações normais após uma falha e compare esses dados com o RTO definido. Documente todas as lacunas.
Verifique se a integridade e a disponibilidade dos dados estão alinhadas ao RPO. Para testar a consistência do banco de dados, compare snapshots ou backups do banco de dados antes e depois de uma falha.
Avalie a restauração do serviço e confirme se todos os serviços foram restaurados para um estado funcional com mínima interrupção para o usuário.
Documentar e analisar os resultados
Documente cada etapa de teste, cenário de falha e comportamento correspondente do sistema. Inclua carimbos de data/hora, registros e métricas para análises detalhadas.
Destaque gargalos, pontos únicos de falha ou comportamentos inesperados observados durante o teste. Para ajudar a priorizar correções, categorize os problemas por gravidade e impacto.
Sugerir melhorias na arquitetura do sistema, nos mecanismos de failover ou nas configurações de monitoramento. Com base nos resultados do teste, atualize as políticas de failover e os playbooks relevantes. Apresentar um relatório de post mortem às partes interessadas. O relatório precisa resumir os resultados, as lições aprendidas e as próximas etapas. Para mais informações, consulte Fazer análises pós-mortem completas.
Iterar e melhorar
Para validar a confiabilidade e a resiliência contínuas, planeje testes periódicos (por exemplo, trimestrais).
Faça testes em diferentes cenários, incluindo mudanças na infraestrutura, atualizações de software e aumento nas cargas de tráfego.
Automatize os testes de failover usando pipelines de CI/CD para integrar testes de confiabilidade ao ciclo de vida de desenvolvimento.
Durante o post-mortem, use o feedback das partes interessadas e dos usuários finais para melhorar o processo de teste e a capacidade de recuperação do sistema.