Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Aplica-se a esta recomendação da lista de verificação de Eficiência de Desempenho do Azure Well-Architected Framework:
| PE:06 | Otimize o desempenho da sua carga de trabalho testando regularmente num ambiente semelhante à produção para garantir que a sua carga atinge as metas de desempenho desejadas e atinge os objetivos do seu negócio. |
|---|
O teste de desempenho é uma prática de teste não funcional utilizada para avaliar como uma carga de trabalho se comporta sob várias condições. Ajuda-o a identificar a degradação de desempenho cedo, a resolver problemas de forma proativa e a garantir o alinhamento contínuo com os acordos de nível de serviço.
Quando mede os tempos de resposta, o rendimento, o uso de recursos e a estabilidade, recolhe provas de que a sua carga de trabalho cumpre consistentemente metas definidas e entrega o nível de desempenho que a sua empresa exige.
As principais estratégias-chave deste artigo baseiam-se nas práticas fundamentais de teste descritas em OE:09 Estratégias de Arquitetura para testes. Recomendamos que revejas esse artigo primeiro. As recomendações deste guia estão orientadas para o desempenho e focam-se em alcançar metas de desempenho para que as suas cargas de trabalho se mantenham alinhadas com os objetivos empresariais em evolução.
A tabela seguinte define os termos-chave de desempenho utilizados ao longo deste artigo.
| Term | Definition |
|---|---|
| Metas de desempenho | Os valores de desempenho específicos que uma carga de trabalho deve cumprir, como o tempo de resposta, a taxa de transferência ou o número de utilizadores em simultâneo. |
| Limiares de desempenho | Os limites que separam o desempenho aceitável do inaceitável para uma determinada métrica. |
| Orçamento de desempenho | A parte de um objetivo global de desempenho atribuída a cada camada ou componente de uma carga de trabalho. |
| Orçamento de erro | O nível permitido de erros ou falhas, derivado dos SLOs. |
| Critérios de aceitação | As condições que um resultado de teste deve cumprir para que a carga de trabalho cumpra os seus requisitos de desempenho. |
| Experimentação orientada por hipóteses | Um método de teste onde se apresenta uma previsão sobre o desempenho, se testa contra uma linha de base e se valida com resultados medidos. |
| Linha base de desempenho | Um conjunto de métricas que representam o comportamento de uma carga de trabalho em condições normais, conforme validado por testes. |
| Transações sintéticas | Pedidos scriptados que simulam interações reais com o utilizador para medir o desempenho do sistema em condições controladas. |
| Regressão de desempenho | Uma queda de desempenho em comparação com uma linha de base estabelecida, introduzida por uma alteração no código, configuração ou infraestrutura. |
| Deriva de desempenho | Um declínio gradual do desempenho ao longo do tempo que passa despercebido sem testes regulares com bases estabelecidas. |
Defina objetivos mensuráveis para os seus testes de desempenho
Metas de desempenho mensuráveis transformam expectativas subjetivas em critérios objetivos que pode testar e validar.
Defina as suas metas de desempenho e atribua orçamentos. Defina e documente metas de desempenho específicas, como o número de utilizadores concorrentes que precisa de suportar. Certifique-se de que estes objetivos estão alinhados com os seus objetivos de nível de serviço (SLOs) e traduz-os em objetivos de teste mensuráveis.
Atribui orçamentos de desempenho e erros em diferentes camadas da tua carga de trabalho. Quando os testes de desempenho falham, os seus orçamentos ajudam-no a identificar qual a camada responsável e onde focar os esforços de otimização. Sem orçamentos, falhar nos testes apenas indica que as metas de desempenho não estão a ser cumpridas, não onde está o problema.
Por exemplo, pode definir orçamentos de 400 ms para o tempo de resposta da API, 150 ms para consultas à base de dados e um limite de 1% para pedidos falhados. Quando um teste falha, pode verificar os resultados de cada camada em relação ao seu orçamento para determinar se o problema são respostas lentas da API, consultas lentas à base de dados ou um pico de erros.
Note
Evite definir SLOs antes de compreender os fluxos de utilizador e os requisitos de desempenho. As SLOs devem basear-se nas necessidades reais dos utilizadores e nos objetivos de negócio, não em metas arbitrárias.
Defina critérios de aceitação com limiares claros de aprovação e reprovação. Baseie os seus critérios de aceitação em métricas de desempenho como latência, tempos de resposta, rendimento, utilização de recursos, taxas de erro e quaisquer outros indicadores de desempenho que estejam alinhados com as suas metas de desempenho.
Defina limiares para cada métrica para que os seus testes produzam resultados claros de aprovação ou reprovação. Se o seu SLO exigir 95% de pedidos para serem concluídos dentro de 200 ms, defina o tempo de resposta da API para 200 ms no percentil 95. Qualquer teste em que o percentil 95 ultrapasse os 200 ms é um fracasso.
Comece cedo e teste continuamente
A análise inicial de desempenho detetaria gargalos arquitetónicos antes que se tornem dispendiosos de resolver.
Comece os testes de desempenho o mais cedo possível no ciclo de desenvolvimento de software da sua carga de trabalho. Não precisa de uma candidatura completa para começar. Os programadores podem perfilar código localmente, medir os tempos de resposta e identificar operações intensivas em recursos. Os testes iniciais informam as decisões de design, validam as escolhas arquitetónicas em função dos objetivos de desempenho e identificam oportunidades de otimização.
Teste continuamente a sua carga de trabalho à medida que esta evolui para cumprir novos requisitos. Cada alteração de código pode introduzir regressões de desempenho. Faça testes regularmente para detetar estas alterações cedo. Incorpore testes de desempenho nos pipelines de implementação e execute testes automatizados periódicos para detetar desvios de desempenho antes de chegarem à produção.
Troca. Os testes de desempenho iniciais requerem infraestrutura dedicada e conhecimentos especializados, o que aumenta os custos operacionais. Equilibrar este investimento com o custo dos problemas de desempenho descobertos tardiamente e incidentes de produção.
Teste em condições reais
Os testes de desempenho devem corresponder a condições reais para que os seus resultados sejam significativos.
Espelhe o seu ambiente de produção
O teu ambiente de teste deve espelhar a produção o mais fielmente possível. Adapte a sua abordagem ao ambiente com base no perfil de risco da sua carga de trabalho.
Para cargas de trabalho críticas, alinhe a produção exatamente em todos os aspetos.
- Calcular SKUs e configurações
- Configurações do dimensionamento automático
- Configurações de cache
- Condições de rede (latência, largura de banda)
- Dependências externas
Para cargas de trabalho não críticas, testar num ambiente reduzido que imite a produção pode fornecer informações úteis a um custo mais baixo.
Previna desvios de configuração. A deriva de configuração pode levar a resultados de teste enganosos. Implemente verificações automáticas para verificar se o seu ambiente de teste corresponde à produção. Certifique-se de que as versões corretas são implementadas antes de executar os testes.
Troca. A replicação em produção total para testes de desempenho aumenta significativamente os custos de infraestrutura. Avalie se o risco de problemas de desempenho em produção justifica o custo de uma infraestrutura dedicada de testes de desempenho para a sua carga de trabalho.
Validar o desempenho em produção
Os ambientes de teste não conseguem replicar totalmente as condições reais que afetam o desempenho. Os testes de produção expõem problemas que só surgem durante o uso real e fornecem referências precisas para otimização futura. Alguns requisitos de desempenho só podem ser validados onde utilizadores reais, dados e infraestrutura se cruzam.
Faz testes de produção controlados. Agende testes durante as horas de menor afluência para perceber como a sua carga de trabalho se comporta sob esgotamento de recursos e recupera de falhas.
Os testes de produção revelam características de desempenho em condições reais, incluindo:
- Padrões realistas de comportamento dos utilizadores e volumes de dados
- Variações reais de latência e largura de banda da rede
- Efeitos da distribuição geográfica
- Desempenho e dependências de APIs de terceiros
- Comportamento real de cache e características da infraestrutura
Utilize técnicas progressivas de testagem. Comece com pequenas percentagens de tráfego e aumente gradualmente. Monitorizar os tempos de resposta, a taxa de transferência, as taxas de erro e a utilização de recursos em cada etapa. Esta abordagem gradual limita o risco, identificando o ponto de rutura, revelando gargalos e fornecendo uma visão precisa do comportamento do sistema perante a procura crescente.
Monitorize continuamente os testes de produção para detetar problemas precocemente. Implemente salvaguardas automáticas que interrompam os testes se estes afetarem negativamente os utilizadores, como mecanismos automáticos de retrocesso e alertas em tempo real. Estas técnicas garantem uma resposta rápida e minimizam as perturbações.
Note
Quando executas testes de desempenho controlados em produção, precisas de alocar capacidade extra para lidar com a carga adicional gerada pelos testes.
Risco: Os testes de produção afetam diretamente os clientes reais porque podem criar carga extra e perturbar o tráfego. Implemente sempre salvaguardas, limite a exposição e tenha planos de retrocesso prontos para minimizar o impacto potencial no negócio. Equilibre os benefícios de testes realistas com o potencial impacto empresarial de perturbar utilizadores ao vivo.
Validar alterações com experiências orientadas por hipóteses
Use a experimentação orientada por hipóteses para orientar os seus testes de desempenho. Desenhe experiências individuais de desempenho para que produzam resultados significativos.
Comece com uma hipótese focada sobre o desempenho da sua carga de trabalho e defina critérios mensuráveis de sucesso que conduzam a decisões acionáveis. Por exemplo, a sua hipótese pode ser: "Adicionar um índice à tabela de ordens reduz o tempo de consulta em 70% sob carga máxima." A tua base é o esquema atual, e a variante é o esquema com o novo índice. Executa o mesmo teste de carga em ambas as versões. Captura a latência da consulta, o uso do CPU da base de dados e o rendimento, depois compara os resultados para determinar se a hipótese se mantém verdadeira.
Troca. Os experimentos baseados em hipóteses exigem a execução dos mesmos testes tanto contra configurações base como variantes, o que aumenta os custos de infraestrutura e o tempo de execução dos testes. Foque os experimentos em alterações de alto impacto onde o potencial ganho de desempenho justifica o esforço adicional de testes.
Aplicar múltiplos tipos de testes de desempenho
Os testes de desempenho abrangem uma variedade de testes que avaliam velocidade, estabilidade e escalabilidade sob várias condições. Cada tipo de teste visa aspetos distintos de desempenho da sua carga de trabalho. Revela insights únicos e permite uma avaliação completa que vai além dos testes funcionais.
Use vários tipos de testes para validar a sua carga de trabalho de diferentes ângulos. Por exemplo, os testes de stress determinam o ponto de rutura sob carga máxima, mas apenas os testes de resistência conseguem revelar fugas de memória que se manifestam ao longo de horas ou dias.
Escolhe os tipos de teste com base no que precisas de validar.
A tabela seguinte mostra quando usar cada tipo de teste e o que revela sobre a sua carga de trabalho. Embora esta tabela não seja uma lista exaustiva, serve como exemplo ilustrativo.
| Tipo de ensaio | Objetivo principal | Quando candidatar-se | O que revela | Meio Ambiente |
|---|---|---|---|---|
| Testes de carga | O sistema de verificação gere os volumes de utilizadores esperados sob o uso normal e de pico | Comece cedo, corra frequentemente | Desempenho base, limites de capacidade, eficácia de escalabilidade | Ambiente de encenação ou de produção |
| Testes de esforço | Compreender os limites do sistema e os pontos de rutura | Antes do sistema estar pronto para produção | Capacidade máxima, modos de falha, comportamento de recuperação | Ambiente dedicado de testes de desempenho |
| Teste de pico | Garantir que o sistema lida com picos súbitos de tráfego | Comece cedo, especialmente para aplicações públicas | Autoescalonamento da capacidade de resposta, gestão da fila, degradação gradual | Ambiente de encenação ou produção |
| Testes de resistência/imersão | Detetar problemas que só aparecem durante períodos prolongados | Após a passagem dos testes iniciais de carga | Fugas de memória, esgotamento de recursos, problemas de pool de conexões | Ambiente semelhante à produção com alocação total de recursos |
Não tentes implementar todos os tipos de teste imediatamente. Comece com testes básicos de carga para compreender o seu desempenho base. À medida que identificas riscos e ganhas experiência, expande para testes de stress, testes de picos e, eventualmente, testes de resistência.
Compromisso. Realizar testes de desempenho em todos os tipos de teste requer um investimento significativo de tempo e infraestrutura. Ajuste o seu investimento em testes ao risco do seu negócio.
Utilizar padrões de utilização do mundo real e características dos dados
Testar com dados realistas fornece informações precisas sobre o consumo de recursos, comportamento do sistema e problemas ocultos de desempenho.
Crie conjuntos diversificados de dados de teste que representem vários cenários, perfis de utilizadores e volumes de dados. Use variações de entrada e randomização para imitar a diversidade real dos utilizadores. Inclua casos-limite que possam causar problemas de desempenho, como cargas úteis grandes, consultas complexas ou alta concorrência.
Os seus dados de teste devem assemelhar-se aos dados reais de produção. Use dados sintéticos que tenham características de produção de dados. Reserve conjuntos de dados de produção (devidamente anonimizados) para certos cenários, como destacar comportamentos de gestão de dados como consistência de transações, latência e gestão de volumes.
Simula transações sintéticas que imitam fluxos de trabalho reais dos utilizadores. Faça scripts para estas transações e execute-as repetidamente para gerar carga que reflita como a sua carga de trabalho é realmente utilizada.
Os seus cenários de teste devem refletir padrões reais de uso, como acesso concorrente dos utilizadores, períodos de pico de carga e sequências específicas de transações. Certifique-se de que os cenários estão alinhados com os objetivos de negócio para que os resultados de desempenho reflitam o verdadeiro valor do utilizador.
Ao testar sob carga, inclua chamadas reais de API de terceiros. Simular dependências externas faz com que os testes corram mais rápido e de forma mais previsível, mas esconde problemas de desempenho do mundo real. Se a sua aplicação depende da API de um processador de pagamentos, teste com chamadas reais para compreender a latência de ponta a ponta.
Utilizar os resultados dos testes para orientar decisões de conceção
Os resultados dos seus testes orientam as decisões de design ao estabelecer referências fiáveis e orientar esforços de otimização.
Estabeleça as suas medidas de base. As linhas de base ajudam-no a identificar tendências e anomalias e a saber se as alterações de otimização resultam em melhorias. Precisas de referências fiáveis para acompanhar as tendências de desempenho ao longo do tempo.
Registar métricas de desempenho durante os testes iniciais. Esta gravação é a tua linha de base, um retrato do desempenho "normal". Em execuções subsequentes, compare novos resultados com esta linha base para detetar alterações de desempenho. Considere os critérios de impacto no utilizador, frequência, custo de correção e risco de alteração ao examinar os dados para compreender o comportamento do sistema sob várias condições. Procure padrões que mostrem onde o desempenho se degrada. Use esta perceção para priorizar esforços de otimização.
A otimização é um processo iterativo e deve ser orientada pelos dados. Reserve tempo dedicado no seu ciclo de desenvolvimento para otimização de desempenho. Use as suas linhas de base para medir o impacto das mudanças e garantir que proporcionam as melhorias esperadas sem introduzir regressões.
Correlacione o desempenho com métricas de negócio. Associe melhorias de desempenho a resultados de negócio, como receitas, envolvimento dos utilizadores, satisfação do cliente e taxa de conversão, para justificar o investimento contínuo na otimização do desempenho.
Note
Revise e atualize regularmente as suas linhas de base após alterações significativas na sua carga de trabalho, como alterações arquitetónicas, novas funcionalidades ou ajustes de escala. Ao fazer esta ação, garante que os seus objetivos de desempenho permanecem relevantes.
Mantém os ativos de teste alinhados com os padrões de utilização atuais
Os seus ativos de testes de desempenho contêm conhecimento crítico sobre o comportamento esperado da sua carga de trabalho, limiares de desempenho aceitáveis e padrões realistas de tráfego.
Organize os conjuntos de testes por tipo. Mantém os testes de carga, testes de esforço e testes de resistência em suítes separadas. Não os misture. Cada tipo tem requisitos de configuração, durações de execução e critérios de sucesso diferentes. Suites organizadas facilitam a execução de testes direcionados, a comparação de resultados entre execuções e a manutenção de cada suite de forma independente.
Atualize regularmente os dados dos testes. Dados de testes obsoletos levam a resultados irrealistas. Regenera os dados de teste para refletir as características atuais dos dados de produção sempre que o teu modelo de dados muda, os volumes de dados aumentam ou a demografia dos utilizadores mudam.
Analise os cenários de teste à medida que a sua carga de trabalho evolui. Agende revisões regulares para garantir que os seus cenários ainda refletem o uso real. Os cenários tornam-se desatualizados como:
- O comportamento do utilizador muda ao longo do tempo
- Os padrões de tráfego mudam à medida que a sua base de utilizadores cresce
- Novas funcionalidades introduzem diferentes padrões de utilização
- A infraestrutura escala para responder a novos requisitos de capacidade
Gestão do Azure
Azure Pipelines permite-lhe integrar testes de desempenho no seu pipeline CI/CD. Pode adicionar testes de carga como um passo no seu pipeline para validar o desempenho e a escalabilidade das suas aplicações.
Azure Chaos Studio ajuda-te a injetar falhas do mundo real na tua aplicação para que possas executar experiências controladas de injeção de falhas. As experiências ajudam-no a medir, compreender e melhorar a resiliência das suas aplicações e serviços na nuvem.
O Teste de Carga do Azure é um serviço de teste de carga que gera carga de alta escala em qualquer aplicativo. O Teste de Carga fornece recursos para automatizar testes de carga e integrá-los ao seu fluxo de trabalho de integração contínua e entrega contínua (CI/CD). Você pode definir critérios de teste, como tempo médio de resposta ou limites de erro, e interromper automaticamente os testes de carga com base em condições de erro específicas. O Teste de Carga oferece um painel que fornece atualizações em tempo real e métricas de recursos detalhadas dos componentes do aplicativo do Azure durante um teste de carga. Você pode analisar os resultados do teste, identificar gargalos de desempenho e comparar várias execuções de teste para entender as regressões de desempenho ao longo do tempo.
Azure Monitor é uma solução abrangente de monitorização para recolher, analisar e responder a telemetria a partir da sua cloud e ambientes locais. O Application Insights é uma extensão do Monitor que fornece recursos de APM. Você pode usar o Application Insights para monitorar aplicativos durante o desenvolvimento e teste e também na produção.
Ligações relacionadas
- Recomendações para testes de segurança
- Recomendações para a conceção de uma estratégia de teste de fiabilidade
Lista de verificação de eficiência de desempenho
Consulte o conjunto completo de recomendações.