Recomendações para criar uma estratégia de teste de confiabilidade

Aplica-se a esta recomendação de lista de verificação de confiabilidade do Azure Well-Architected Framework:

RE:08 Teste cenários de resiliência e disponibilidade aplicando os princípios da engenharia do caos em seus ambientes de teste e produção. Use o teste para garantir que sua implementação de degradação normal e estratégias de dimensionamento sejam eficazes executando o mau funcionamento ativo e o teste de carga simulado.

Este guia descreve as recomendações para criar uma estratégia de teste de confiabilidade para validar e otimizar a confiabilidade da carga de trabalho. O teste de confiabilidade se concentra na resiliência e disponibilidade de sua carga de trabalho, especificamente os fluxos críticos que você identifica ao projetar sua solução. Este guia fornece diretrizes gerais de teste e diretrizes específicas para a injeção de falhas e a engenharia de caos.

Definições

Termo Definição
Disponibilidade A quantidade de tempo que uma carga de trabalho de aplicativo executa em um estado íntegro sem tempo de inatividade significativo.
Engenharia de caos A prática de submeter aplicativos e serviços a estresses e falhas do mundo real. O objetivo da engenharia de caos é criar e validar a resiliência a condições não confiáveis e dependências ausentes.
Injeção de falha O ato de introduzir um erro em um sistema para testar a resiliência do sistema.
Capacidade de recuperação Um sinônimo de resiliência.
Resiliência A capacidade de uma carga de trabalho de aplicativo de resistir e se recuperar de modos de falha.

Principais estratégias de design

Diretrizes gerais de teste

  • Executar testes rotineiramente para validar limites, destinos e suposições existentes. Quando ocorrer uma grande alteração na carga de trabalho, execute testes regulares. Execute a maioria dos testes em ambientes de teste e preparo. Também é benéfico executar um subconjunto de testes no sistema de produção. Planeje uma paridade um-para-um dos principais ambientes de teste com o ambiente de produção.

  • Automatize o teste para ajudar a garantir a cobertura de teste consistente e a reprodutibilidade. Automatize tarefas de teste comuns e integre-as aos processos de build. O teste manual de software é entediante e suscetível a erros, mas você pode realizar testes exploratórios manuais. Para casos em que você precisa desenvolver testes automatizados, use o teste manual para determinar o escopo dos testes a serem desenvolvidos.

  • Adote uma abordagem de teste shift-left para executar testes de resiliência e disponibilidade no início do ciclo de desenvolvimento.

  • Adapte um formato de documentação simples, portanto, é fácil para todos entenderem o processo e os resultados de cada teste regular.

  • Compartilhe os resultados documentados com as equipes apropriadas, como equipes operacionais, liderança tecnológica, stakeholders de negócios e stakeholders de recuperação de desastres. Os resultados devem informar o refinamento de metas de confiabilidade, como SLOs (objetivos de nível de serviço), SLAs (contratos de nível de serviço), RTOs (objetivos de tempo de recuperação) e RPOs (objetivos de ponto de recuperação).

  • Crie uma cadência de teste regular para seus backups. Restaure os dados em sistemas isolados para ajudar a garantir que os backups sejam válidos e que as restaurações estejam funcionais.

  • Documente e compartilhe métricas de tempo de recuperação com seus stakeholders de recuperação de desastre para garantir que as expectativas de recuperação sejam apropriadas.

  • Use procedimentos de teste de implantação padrão do setor para ajudar a garantir que você tenha um processo de implantação automatizado, previsível e eficiente.

  • Teste a capacidade da carga de trabalho de resistir a falhas transitórias. Para obter mais informações, consulte Recomendações para lidar com falhas transitórias.

  • Teste a capacidade da carga de trabalho de responder a alterações nos padrões de carga e picos de uso. Use essas informações para ajudá-lo a testar sua estratégia de dimensionamento. Para obter informações sobre testes de carga e estresse, consulte Recomendações para teste.

  • Teste como sua carga de trabalho lida com falhas em serviços dependentes ou outras dependências usando a injeção de falha.

  • Teste e valide como seu design de autorrecuperação e autopreservação responde a mau funcionamento. Teste operações de recuperação automatizadas e manuais.

  • Teste seu plano de recuperação de desastre para responder a falhas catastróficas e outros incidentes importantes.

  • Teste a capacidade da carga de trabalho de degradar normalmente e minimizar o raio de explosão do mau funcionamento do componente usando a injeção de falha.

Aproveitar as interrupções planejadas e não planejadas

Quando sua carga de trabalho está offline devido à manutenção planejada ou a uma interrupção não planejada, você tem uma oportunidade exclusiva de executar testes e melhorar sua compreensão da carga de trabalho. As seções a seguir fornecem recomendações para cada cenário.

Manutenção planejada

Quando você tiver janelas de manutenção planejadas para atualizações ou patches, poderá testar componentes e fluxos que não estão envolvidos no trabalho de manutenção. Execute testes sem o risco potencial de degradar inesperadamente a carga de trabalho ou tirá-la totalmente offline. Se você tiver tempo suficiente durante a janela de manutenção, também poderá testar os componentes e fluxos envolvidos na manutenção após a conclusão do trabalho de manutenção.

Interrupção não planejada

Use cada incidente de interrupção como uma oportunidade para saber mais sobre sua carga de trabalho e melhorar sua resiliência seguindo estas etapas, ordenadas por prioridade:

  • Coloque a carga de trabalho online novamente para seus clientes. Para fazer isso, você pode executar uma solução alternativa para o problema, resolve o problema ou iniciar os processos de recuperação.

  • Determine a causa raiz da interrupção e resolva-a. Se você puder corrigir a causa raiz como parte da investigação, documente a causa raiz e as medidas que você tomou para corrigi-la. Se o problema exigir uma janela de manutenção adicional posteriormente, verifique se as medidas de mitigação podem lidar com a carga esperada testando-a minuciosamente. Verifique se você configurou monitoramento suficiente para cobrir suas medidas de mitigação.

  • Se aplicável, procure o mesmo problema ou as fraquezas de configuração que podem ser afetadas por problemas semelhantes em todos os componentes da carga de trabalho. Use essa oportunidade para abordar proativamente esses componentes. Consulte o histórico de incidentes para detectar padrões de problemas semelhantes em sua carga de trabalho.

  • Use suas descobertas para melhorar sua estratégia de teste. Verifique se você abordou com êxito a causa raiz e problemas semelhantes testando diretamente a mesma falha.

Diretrizes de engenharia de caos e injeção de falhas

O teste de injeção de falha segue os princípios da engenharia de caos, destacando a capacidade da carga de trabalho de reagir a falhas de componente. Execute testes de injeção de falha em ambientes de pré-produção e produção. Aplicar testes a camadas de infraestrutura e aplicativo. Aplique as informações que você aprendeu Recomendações para executar a análise do modo de falha para garantir que você teste apenas falhas priorizadas e que tenha estratégias de mitigação que resolvam falhas. As principais diretrizes da engenharia do caos são:

  • Seja proativo. Não espere que falhas aconteçam. Tente antecipar falhas realizando experimentos de caos para descobrir e corrigir problemas antes que eles afetem seu ambiente de produção.

  • Aceite a falha. Aceite e aprenda com as falhas que ocorrem em seu sistema. Veja as falhas como uma parte natural de sistemas complexos e use-as como oportunidades para aprender e melhorar a confiabilidade do sistema.

  • Interrompa o sistema. Injete deliberadamente falhas ou estresse em seu sistema para testar sua resiliência. Simule falhas ou interrupções do mundo real para testar e melhorar os recursos de recuperação da carga de trabalho.

  • Identifique e resolva pontos únicos de falha antecipadamente. Ao testar, consulte e atualize sua análise do modo de falha para validar e resolver falhas em sua documentação. Aplique abordagens de confiabilidade, como redundância e segmentação, para aumentar a disponibilidade da carga de trabalho e minimizar o tempo de inatividade.

  • Instale verificadores de integridade e a mitigação normal. Implemente medidas de segurança, como o padrão disjuntor ou o padrão de limitação, para aumentar a disponibilidade. Implemente abordagens de degradação normal que permitem a continuidade dos negócios durante falhas.

  • Minimize o raio de explosão. Implemente estratégias de isolamento de falhas para ajudar a garantir que, mesmo que ocorra uma falha, seu escopo seja limitado. O sistema continua funcionando com efeito mínimo em seus clientes.

  • Crie imunidade. Use experimentos de engenharia de caos para melhorar a capacidade da carga de trabalho de evitar e se recuperar de falhas.

A engenharia do caos é parte integrante da cultura da equipe de carga de trabalho e uma prática contínua, não um esforço tático de curto prazo em resposta a uma única interrupção. Siga este método padrão ao projetar seus experimentos de caos:

  1. Comece com uma hipótese. Cada experimento deve ter uma meta clara, como testar a capacidade de um determinado fluxo de suportar a perda de um componente específico.
  2. Mensure o comportamento de linha de base. Verifique se você tem métricas consistentes de confiabilidade e desempenho para o fluxo e os componentes envolvidos em um determinado experimento para comparar com o estado degradado ao executar seu experimento.
  3. Injete uma falha ou falhas. O experimento deve direcionar intencionalmente componentes específicos que podem ser recuperados rapidamente e você deve ter uma expectativa informada do efeito que a injeção de falha causará para ajudar a controlar o raio de explosão do experimento.
  4. Monitore o comportamento resultante. Reúna a telemetria sobre os componentes de fluxo individuais e o comportamento de fluxo de ponta a ponta que o experimento tem como destino para entender corretamente os efeitos da falha. Compare as métricas coletadas com as métricas de linha de base para obter uma imagem completa dos resultados da injeção de falha.
  5. Documente o processo e as observações. Manter registros detalhados de seus experimentos informará as decisões futuras sobre o design da carga de trabalho, garantindo que você resolva as lacunas que foram reveladas ao longo do tempo.
  6. Identifique e aja de acordo com o resultado. Planeje as etapas de correção que podem ser adicionadas à lista de pendências da carga de trabalho como melhorias. Verifique se os planos de melhoria de design são revisados e testados em ambientes de não produção de acordo com os mesmos processos que outras implantações.

Valide periodicamente seu processo, as opções de arquitetura e o código para detectar rapidamente a dívida técnica, integrar novas tecnologias e adaptar-se aos requisitos em mudança.

Ao realizar experimentos de injeção de falha, você:

  • Confirme se o monitoramento está em vigor e se os alertas estão configurados.
  • Valide o processo de atribuição de um indivíduo diretamente responsável (DRI) para assumir a propriedade de um incidente.
  • Verifique se a documentação e os processos de investigação estão atualizados.

Integre as seguintes recomendações e considerações para otimizar sua estratégia de teste de caos:

  • Questione as pressuposições do sistema. Com o teste, você tenta melhorar a resiliência de sua carga de trabalho e suas estratégias de design de carga de trabalho. Procure oportunidades para injetar falhas em componentes e fluxos que você pressupõe serem confiáveis com base em experiências passadas. Eles podem não ser confiáveis em sua nova carga de trabalho.

  • Valide a alteração, como a topologia, a plataforma e os recursos. Sem testes completos, incluindo testes de injeção de falhas, você pode ter uma imagem incompleta da carga de trabalho depois que as alterações forem feitas. Por exemplo, você pode introduzir inadvertidamente novas dependências ou dependências existentes interrompidas de maneiras que não são imediatamente aparentes.

  • Use buffers SLA. Limite o teste de caos para permanecer dentro de seus SLAs e evitar possíveis reputação ou efeitos financeiros de interrupções. Seus destinos de recuperação de fluxo e componente ajudam a definir o escopo do teste.

  • Estabeleça um orçamento de erro como um investimento em caos e injeção de falhas. Seu orçamento de erro é a diferença entre alcançar 100% do SLO e alcançar o SLO acordado.

  • Interrompa o experimento se ele for além do escopo. Resultados desconhecidos são um resultado esperado dos experimentos de caos. Busque alcançar o equilíbrio entre coletar dados de resultado substanciais e afetar o menor número possível de usuários de produção.

  • Trabalhe em estreita colaboração com as equipes de desenvolvimento para garantir a relevância das falhas injetadas. Use incidentes ou problemas anteriores como guia. Examine as dependências e avalie os resultados ao remover essas dependências.

  • Identifique e documente dependências não descobertas anteriormente entre diferentes componentes em sua carga de trabalho que são revelados por meio de testes de caos.

  • Ajuste os planos de recuperação conforme necessário para considerar as dependências descobertas durante o teste de caos.

  • Use os resultados de seus experimentos e testes como base para novos experimentos e testes. À medida que surgem comportamentos inesperados, novos testes podem direcionar esses comportamentos diretamente e dar a você a oportunidade de criar estratégias de correção para eles.

Compensação: o teste de injeção de falhas na produção pode causar interrupções e pode causar tempo de inatividade. Seja transparente com os stakeholders sobre essa possibilidade e verifique se você tem proteções em vigor para encerrar experimentos e reverter planos para reverter rapidamente as falhas que você introduz. Para se proteger contra interrupções não intencionais na produção, certifique-se de planejar redundância suficiente e que seus stakeholders entendam a compensação de custos.

Facilitação do Azure

Azure Test Plans é uma solução de gerenciamento de teste fácil de usar baseada em navegador que fornece todos os recursos necessários para testes manuais planejados, testes de aceitação do usuário, testes exploratórios e coleta de comentários dos stakeholders.

O Azure Chaos Studio é um serviço gerenciado que usa a engenharia do caos para ajudar você a avaliar, entender e melhorar a resiliência de aplicativos e serviços de nuvem. O Azure Chaos Studio atingiu a disponibilidade geral no Ignite 2023 e tem muitos recursos para ajudá-lo a começar a usar testes de resiliência e injeção de falha para seu aplicativo usando a infraestrutura do Azure.

Lista de verificação de confiabilidade

Consulte o conjunto completo de recomendações.