Princípios de design de eficiência de desempenho

A eficiência de desempenho é a capacidade da carga de trabalho de se ajustar às alterações nas demandas. Uma carga de trabalho deve ser capaz de lidar com um aumento na carga sem comprometer a experiência do usuário. Por outro lado, quando há uma diminuição na carga, a carga de trabalho deve conservar seus recursos. A capacidade, que indica a disponibilidade de recursos (CPU e memória), é um fator significativo.

O design da carga de trabalho não deve depender apenas da capacidade pré-provisionada, o que garante o desempenho até um determinado limite. Se esse limite for excedido, a carga de trabalho poderá ter problemas de desempenho ou até mesmo interrupções de experiência. Quando a carga está abaixo desse limite, os recursos continuam a ser executados desnecessariamente, incorrendo em custos.

Você precisa de uma estratégia abrangente para sustentar as metas de desempenho ao longo do tempo. As considerações de desempenho não devem ser uma reflexão posterior no processo de design, apenas para serem resolvidas quando surgirem problemas na produção. Em vez disso, adote uma mentalidade em que o desempenho é uma consideração fundamental dos estágios iniciais do design. Inicialmente, crie o sistema sem nenhuma meta de desempenho específica. Mas a partir daí, teste e meça o desempenho em cada estágio do desenvolvimento para garantir o progresso e a eficácia. A otimização contínua dessas metas em todo o processo e a incorporação de lições aprendidas com base na produção podem reduzir significativamente os possíveis problemas com antecedência.

Esses princípios de design podem ajudar a criar sua estratégia para gerenciar a capacidade de recursos para atender suficientemente aos seus requisitos de negócios para uso esperado. Além disso, reduza o desperdício fora do horário de pico. Depois de decidir sobre uma estratégia, solidifique seu design usando a lista de verificação eficiência de desempenho.

A eficiência de desempenho é sobre o uso efetivo de recursos de carga de trabalho. Sem uma boa estratégia, talvez você não consiga prever e atender às demandas dos usuários. Talvez seja necessário recorrer a uma abordagem de previsão de longo prazo e capacidade pré-provisionada, o que não permite que você aproveite ao máximo sua plataforma de nuvem.

Negociar metas de desempenho realistas

Ícone de meta A experiência do usuário pretendida é definida e há uma estratégia para desenvolver um parâmetro de comparação e medir metas em relação aos requisitos de negócios pré-estabelecidos.

Do ponto de vista do desempenho, é ideal ter metas de desempenho bem definidas para iniciar o processo de design. Para definir essas metas, você precisa ter uma boa compreensão dos requisitos de negócios e da qualidade de serviço prevista que a carga de trabalho deve fornecer. Defina as expectativas em colaboração com os stakeholders de negócios. Em vez de se concentrar apenas em métricas técnicas, determine os efeitos aceitáveis na experiência do usuário para os principais fluxos.

Há uma dependência circular. Você não pode medir o que não definiu e não pode definir sem medição. Portanto, também é importante medir o desempenho da carga de trabalho até que você alcance uma definição satisfatória de limite aceitável com acordo coletivo.

Há uma forte correlação entre as metas de desempenho e confiabilidade, que ajudam a determinar a qualidade do serviço em termos de desempenho, disponibilidade e resiliência. Sem uma definição clara, é desafiador medir, alertar e testar o desempenho. Depois de estabelecer os destinos e identificar números reais por meio de testes ao longo do tempo, você pode implementar a automação para testes contínuos em relação a esses destinos.

Siga as práticas recomendadas para definir destinos no nível da macro, mesmo que sejam aproximados ou dentro de um intervalo.

Abordagem Benefícios
Prepare-se para uma negociação eficaz compreendendo conceitos técnicos, explorando possibilidades de design com a infraestrutura disponível e usando resultados de experimentação concreta, se disponível.

Use dados históricos para obter visibilidade dos padrões de uso e gargalos.

Traga insights de fatores externos, como entrada de análise de mercado, especialistas e padrões do setor.
Você pode tomar decisões informadas com base em insights práticos.

As metas de desempenho se concentram na experiência do usuário com base no que é viável, nas melhores práticas do setor e nas tendências atuais do mercado.
Colabore com os proprietários de negócios para entender as promessas do usuário, em termos de qualidade e conformidade regulatória, se aplicável.

Mantenha uma perspectiva ampla e evite se aprofundar em detalhes granulares nesta fase.

Seja explícito sobre o que representa o desempenho aceitável, com base nos investimentos.

Entenda o contexto de negócios e o crescimento previsto.
Você evitará fazer suposições que podem não estar alinhadas com as metas de negócios. Ele também gera clareza e motivação dentro da equipe de carga de trabalho.

Ter um contexto de negócios sobre requisitos funcionais e não funcionais pode descobrir alterações de design em outros pilares do Azure Well-Architected e ajudá-lo a fazer compensações informadas.

Definir parâmetros no início ajuda a evitar custos associados a possíveis reformulações de solução posteriormente.

Ele permite que você garanta que as metas de desempenho abrangem projeções futuras, para que você possa alinhar os esforços atuais com metas de longo prazo.
Identifique os fluxos de carga de trabalho e priorize os fluxos no diagrama de arquitetura.

Defina a tolerância de desempenho de cada fluxo como um intervalo de desempenho aspiracional a inaceitável.

Avalie os pontos de entrada e saída para cada fluxo, considerando a criticalidade, a frequência de uso e a intensidade arquitetônica do caminho.
Ao priorizar fluxos, você pode concentrar seus recursos em áreas críticas que têm mais efeito sobre os resultados do usuário e dos negócios.

Ao dividir o sistema em suas partes e dependências, você entende a função e a influência de cada componente no desempenho. Você também se torna ciente de possíveis problemas.

Ele ajuda a estabelecer uma linha de base de desempenho e otimização de unidade.
Começar a criar um modelo de desempenho Considere se os padrões de uso mostram variações sazonais ou diárias. Considere o custo, as operações e a criticalidade para os negócios.

Use padrões do setor para quantificar métricas e métodos de agregação, como o uso de percentis.

Avalie as expectativas de demanda e oferta e as limitações impostas pelas restrições de negócios.

Incorporar perspectivas de crescimento.
Um modelo de desempenho fornece insights sobre o uso ideal de recursos e ajuda com o planejamento estratégico.

Os padrões do setor ajudam com o benchmarking.

A revisão de texto futura garante que as metas de desempenho permaneçam relevantes e possam se adaptar às alterações.

Design para atender aos requisitos de capacidade

Ícone de meta Forneça oferta suficiente para atender à demanda prevista.

É importante medir proativamente o desempenho. Medir o desempenho envolve medir linhas de base e ter uma compreensão preliminar de quais componentes do sistema provavelmente representarão desafios. Você pode obtê-lo sem realizar um teste de desempenho completo ou por meio de otimização granular. Ao executar essas etapas iniciais, você estabelece uma base para um gerenciamento de desempenho eficaz no início do ciclo de vida de desenvolvimento.

Examine o sistema como um todo, em vez de se concentrar em componentes individuais. Evite o ajuste fino nesta fase. Fazer melhorias granulares no desempenho resulta em compensações em outras áreas. À medida que você avança pelo ciclo de vida e inicia o teste de aceitação do usuário ou avança em direção à produção, você pode identificar rapidamente quais áreas exigem otimização adicional.

Abordagem Benefício
Avalie as demandas de elasticidade para os fluxos identificados.

Explore os padrões de design que podem ser implementados em toda a pilha de tecnologia, considerando o aplicativo e as camadas de computação e dados subjacentes.
Você pode definir requisitos de escalabilidade em componentes existentes que precisam de mais capacidade e nas áreas em que você precisa de componentes extras para distribuir a carga.

Você está ciente de possíveis gargalos no sistema e projeta controles de compensação, como adicionar recursos de cache para diminuir a latência e a carga do sistema.
Escolha os recursos certos na pilha de tecnologia, o que permite que você atenda às metas de desempenho e integre-se ao sistema.

Considere os recursos que podem atender aos requisitos de escalabilidade.

Encontre o equilíbrio certo entre a alocação de recursos e os requisitos do sistema, para lidar com picos inesperados com eficiência.
Analisando as diferentes funcionalidades dos recursos, você garante que cada componente contribua para a funcionalidade geral e o desempenho do sistema.

Você pode aproveitar as funcionalidades internas que disparam automaticamente operações de dimensionamento.

Os recursos de dimensionamento correto podem atender a alterações na demanda sem superprovisionamento, o que leva à economia de custos.
Faça o planejamento de capacidade com base na demanda e na capacidade dos recursos selecionados para enriquecer seu modelo de desempenho.

Use técnicas de modelagem preditiva para prever alterações previstas na capacidade que podem ocorrer com alterações previsíveis e inesperadas.

Defina metas de desempenho que podem ser convertidas em requisitos técnicos.
Você pode usar recursos com eficiência e atender à demanda sem superprovisionamento, evitando custos desnecessários.

Você entende como as opções de design afetam o desempenho.
Implemente uma prova de conceito que valide os requisitos técnicos e as opções de design. Uma prova de conceito é fundamental para validar o design para determinar se o sistema pode atender às metas de desempenho e se essas metas são realistas. Com base na carga prevista, você pode validar se a capacidade prevista pode atender às metas de desempenho.

Além disso, verifique as implicações de custo das opções de design.
Documente sua estratégia de teste de desempenho.

Inclua casos de uso, metodologias diferentes e cadência de seus planos de teste.

Defina um processo para a operação descrita pelo plano de teste de desempenho.

Faça a triagem e priorize os casos de teste no plano. Concentre-se em casos que oferecem insights valiosos sobre destinos de desempenho e alinham o planejamento da capacidade.
Você garante que os aspectos certos do sistema sejam testados.

Você pode alocar recursos com eficiência e realizar testes de uma maneira que se alinhe às prioridades e aos requisitos de negócios.
Documente sua estratégia de monitoramento de desempenho.

Avalie as métricas em diferentes níveis de abstração para cada fluxo identificado.
Você pode acompanhar o progresso para atingir as metas de desempenho ao longo do ciclo de desenvolvimento.

Alcançar e sustentar o desempenho

Ícone de meta Proteja-se contra degradação de desempenho enquanto o sistema estiver em uso e conforme ele evolui.

O desenvolvimento não é um esforço único. É um processo contínuo. Espere alterações no desempenho à medida que os recursos mudam. Há variação nos padrões e perfis do usuário, até mesmo alterações de otimizações em outros pilares Well-Architected do Azure. Qualquer alteração pode sobrecarregar os recursos da carga de trabalho.

Proteja o sistema contra alterações para que ele não deslize para trás em destinos de desempenho. Integrar o teste e o monitoramento no processo de desenvolvimento. Teste o desempenho do sistema em produção com carga real e simule essa carga com testes automatizados antes da produção. Em ambos os casos, você deve ter práticas de monitoramento em vigor para fins de verificação.

Durante todo o ciclo de vida de desenvolvimento, realize vários tipos de testes em diferentes estágios. Nos estágios iniciais, teste a prova de conceito para garantir que os resultados do desempenho não sejam totalmente inesperados. À medida que o desenvolvimento progride, realize testes manuais e de baixo esforço para estabelecer parâmetros de comparação. No estágio de build, comece a desenvolver testes de desempenho de rotina automatizados que avaliam latência, níveis de estresse, capacidade de carga e outras características definidas nos planos de teste.

O monitoramento deve ser parte integrante desse esforço, em vez de ser um exercício isolado. Você pode ver como o sistema e seus recursos se comportam ao longo do tempo. Em seguida, você pode ajustá-los para maximizar seu valor e garantir que eles continuem a atender aos padrões de desempenho.

Tenha em mente que as metas de desempenho variam ao longo do tempo, em resposta às alterações. Atualize o modelo de desempenho com base em métricas testadas e monitoradas. Indica claramente aumento, redução ou nenhum efeito no desempenho dos fluxos.

Esteja sempre pronto para renegociar e redefinir as expectativas com os stakeholders de negócios.

Abordagem Benefício
Integrar testes de desempenho de rotina no Azure Pipelines.

Escolha pipelines que possam integrar testes. Por outro lado, escolha ferramentas de teste que podem ser integradas aos pipelines.
Os testes automatizados economizam tempo e fornecem consistência que facilita a detecção de regressões ou melhorias.

Esses artefatos permitem o monitoramento contínuo de quaisquer desvios ou descompasso ao longo do tempo, para que você possa manter o desempenho e a qualidade consistentes.
Formalize os testes de desempenho como portões de qualidade que podem aprovar ou negar a promoção de lançamento e a implantação final para produção. Esses pontos de verificação garantem que cada estágio da implantação atenda aos padrões de desempenho necessários antes de prosseguir para o próximo. Os pontos de verificação ajudam a evitar a regressão de desempenho não intencional.

Por exemplo, se o desempenho estiver significativamente abaixo das expectativas, você poderá bloquear uma versão até que sejam feitas melhorias.
Configure um processo repetível para monitorar transações reais em produção e desvios em relação às suas metas de desempenho.

Use transações sintéticas em produção.

Configure alertas de monitoramento sobre regressões de desempenho.
Você deseja obter informações sobre o desempenho real do sistema sob carga do mundo real que não pôde ser simulada por meio de testes.

Em seguida, você pode identificar proativamente problemas e áreas de melhoria, como possíveis gargalos, recursos subutilizados e outras preocupações.
Examine os resultados do teste de desempenho e os dados de monitoramento meticulosamente e otimize até que você atenda às metas de desempenho.

Priorize as ações derivadas dessas revisões e adicione-as à lista de pendências para execução planejada.
Com base nos resultados do teste, você pode capturar e comparar dados e começar a analisar tendências.

Seus esforços de otimização são controlados por dados.
Crie habilidades de codificação que se concentram no desempenho.

Tem padrões de codificação que exemplificam padrões de codificação controlados por desempenho.
O código que não tem problemas de desempenho pode tornar os ciclos de teste mais eficientes porque os testes podem se concentrar em problemas mais significativos.

Os padrões de codificação ajudam a evitar o retrabalho e mantém o estilo de codificação consistente.
Resolva a erosão do desempenho à medida que o uso aumenta, os recursos mudam e os dados se acumulam ao longo do tempo para sustentar o desempenho.

Redefina as expectativas e estabeleça novas metas, se o ajuste fino trouxer apenas benefícios de curto prazo.
Você pode preservar o estado de desempenho antes que a degradação se desenvolva em problemas que afetam negativamente a experiência do usuário além do intervalo aceitável.

A alteração de destinos redefine o modelo de desempenho e você não perde tempo na otimização do sistema que já atingiu sua capacidade.

Melhorar a eficiência por meio da otimização

Ícone de meta Melhore a eficiência do sistema dentro das metas de desempenho definidas para aumentar o valor da carga de trabalho.

Os destinos definidos durante a fase inicial são baseados em um nível razoável de experiência do usuário, considerando várias restrições. Você deve reavaliar e ajustar as metas para aprimorar ainda mais a experiência. Para aprimorar ainda mais a experiência, ela requer uma compreensão clara de como o sistema é usado, como ele evoluiu e como a plataforma ou a tecnologia mudou ao longo do tempo. O ciclo de monitoramento, otimização, teste e implantação é um processo contínuo.

Os esforços de otimização de eficiência permitem que uma carga de trabalho funcione com menor consumo de recursos. Eles podem fazer com que a carga de trabalho esteja em um estado sobreprovisionado com capacidade sobressalente. Use essa capacidade para melhorar a confiabilidade do sistema. Elimine a capacidade para melhorar o custo do sistema. Ou reutilize a capacidade de dar suporte a novos recursos do produto em recursos existentes.

Quando o sistema ganhar eficiência, aproveite a oportunidade para definir e manter novas metas de desempenho.

Abordagem Benefício
Aloque ciclos dedicados para otimização de desempenho para atender a requisitos não funcionais e otimizações em áreas funcionais. Os destinos para essa otimização são recursos, código, retenção de dados, consultas de banco de dados e outros. Você pode criar uma cultura de otimização controlada por desempenho. Você mantém a equipe responsável por monitorar proativamente os padrões de desempenho e também ajustar o aplicativo.
Aprimore a arquitetura com novos padrões de design e componentes, o que pode aumentar o desempenho, de maneiras que você não considerou anteriormente devido ao tempo ou orçamento limitados. Novos designs e componentes podem otimizar o sistema, levando a uma melhor experiência do usuário. Por exemplo, você pode usar o cache ou adicionar um componente de rede de distribuição de conteúdo.

Também pode levar a benefícios de custo de longo prazo.
Use ferramentas de monitoramento para analisar tendências históricas e identificar os fluxos e caminhos de implementação de código que mais se beneficiariam de um esforço de otimização de desempenho. Recomendamos ferramentas e perfis do APM (monitoramento de desempenho de aplicativos) para essa finalidade.

Identifique os caminhos quentes da operação e outros possíveis gargalos no sistema.
Quando você identifica as áreas problemáticas recorrentes, a equipe pode se concentrar onde os ganhos são os mais altos.
Atualize-se e mantenha-se atualizado com inovações tecnológicas que podem melhorar o desempenho.

Aproveite as novas versões lançadas para as estruturas e bibliotecas dependentes.

Da mesma forma, use os novos recursos para recursos de plataforma conforme eles são atualizados e corrigidos.
A adoção de novas tecnologias geralmente pode ser o fator motivador para procurar oportunidades para melhorar.

O código que pode ter sido lento no passado pode se tornar mais rápido com essas atualizações. Você também deseja estar ciente de como determinadas atualizações afetam negativamente o desempenho.

Próximas etapas