Recomendações para projetar uma estratégia de teste de confiabilidade
Aplica-se a esta recomendação da 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 testes para garantir que suas estratégias de implementação e dimensionamento de degradação sejam eficazes, executando o mau funcionamento ativo e o teste de carga simulado. |
---|
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. O teste de confiabilidade foca na resiliência e na disponibilidade da 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 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 de caos | A prática de submeter aplicativos e serviços a tensões 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 | 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
Preparação para a confiabilidade do teste
Execute testes rotineiramente para validar limites, metas 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 é útil executar um subconjunto de testes no sistema de produção. Planeje uma paridade de um para um dos principais ambientes de teste com o ambiente de produção.
Automatize os testes para ajudar a garantir cobertura e reprodutibilidade consistentes dos testes. Automatize tarefas de teste comuns e integre-as aos processos de build. Testar manualmente o software é tedioso 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, para que seja 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 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 (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 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 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 escalabilidade. 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 autocorreção e autopreservação responde a falhas de funcionamento. Teste as 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 graves.
Teste a capacidade de sua carga de trabalho de degradar normalmente e minimizar o raio de explosão do mau funcionamento do componente usando 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 de sua 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. Realize testes sem o risco potencial de degradar inesperadamente a carga de trabalho ou colocá-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, resolvê-lo 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 completamente. 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 carga de trabalho. Use esta oportunidade para abordar proativamente esses componentes. Consulte seu 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. 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 às 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 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.
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 seu 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 de 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 de disjuntor ou o padrão de limitação, para aumentar a disponibilidade. Implemente abordagens de degradação graciosas que permitam 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 a funcionar com efeito mínimo sobre seus clientes.
Crie imunidade. Use experimentos de engenharia de caos para melhorar a capacidade da 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:
- 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.
- Mensure o comportamento de 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 seu experimento.
- 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.
- 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 adequadamente 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 falhas.
- 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.
- 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. Certifique-se de que os planos de melhoria de design sejam revisados e testados em ambientes de não produção de acordo com os mesmos processos de outras implantações.
Valide periodicamente seu processo, opções de arquitetura e código para detectar rapidamente dívidas técnicas, integrar novas tecnologias e adaptar-se às mudanças nos requisitos.
Ao realizar experimentos de injeção de falhas, você:
- Confirme se o monitoramento está em vigor e se os alertas estão configurados.
- Valide seu processo de atribuição de um indivíduo diretamente responsável (DRI) para assumir a propriedade 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:
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ê 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 de sua carga de trabalho depois que as alterações forem feitas. Por exemplo, você pode inadvertidamente introduzir novas dependências ou quebrar dependências existentes de maneiras que não são imediatamente aparentes.
Use buffers de SLA. Limite o teste 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 componente ajudam a definir o escopo de seus testes.
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 atingir 100% do SLO e atingir o SLO acordado.
Pare 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 removê-las.
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 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 ser disruptivo e pode causar tempo de inatividade. Seja transparente com as partes interessadas sobre essa possibilidade e certifique-se de ter salvaguardas para encerrar experimentos e reverter planos para reverter rapidamente as falhas introduzidas. Para se proteger contra interrupções não intencionais na produção, certifique-se de planejar redundância suficiente e de que os participantes entendam a compensação de custos.
Facilitação do Azure
O Azure Test Plans é 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 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 a injeção de falhas e o teste de resiliência para seu aplicativo usando a infraestrutura do Azure.
Links relacionados
- Backup e recuperação de desastre para aplicativos do Azure
- Lista de verificação para testes de confiabilidade
- Testar aplicativos para disponibilidade e resiliência
Lista de verificação de confiabilidade
Consulte o conjunto completo de recomendações.