Compartilhar via


Estratégias de arquitetura 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. Certifique-se de 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 concentra-se 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 do caos.

Definições

Prazo Definition
Disponibilidade A quantidade de tempo que uma carga de trabalho de aplicativo executa em um estado íntegro sem tempo de inatividade significativo.
Engenharia do caos A prática de submeter aplicativos e serviços a estresses e falhas do mundo real. O objetivo da engenharia do 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 A capacidade de restaurar operações normais após uma interrupção, dentro dos tempos de recuperação acordados (RTO) e dos pontos de recuperação acordados (RPO).
Resiliency A capacidade de uma carga de trabalho de suportar falhas (erros transitórios, interrupções de infraestrutura, picos de demanda) e continuar operando dentro de uma experiência aceitável do usuário.

Testar a preparação para confiabilidade

  • Execute 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 comuns de teste 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 testes manuais 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 destinos 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 suportar falhas transitórias. Para obter mais informações, confira Recomendações para tratamento de 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 auto-recuperação e autopreservação responde a defeitos. 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, 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, 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.

Usar a injeção de falhas e a engenharia do 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 componente. Execute testes de injeção de falhas 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 prever falhas realizando experimentos de caos para descobrir e corrigir problemas antes que eles afetem seu ambiente de produção.

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

  • Quebre 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 de modo de falha para validar e resolver falhas na 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 guardrails e 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 da 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 o mínimo de efeito sobre seus clientes.

  • Crie imunidade. Use experimentos de engenharia do 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. Medir o comportamento da linha de base. Verifique se você tem métricas de desempenho e confiabilidade consistentes para o fluxo e os componentes envolvidos em um determinado experimento para comparar com o estado degradado ao executar seu experimento.
  3. Injetar 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 sobre o resultado. Planeje as etapas de correção que podem ser adicionadas à sua pendência de 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 de alteração.

Ao realizar experimentos de injeção de falhas, 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:

  • Desafiar suposiçõ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ê supõ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 os testes de caos para permanecer em seus SLAs e evitar possíveis efeitos financeiros ou de reputação 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 de experimentos de caos. Esforce-se para obter o equilíbrio entre coletar 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 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 comportamentos inesperados surgem, 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 as partes interessadas 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, verifique se você planeja redundância suficiente e que seus stakeholders entendam a compensação de custos.

Facilitação do Azure

Os Planos de Teste do Azure são 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 ajudá-lo a medir, entender e melhorar sua 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.

O monitor de conexão é um recurso do Observador de Rede do Azure que você pode usar para monitoramento sintético e teste em tempo real de conectividade de rede em ambientes híbridos e do Azure. Em cenários de engenharia de caos, o monitor de conexão pode ser usado para injetar falhas em componentes de rede direcionados e medir continuamente as principais métricas, como latência e perda de pacotes. Essa funcionalidade permite que as equipes observem como as interrupções afetam a confiabilidade da rede, tanto para componentes de fluxo individuais quanto entre caminhos de rede de ponta a ponta. Para avaliar o impacto das falhas e identificar áreas de melhoria, compare a telemetria do monitor de conexão com as métricas de linha de base.

Lista de verificação de confiabilidade

Consulte o conjunto completo de recomendações.