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.