Partilhar via


Recomendações para a conceção de uma estratégia de teste de fiabilidade

Aplica-se a esta recomendação da lista de verificação de Fiabilidade 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 suas estratégias normais de implementação e dimensionamento de degradação sejam eficazes, executando mau funcionamento ativo e testes de carga simulados.

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

Definições

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

Principais estratégias de design

Preparação para a fiabilidade dos ensaios

  • Execute testes rotineiramente para validar limites, metas e suposições existentes. Quando ocorrer uma grande alteração na sua carga de trabalho, execute testes regulares. Execute a maioria dos testes em ambientes de teste e preparação. 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 os testes para ajudar a garantir uma cobertura e reprodutibilidade consistentes dos testes. Automatize tarefas de teste comuns e integre-as em seus processos de compilação. Testar manualmente o software é tedioso e suscetível a erros, mas você pode realizar testes exploratórios manuais. Para os 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 realizar testes de resiliência e disponibilidade no início do ciclo de desenvolvimento.

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

  • Compartilhe os resultados documentados com as equipes apropriadas, como equipes operacionais, liderança de tecnologia, partes interessadas de negócios e partes interessadas em recuperação de desastres. Os resultados devem informar o refinamento das metas de confiabilidade, como SLOs (Service Level Objetives, objetivos de nível de serviço), SLAs (Service Level Agreements, contratos de nível de serviço), RTOs (Recovery Time Objetives, objetivos de tempo de recuperação) e RPOs (Recovery Point Objetives, 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 sejam funcionais.

  • Documente e compartilhe métricas de tempo de recuperação com as partes interessadas em recuperação de desastres 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 sua carga de trabalho para resistir a falhas transitórias. Para obter mais informações, consulte Recomendações para lidar com falhas transitórias.

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

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

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

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

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

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

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

Manutenção planeada

Quando tiver planeado janelas de manutenção para atualizações ou patches, pode 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 colocá-la completamente offline. Se tiver tempo suficiente durante a janela de manutenção, também pode testar os componentes e fluxos envolvidos na manutenção após a conclusão do trabalho de manutenção.

Interrupção não planeada

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, resolver 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, certifique-se de que suas medidas de mitigação possam lidar com a carga esperada testando-a exaustivamente. Certifique-se de ter configurado monitoramento suficiente para cobrir suas medidas de mitigação.

  • Se aplicável, procure o mesmo problema ou pontos fracos de configuração que possam ser afetados por problemas semelhantes, em todos os componentes da sua carga de trabalho. Use esta oportunidade para abordar proativamente esses componentes. Consulte seu histórico de incidentes para detetar padrões de problemas semelhantes em toda a sua carga de trabalho.

  • Use suas descobertas para melhorar sua estratégia de teste. Certifique-se de ter resolvido com êxito a causa raiz e problemas semelhantes testando diretamente a mesma falha.

Use injeção de falhas e engenharia de caos

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

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

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

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

  • Identifique e resolva pontos únicos de falha com antecedência. Ao testar, consulte e atualize sua análise de modo de falha para validar e corrigir 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 guarda-corpos e mitigação graciosa. 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 permitam a continuidade dos negócios durante falhas.

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

  • Construir imunidade. Use experimentos de engenharia do caos para melhorar a capacidade da sua carga de trabalho de prevenir 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 um objetivo claro, como testar a capacidade de um determinado fluxo de suportar a perda de um componente específico.
  2. Meça o comportamento da linha de base. Certifique-se de ter 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 o experimento.
  3. Injete uma falha ou falhas. O experimento deve visar 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 telemetria sobre os componentes de fluxo individuais e o comportamento de fluxo de ponta a ponta que o experimento visa para entender corretamente os efeitos da falha. Compare as métricas coletadas com as métricas da linha de base para obter uma imagem completa dos resultados da injeção de falhas.
  5. Documentar 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. Identificar e agir de acordo com o resultado. Planeje as etapas de correção que podem ser adicionadas à sua lista de pendências de carga de trabalho como melhorias. Certifique-se de que os planos de melhoria de projeto sejam revisados e testados em ambientes que não sejam de produção de acordo com os mesmos processos de outras implantações.

Valide periodicamente seu processo, escolhas de arquitetura e código para detetar rapidamente dívidas técnicas, integrar novas tecnologias e adaptar-se às mudanças nos requisitos.

Quando você conduz experimentos de injeção de falhas, você:

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

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

  • Desafiar os pressupostos do sistema. Com os testes, 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ê assume serem confiáveis com base em experiências passadas. Eles podem não ser confiáveis em sua nova carga de trabalho.

  • Valide as alterações, 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 sua carga de trabalho depois que as alterações forem feitas. Por exemplo, você pode introduzir inadvertidamente novas dependências ou quebrar dependências existentes de maneiras que não são imediatamente aparentes.

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

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

  • Pare o experimento se ele for além do escopo. Resultados desconhecidos são um resultado esperado de experimentos de caos. Esforce-se para alcançar o equilíbrio entre a coleta de dados de resultados 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 um 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 reveladas por meio de testes de caos.

  • Ajuste os planos de recuperação conforme necessário para levar em conta as dependências descobertas durante os testes 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 visar esses comportamentos diretamente e dar-lhe a oportunidade de projetar estratégias de correção para eles.

Compensação: os testes de injeção de falhas na produção podem causar interrupções e potencialmente causar tempo de inatividade. Seja transparente com as partes interessadas sobre essa possibilidade e certifique-se de que você tenha salvaguardas em vigor para encerrar experimentos e reverter planos para reverter rapidamente as falhas que você introduzir. Para se proteger contra interrupções não intencionais na produção, certifique-se de planejar redundância suficiente e que as partes interessadas entendam a compensação de custo.

Facilitação do Azure

Os Planos de Teste do Azure são uma solução de gerenciamento de teste baseada em navegador fácil de usar que fornece todos os recursos necessários para testes manuais planejados, testes de aceitação do usuário, testes exploratórios e coleta de feedback das partes interessadas.

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

Lista de verificação de fiabilidade

Consulte o conjunto completo de recomendações.