Realização de testes de recuperação de falhas

Last reviewed 2024-12-30 UTC

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 aprendizado da confiabilidade.

Visão geral do princípio

Para garantir que o sistema possa se recuperar de falhas, é necessário executar testes periodicamente, incluindo failovers regionais, rollbacks de versões e restauração de dados de backups.

Esse teste ajuda 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 carga de trabalho, quando os dados são modificados, eles precisam ser sincronizados da região principal para a região de failover. É necessário verificar se os dados replicados estão sempre muito recentes 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 ser capaz de mudar o tráfego para a região de failover a qualquer momento, sem interrupções de serviço. Para minimizar o tempo de inatividade após uma interrupção regional, os engenheiros de operações também precisam ser capazes de mudar o tráfego do usuário de uma região de maneira manual e eficiente, no menor tempo possível. Essa operação é às vezes chamada de drenagem 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 de 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:

  • Validar o objetivo de tempo de recuperação (RTO) e o objetivo de ponto de recuperação (RPO). Para mais detalhes, consulte Noções básicas do planejamento de DR.
  • Avaliar a resiliência do sistema e a tolerância a falhas em vários cenários de falha.
  • Testar a eficácia dos mecanismos de failover automatizados.

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, como Google Cloud 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 um ambiente de preparo ou sandbox que replique a configuração de produção. Se você realizar o teste na produção, verifique se tem medidas de segurança prontas, como monitoramento automatizado e procedimentos de rollback manual.

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 caso os mecanismos de failover automatizados falhem.

Para evitar interrupções de teste, verifique se as funções, políticas e configurações de failover do IAM 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 a programação, o escopo e o impacto potencial do teste. Forneça às partes interessadas um cronograma estimado e os comportamentos esperados durante o teste.

Simular cenários de falha

Planeje e execute falhas usando ferramentas como 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 de várias zonas ou uma instância desativada do Cloud SQL. Também é possível 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 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 as mudanças de configuração e avaliar a resiliência do sistema contra erros humanos, teste cenários que envolvem configurações incorretas. Por exemplo, execute testes com configurações de failover de DNS incorretas ou permissões do 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 Google Cloud ferramentas como o Cloud Monitoring e o Cloud Logging para capturar métricas e eventos durante o teste.

Observe as mudanças na latência, nas taxas de erro e na capacidade de processamento durante e após a simulação de falha e monitore o impacto geral no desempenho. Identifique qualquer degradação ou inconsistência na experiência do usuário.

Verifique se os registros são gerados e os alertas são acionados para eventos importantes, como interrupções de serviço ou failovers. Use esses dados para verificar a eficácia dos sistemas de alerta e resposta a incidentes.

Verificar a recuperação em relação ao RTO e ao RPO

Meça quanto tempo o sistema leva para retomar as operações normais após uma falha e compare esses dados com o RTO definido e documente as lacunas.

Verifique se a integridade de dados e a disponibilidade 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 interrupção mínima do usuário.

Documentar e analisar resultados

Documente cada etapa do teste, cenário de falha e comportamento do sistema correspondente. 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.

Sugira 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 e os playbooks de failover relevantes. Apresente um relatório 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 Realizar post mortems completos.

Faça iterações e melhore

Para validar a confiabilidade e a resiliência contínuas, planeje testes periódicos (por exemplo, trimestrais).

Execute testes em diferentes cenários, incluindo mudanças de infraestrutura, atualizações de software e aumento das 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 resiliência do sistema.