Realizar testes de recuperação de falhas

Esse princípio do pilar de confiabilidade do Google Cloud framework bem arquitetado (em inglês) oferece recomendações para ajudar a projetar e executar testes de recuperação em caso de falhas.

Esse princípio é relevante para o aprendizado área de foco de confiabilidade.

Visão geral do princípio

Para garantir que o sistema possa se recuperar de falhas, execute testes periódicos que incluem failovers regionais, reversões 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 cair, é 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 são sempre muito recentes para que os usuários não tenham perda de dados ou interrupção de sessão. O sistema de balanceamento de carga também precisa ser capaz de transferir o tráfego para a região de failover a qualquer momento sem interrupções de serviço. Para minimizar a inatividade após uma interrupção regional, os engenheiros de operações também precisam ser capazes de deslocar o tráfego do usuário de maneira manual e eficiente para longe de uma região, no menor tempo possível. Essa operação às vezes é chamada de drenagem de uma região, o que significa que você interrompe o tráfego de entrada na região e move 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:

  • 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 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 aplicativo específicas, como front-end, back-end e banco de dados, ou pode incluir recursos Google Cloud específicos, como instâncias do Cloud SQL ou clusters do GKE. O escopo também precisa especificar dependências externas, como APIs de terceiros ou Cloud Interconnects.

Preparar o ambiente para testes

Escolha um ambiente apropriado, de preferência um ambiente de preparação ou sandbox que replique sua 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 manuais de reversão.

Criar um plano de backup. Crie snapshots ou backups de bancos de dados e serviços essenciais para evitar a perda de dados durante o teste. Garanta que sua equipe esteja preparada para realizar intervenções manuais se os mecanismos de failover automatizados falharem.

Para evitar interrupções no teste, verifique se os papéis, as políticas e as configurações de failover do IAM estão definidos corretamente. Verifique se as permissões necessárias estão em vigor para as ferramentas e scripts de teste.

Informe as partes interessadas, incluindo proprietários de aplicativos, operações e DevOps, sobre o cronograma, o escopo e o possível impacto do teste. Forneça às partes interessadas um cronograma estimado e os comportamentos esperados durante o teste.

Simule 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 encerramento de um nó primário 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.

Introduzir o teste de carga com cenários de falha para replicar o uso real durante interrupções. Teste os impactos de falha em cascata, por exemplo, o comportamento dos sistemas de front-end quando os serviços de back-end estão indisponíveis.

Para validar as alterações 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 incorretas de failover de DNS ou permissões de IAM incorretas.

Monitorar o comportamento do sistema

Monitore como balanceadores de carga, verificações de integridade e outros mecanismos redirecionam o tráfego. Use ferramentas Google Cloud , como o Cloud Monitoring e o Cloud Logging, para capturar métricas e eventos durante o teste.

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

Garanta que os registros sejam gerados e que os alertas sejam acionados para eventos principais, como falhas temporárias ou failovers de serviço. 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 leva para o sistema retomar as operações normais após uma falha, compare esses dados com o RTO definido e documente as lacunas.

Garantir que a integridade e a disponibilidade dos dados estejam 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 são restaurados para um estado funcional com interrupção mínima para os usuários.

Documentar e analisar resultados

Documente cada etapa do 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 priorizar as correções, classifique os problemas por gravidade e impacto.

Sugira melhorias para a arquitetura do sistema, mecanismos de failover ou configurações de monitoramento. Com base nas descobertas do teste, atualize as políticas e os manuais de failover relevantes. Apresentar um relatório post-mortem às partes interessadas. O relatório deve resumir os resultados, as lições aprendidas e as próximas etapas. Para mais informações, consulte Realizar análises post-mortem completas.

Iterar e melhorar

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

Execute testes em diferentes cenários, incluindo alterações de infraestrutura, atualizações de software e aumento das cargas de tráfego.

Automatize testes de failover usando pipelines de CI/CD para integrar testes de confiabilidade ao seu ciclo de vida de desenvolvimento.

Durante a análise 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.