Recomendações para conceber uma estratégia de teste de fiabilidade

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

RE:08 Teste cenários de resiliência e disponibilidade ao aplicar os princípios da engenharia do caos nos seus ambientes de teste e produção. Utilize os testes para garantir que a implementação e as estratégias de dimensionamento de degradação corretas são eficazes ao realizar um mau funcionamento ativo e testes de carga simulados.

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

Definições

Termo Definição
Disponibilidade A quantidade de tempo que uma carga de trabalho da aplicação é executada num estado de bom estado de funcionamento sem períodos de indisponibilidade significativos.
Engenharia do caos A prática de submeter aplicações e serviços a stresses e falhas do mundo real. O objetivo da engenharia do caos é construir e validar a resiliência a condições pouco fiáveis e dependências em falta.
Injeção de falhas O ato de introduzir um erro num 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 aplicação suportar e recuperar de modos de falha.

Principais estratégias de design

Documentação de orientação para testes gerais

  • Execute regularmente testes para validar limiares, destinos e pressupostos existentes. Quando ocorrer uma alteração importante na carga de trabalho, execute testes regulares. Efetue a maioria dos testes em ambientes de teste e teste. Também é benéfico executar um subconjunto de testes no sistema de produção. Planeie 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 de teste consistente e a reprodutibilidade. Automatize tarefas de teste comuns e integre-as nos processos de compilação. Testar manualmente software é entediante e suscetível a erros, mas pode realizar testes exploratórios manuais. Para casos em que precisa de desenvolver testes automatizados, utilize testes manuais para determinar o âmbito dos testes a desenvolver.

  • 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, pelo que é fácil para todos compreender o processo e os resultados de todos os testes regulares.

  • Partilhe os resultados documentados com as equipas adequadas, como equipas operacionais, liderança tecnológica, intervenientes empresariais e intervenientes na recuperação após desastre. Os resultados devem informar o refinamento dos destinos de fiabilidade, tais como objetivos de nível de serviço (SLOs), contratos de nível de serviço (SLAs), objetivos de tempo de recuperação (RTOs) e objetivos de ponto de recuperação (RPOs).

  • Crie uma cadência de teste regular para as suas cópias de segurança. Restaure os dados para sistemas isolados para ajudar a garantir que as cópias de segurança são válidas e que os restauros estão funcionais.

  • Documente e partilhe métricas de tempo de recuperação com os intervenientes da recuperação após desastre para garantir que as expectativas de recuperação são adequadas.

  • Utilize os procedimentos de teste de implementação padrão do setor para ajudar a garantir que tem um processo de implementação automatizado, previsível e eficiente.

  • Teste a capacidade da carga de trabalho de suportar falhas transitórias. Para obter mais informações, veja 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 utilização. Utilize estas informações para o ajudar a testar a sua estratégia de dimensionamento. Para obter informações sobre testes de carga e stress, veja Recomendações para testes.

  • Teste a forma como a carga de trabalho lida com falhas em serviços dependentes ou outras dependências através da injeção de falhas.

  • Teste e valide a forma como o seu design de auto-cura e auto-preservação responde a avarias. Testar operações de recuperação automatizadas e manuais.

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

  • Teste a capacidade da carga de trabalho de se degradar corretamente e minimizar o raio de explosão do mau funcionamento do componente através da injeção de falhas.

Tirar partido das interrupções planeadas e não planeadas

Quando a carga de trabalho está offline devido a uma manutenção planeada ou a uma indisponibilidade não planeada, tem uma oportunidade única de realizar testes e melhorar a compreensão da carga de trabalho. As secções seguintes fornecem recomendações para cada cenário.

Manutenção planeada

Quando tiver janelas de manutenção planeada para atualizações ou patches, pode testar componentes e fluxos que não estejam envolvidos no trabalho de manutenção. Execute testes sem o risco potencial de degradar inesperadamente a carga de trabalho ou de a colocar offline. Se tiver tempo suficiente durante a janela de manutenção, também pode testar os componentes e fluxos que estão envolvidos na manutenção após a conclusão do trabalho de manutenção.

Indisponibilidade não planeada

Utilize todos os incidentes de indisponibilidade como uma oportunidade para saber mais sobre a sua carga de trabalho e melhorar a sua resiliência ao seguir estes passos, ordenados por prioridade:

  • Volte a colocar a carga de trabalho online para os seus clientes. Para tal, pode efetuar uma solução para o problema, resolver o problema ou iniciar os processos de recuperação.

  • Determine a causa principal da indisponibilidade e resolva-a. Se conseguir corrigir a causa principal como parte da investigação, documente a causa raiz e as medidas que tomou para a corrigir. Se o problema exigir uma janela de manutenção adicional mais tarde, certifique-se de que as medidas de mitigação conseguem lidar com a carga esperada ao testá-la cuidadosamente. Certifique-se de que configurou monitorização suficiente para cobrir as medidas de mitigação.

  • Se aplicável, procure o mesmo problema ou debilidades de configuração que possam ser afetadas por problemas semelhantes em todos os componentes da carga de trabalho. Utilize esta oportunidade para abordar proativamente esses componentes. Consulte o histórico de incidentes para detetar padrões de problemas semelhantes na carga de trabalho.

  • Utilize as suas conclusões para melhorar a sua estratégia de teste. Certifique-se de que resolveu com êxito a causa raiz e problemas semelhantes ao testar diretamente a mesma falha.

Documentação de orientação para a engenharia de injeção de falhas e caos

Os testes de injeção de falhas seguem os princípios da engenharia do caos ao realçar a capacidade da carga de trabalho de reagir a falhas de componentes. Efetue testes de injeção de falhas em ambientes de pré-produção e produção. Aplicar testes a camadas de infraestrutura e aplicações. Aplique as informações que aprendeu Recomendações para realizar a análise do modo de falha para garantir que testa apenas as falhas que prioriza e que tem estratégias de mitigação que resolvem falhas. As principais diretrizes da engenharia do caos são:

  • Seja proativo. Não espere que ocorram falhas. Tente antecipar falhas ao realizar experiências de caos para detetar e corrigir problemas antes de afetarem o seu ambiente de produção.

  • Abraçar o fracasso. Aceite e aprenda com as falhas que ocorrem no seu sistema. Veja as falhas como uma parte natural de sistemas complexos e utilize-as como oportunidades para aprender e melhorar a fiabilidade do seu sistema.

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

  • Identifique e resolva os pontos únicos de falha mais cedo. À medida que testa, consulta e atualiza a análise do modo de falha para validar e resolver falhas na sua documentação. Aplique abordagens de fiabilidade, como redundância e segmentação, para aumentar a disponibilidade da carga de trabalho e minimizar o tempo de inatividade.

  • Instale proteções e mitigação correta. Implemente medidas de segurança, como o padrão disjuntor automático ou o padrão de Limitação, para aumentar a disponibilidade. Implemente abordagens de degradação corretas que permitem a continuidade do negócio durante as falhas.

  • Minimize o raio da explosão. Implemente estratégias de isolamento de falhas para ajudar a garantir que, mesmo que ocorra uma falha, o âmbito é limitado. O sistema continua a funcionar com um efeito mínimo nos seus clientes.

  • Criar imunidade. Utilize experimentações de engenharia de caos para melhorar a capacidade da carga de trabalho para evitar e recuperar de falhas.

A engenharia do caos é parte integrante da cultura da equipa de carga de trabalho e uma prática contínua, não um esforço táctico a curto prazo em resposta a uma única indisponibilidade. Siga este método padrão quando conceber as suas experiências de caos:

  1. Comece com uma hipótese. Cada experimentação deve ter um objetivo claro, como testar a capacidade de um determinado fluxo suportar a perda de um componente específico.
  2. Medir o comportamento da linha de base. Certifique-se de que tem métricas de fiabilidade e desempenho consistentes para o fluxo e componentes envolvidos numa determinada experimentação para comparar com o estado degradado ao executar a experimentação.
  3. Injetar uma falha ou falhas. A experimentação deve visar intencionalmente componentes específicos que podem ser recuperados rapidamente e deve ter uma expectativa informada do efeito que a injeção de falhas causará para ajudar a controlar o raio de explosão da experimentação.
  4. Monitorize o comportamento resultante. Recolha telemetria sobre os componentes de fluxo individuais e o comportamento do fluxo ponto a ponto que a experimentação visa para compreender corretamente os efeitos da falha. Compare as métricas que recolhe com as métricas de linha de base para obter uma imagem completa dos resultados da injeção de falhas.
  5. Documente o processo e as observações. Manter registos detalhados das suas experimentações irá informar as decisões futuras sobre a estrutura da carga de trabalho, garantindo que resolve as lacunas que foram reveladas ao longo do tempo.
  6. Identifique e aja sobre o resultado. Planeie os passos de remediação que podem ser adicionados ao registo de tarefas pendentes da carga de trabalho como melhorias. Certifique-se de que os planos de melhoramento de design são revistos e testados em ambientes de não produção de acordo com os mesmos processos que outras implementações.

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

Quando realiza experimentações de injeção de falhas, pode:

  • Confirme que a monitorização está em vigor e que 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.
  • Certifique-se de que a documentação e os processos de investigação estão atualizados.

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

  • Desafiar pressupostos do sistema. Com os testes, tenta melhorar a resiliência da carga de trabalho e as estratégias de conceção da carga de trabalho. Procure oportunidades para injetar falhas em componentes e fluxos que assume serem fiáveis com base em experiências passadas. Podem não ser fiáveis na sua nova carga de trabalho.

  • Valide a alteração, como a topologia, a plataforma e os recursos. Sem testes minuciosos, incluindo testes de injeção de falhas, poderá ter uma imagem incompleta da carga de trabalho após as alterações serem efetuadas. Por exemplo, pode introduzir inadvertidamente novas dependências ou dependências existentes quebradas de formas que não são imediatamente aparentes.

  • Utilize memórias intermédias SLA. Limite os testes de caos para se manter dentro dos SLAs e evitar potenciais efeitos financeiros ou de reputação de falhas. Os destinos de recuperação de fluxos e componentes ajudam a definir o âmbito dos testes.

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

  • Pare a experimentação se for além do âmbito. Os resultados desconhecidos são um resultado esperado de experiências de caos. Esforce-se por alcançar o equilíbrio entre recolher dados de resultados substanciais e afetar o menor número possível de utilizadores de produção.

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

  • Identifique e documente dependências anteriormente não descobertas entre diferentes componentes na carga de trabalho que são reveladas através de testes de caos.

  • Ajuste os planos de recuperação conforme necessário para ter em conta as dependências detetadas durante os testes de caos.

  • Utilize os resultados das suas experimentações e testes como base para novas experimentações e testes. À medida que surgem comportamentos inesperados, os novos testes podem direcionar esses comportamentos diretamente e dar-lhe a oportunidade de conceber estratégias de remediação para os mesmos.

Compensação: os testes de injeção de falhas na produção podem ser disruptivos e podem causar potencialmente tempo de inatividade. Seja transparente com os intervenientes sobre esta possibilidade e certifique-se de que tem salvaguardas para terminar as experimentações e reverter os planos para reverter rapidamente as falhas que introduz. Para evitar indisponibilidades não intencionais na produção, certifique-se de que planeia redundância suficiente e que os intervenientes compreendem a compensação de custos.

Facilitação do Azure

Os Planos de Teste do Azure são uma solução de gestão de testes baseada no browser fácil de utilizar que fornece todas as capacidades necessárias para testes manuais planeados, testes de aceitação de utilizadores, testes exploratórios e recolha de feedback dos intervenientes.

O Azure Chaos Studio é um serviço gerido que utiliza a engenharia de caos para o ajudar a medir, compreender e melhorar a resiliência da aplicação na cloud e do serviço. O Azure Chaos Studio atingiu a disponibilidade geral no Ignite 2023 e tem muitas funcionalidades para o ajudar a começar a utilizar a injeção de falhas e testes de resiliência para a sua aplicação com a infraestrutura do Azure.

Lista de verificação de fiabilidade

Veja o conjunto completo de recomendações.