Esse princípio no pilar de confiabilidade do Framework de arquiteturaGoogle Cloud 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 da confiabilidade de aprendizado.
Visão geral do princípio
Para garantir que o sistema possa se recuperar de falhas, é necessário executar periodicamente testes que incluem failovers regionais, reversão de lançamentos e restauração de dados de backups.
Esse teste ajuda você a praticar respostas a eventos que representam riscos importantes à 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 falhar, você precisa fazer o 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 da 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 no 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 desviar o tráfego de usuários de uma região de maneira manual e eficiente, no menor tempo possível. Essa operação às vezes é chamada de drenar 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 os testes. Por exemplo, seus objetivos podem incluir:
- 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.
- 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 Google Cloud específicos, como instâncias do Cloud SQL ou clusters do GKE. O escopo também precisa especificar todas as 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 as medidas de segurança estão prontas, como monitoramento automatizado e procedimentos de reversão manual.
Crie um plano de backup. Faça 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 fazer intervenções manuais se os mecanismos de failover automático falharem.
Para evitar interrupções no teste, verifique se as funções, as políticas e as 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 os scripts de teste.
Informe as partes interessadas, incluindo operações, DevOps e proprietários de aplicativos, sobre a programação, o escopo e o possível impacto 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 o Chaos Monkey. É possível usar scripts personalizados para simular falhas de serviços essenciais, como o desligamento de um nó principal em um cluster do GKE com várias zonas ou uma instância do Cloud SQL desativada. 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 seu escopo de teste. Aumente gradualmente os cenários de falha para observar o comportamento do sistema em várias condições.
Introduza testes de carga com cenários de falha para replicar o uso real durante interrupções. Teste os impactos da falha 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 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 taxa de transferência 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 são gerados e os alertas são acionados para eventos importantes, como falhas temporárias ou failovers. Use esses dados para verificar a eficácia dos sistemas de alerta e resposta a incidentes.
Verificar a recuperação com base no RTO e 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 e documente as diferenças.
Confira se a integridade e a disponibilidade dos dados estão alinhadas ao RPO. Para testar a consistência do banco de dados, compare os 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 a menor interrupção possível para o usuário.
Documentar e analisar os 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 priorizar as 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 nas descobertas do teste, atualize as políticas de failover e os playbooks 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 análises pós-ocorrência detalhadas.
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 mudanças de infraestrutura, atualizações de software e aumento de 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 a análise pós-ocorrência, use o feedback das partes interessadas e dos usuários finais para melhorar o processo de teste e a resiliência do sistema.