Princípios de conceção da Eficiência de Desempenho

A eficiência de desempenho é a capacidade da carga de trabalho ajustar-se às alterações nas exigências. Uma carga de trabalho tem de conseguir lidar com um aumento de carga sem comprometer a experiência do utilizador. Por outro lado, quando há uma diminuição da carga, a carga de trabalho tem de conservar os respetivos recursos. A capacidade, que indica a disponibilidade de recursos (CPU e memória), é um fator significativo.

A estrutura da carga de trabalho não deve depender apenas da capacidade pré-aprovisionada, o que garante um desempenho até um determinado limite. Se esse limite for excedido, a carga de trabalho poderá ter problemas de desempenho ou até mesmo falhas. Quando a carga está abaixo desse limite, os recursos continuam a ser executados desnecessariamente, incorrendo em custos.

Precisa de uma estratégia abrangente para manter os objetivos de desempenho ao longo do tempo. As considerações de desempenho não devem ser uma reflexão posterior no processo de conceção, apenas para serem abordadas quando surgem problemas na produção. Em vez disso, adote uma mentalidade em que o desempenho é uma consideração fundamental das fases iniciais do design. Inicialmente, crie o sistema sem destinos de desempenho específicos. Mas a partir daí, teste e meça o desempenho em cada fase do desenvolvimento para garantir o progresso e a eficácia. A otimização contínua destes destinos ao longo do processo e a incorporação de lições aprendidas com base na produção podem mitigar significativamente potenciais problemas com antecedência.

Estes princípios de conceção podem ajudar a criar a sua estratégia de gestão da capacidade de recursos para satisfazer suficientemente os seus requisitos empresariais para a utilização esperada. Além disso, reduza o desperdício durante as horas de ponta. Depois de decidir uma estratégia, solidifique a sua estrutura com a lista de verificação Eficiência de Desempenho.

A eficiência de desempenho tem a ver com a utilização eficaz dos recursos da carga de trabalho. Sem uma boa estratégia, poderá não conseguir antecipar e satisfazer as exigências dos utilizadores. Poderá ter de recorrer a uma abordagem de previsão de longo prazo e capacidade pré-aprovisionada, o que não lhe permite tirar o máximo partido da sua plataforma na cloud.

Negociar metas de desempenho realistas

Ícone de objetivo A experiência de utilizador pretendida é definida e existe uma estratégia para desenvolver um objetivo de referência e de medida em relação aos requisitos empresariais pré-estabelecidos.

Do ponto de vista do desempenho, é ideal ter objetivos de desempenho bem definidos para iniciar o processo de conceção. Para definir esses objetivos, tem de ter uma boa compreensão dos requisitos empresariais e da qualidade de serviço prevista que a carga de trabalho deverá fornecer. Defina as expectativas em colaboração com os intervenientes empresariais. Em vez de se concentrar apenas em métricas técnicas, determine os efeitos aceitáveis na experiência do utilizador para os principais fluxos.

Existe uma dependência circular. Não pode medir o que ainda não definiu e não pode definir sem medição. Por isso, também é importante medir o desempenho da carga de trabalho até alcançar uma definição satisfatória de limiar aceitável com contrato coletivo.

Existe uma forte correlação entre os objetivos de desempenho e fiabilidade, que ajudam a determinar a qualidade do serviço em termos de desempenho, disponibilidade e resiliência. Sem uma definição clara, é difícil medir, alertar e testar o desempenho. Depois de estabelecer os destinos e identificar números reais através de testes ao longo do tempo, pode implementar a automatização para testes contínuos em relação a estes destinos.

Adira às melhores práticas para definir destinos ao nível da macro, mesmo que sejam aproximados ou dentro de um intervalo.

Abordagem Benefícios
Prepare-se para uma negociação eficaz ao compreender os conceitos técnicos, explorar as possibilidades de conceção com a infraestrutura disponível e utilizar os resultados da experimentação concreta, se disponível.

Utilize dados históricos para obter visibilidade sobre padrões de utilização e estrangulamentos.

Obtenha informações de fatores externos, como os contributos da análise de mercado, especialistas e normas do setor.
Pode tomar decisões informadas com base em informações práticas.

Os objetivos de desempenho concentram-se na experiência do utilizador que se baseia no que é viável, nas melhores práticas da indústria e nas tendências de mercado atuais.
Colabore com os proprietários empresariais para compreender as promessas dos utilizadores, em termos de qualidade e conformidade regulamentar, se aplicável.

Mantenha uma perspetiva abrangente e evite mergulhar em detalhes granulares nesta fase.

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

Compreenda o contexto empresarial e o crescimento previsto.
Evitará fazer suposições que possam não estar alinhadas com os objetivos de negócio. Também gera clareza e motivação na equipa de carga de trabalho.

Ter um contexto empresarial sobre requisitos funcionais e não funcionais pode revelar alterações de conceção noutros pilares de Well-Architected do Azure e ajudá-lo a fazer compromissos informados.

Definir parâmetros no início ajuda a evitar os custos associados a potenciais redesenhadas de soluções mais tarde.

Permite-lhe garantir que os objetivos de desempenho abrangem projeções futuras, para que possa alinhar os esforços atuais com objetivos a longo prazo.
Identifique os fluxos de carga de trabalho e dê prioridade aos 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 de cada fluxo, tendo em conta a importância, a frequência de utilização e a intensidade arquitetónica do caminho.
Ao atribuir prioridades aos fluxos, pode concentrar os seus recursos em áreas críticas que tenham mais efeito nos resultados do utilizador e da empresa.

Ao dividir o sistema nas respetivas partes e dependências, compreende a função de cada componente e influencia o desempenho. Também tem conhecimento de potenciais problemas.

Ajuda a estabelecer uma linha de base de desempenho e otimização de unidades.
Começar a criar um modelo de desempenho Considere se os padrões de utilização mostram variações sazonais ou diárias. Factor in the cost, operations, and criticality to the business.

Utilize as normas da indústria para quantificar métricas e métodos de agregação, como a utilização de percentis.

Avalie as expetativas e limitações de procura e oferta impostas pelas restrições comerciais.

Incorporar perspectivas de crescimento.
Um modelo de desempenho fornece informações sobre a utilização ideal dos recursos e ajuda no planeamento estratégico.

As normas da indústria ajudam com o benchmarking.

A verificação linguística futura garante que os objetivos de desempenho permanecem relevantes e se podem adaptar às alterações.

Estruturar para cumprir os requisitos de capacidade

Ícone de objetivo Fornecer oferta suficiente para fazer face à procura prevista.

É importante medir proativamente o desempenho. Medir o desempenho envolve medir linhas de base e ter uma compreensão preliminar dos componentes do sistema que são susceptíveis de colocar desafios. Pode consegui-lo sem realizar um teste de desempenho completo ou através da otimização granular. Ao seguir estes passos iniciais, estabelece uma base para uma gestão eficaz do desempenho no início do ciclo de vida de desenvolvimento.

Examine o sistema como um todo, em vez de se concentrar em componentes individuais. Evite ajustar nesta fase. Melhorar o desempenho granular resulta em compromissos noutras áreas. À medida que avança no ciclo de vida e inicia os testes de aceitação do utilizador ou avança para a produção, pode identificar rapidamente quais as áreas que necessitam de otimização adicional.

Abordagem Vantagem
Avalie as exigências de elasticidade dos fluxos identificados.

Explore padrões de conceção que podem ser implementados em toda a pilha de tecnologia, tendo em conta a aplicação e as camadas de computação e dados subjacentes.
Pode definir requisitos de escalabilidade em componentes existentes que precisam de mais capacidade e nas áreas onde precisa de componentes adicionais para distribuir a carga.

Tem conhecimento de potenciais estrangulamentos no sistema e de controlos de compensação de design, como adicionar capacidades de colocação em cache para diminuir a latência e a carga do sistema.
Escolha os recursos certos na pilha de tecnologia, o que lhe permite cumprir os objetivos de desempenho e integrar com o sistema.

Considere as funcionalidades que podem cumprir os requisitos de escalabilidade.

Encontre o equilíbrio certo entre a alocação de recursos e os requisitos de sistema para lidar com picos inesperados de forma eficiente.
Ao analisar as diferentes capacidades dos recursos, garante que cada componente contribui para a funcionalidade geral e o desempenho do sistema.

Pode tirar partido das capacidades incorporadas que acionam automaticamente as operações de dimensionamento.

Os recursos de dimensionamento correto podem satisfazer as alterações na procura sem sobreaprovisionamento, o que leva a uma poupança de custos.
Efetue o planeamento de capacidade com base na procura e na capacidade dos recursos selecionados para enriquecer o modelo de desempenho.

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

Defina os destinos de desempenho que podem ser traduzidos em requisitos técnicos.
Pode utilizar recursos de forma eficiente e satisfazer a procura sem sobreaprovisionamento, evitando assim custos desnecessários.

Compreende como as escolhas de estrutura afetam o desempenho.
Implemente uma prova de conceito que valide os requisitos técnicos e as escolhas de estrutura. Uma prova de conceito é fundamental para validar a conceção para determinar se o sistema consegue cumprir os objetivos de desempenho e se esses destinos são realistas. Com base na carga prevista, pode validar se a capacidade prevista pode cumprir os objetivos de desempenho.

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

Inclua casos de utilização, metodologias diferentes e cadência dos seus planos de teste.

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

Triagem e priorize os casos de teste no plano. Concentre-se em casos que oferecem informações valiosas sobre os destinos de desempenho e alinham o planeamento de capacidade.
Certifique-se de que os aspetos certos do sistema são testados.

Pode alocar recursos de forma eficaz e realizar testes de forma alinhada com as prioridades e requisitos empresariais.
Documente a sua estratégia de monitorização de desempenho.

Avalie as métricas em diferentes níveis de abstração para cada fluxo identificado.
Pode acompanhar o progresso na obtenção de objetivos de desempenho ao longo do ciclo de desenvolvimento.

Alcançar e manter o desempenho

Ícone de objetivo Proteja-se contra a degradação do desempenho enquanto o sistema está a ser utilizado e à medida que evolui.

O desenvolvimento não é um esforço único. É um processo contínuo. Espere alterações no desempenho à medida que as funcionalidades mudam. Existe variância nos padrões e perfis de utilizador, até mesmo alterações de otimizações noutros pilares do Azure Well-Architected. Qualquer alteração pode forçar os recursos da carga de trabalho.

Proteja o sistema contra alterações para que não deslize novamente nos destinos de desempenho. Integrar testes e monitorização no processo de desenvolvimento. Teste o desempenho do sistema na produção com carga real e simule essa carga com testes automatizados antes da produção. Em ambos os casos, deve ter práticas de monitorização em vigor para efeitos de verificação.

Ao longo do ciclo de vida de desenvolvimento, realize vários tipos de testes em diferentes fases. Nas fases iniciais, teste a prova de conceito para garantir que os resultados de desempenho não são totalmente inesperados. À medida que o desenvolvimento progride, realize testes manuais de baixo esforço para estabelecer referências. Na fase de compilação, comece a desenvolver testes de desempenho de rotina automatizados que avaliam a latência, os níveis de stress, a capacidade de carga e outras características definidas nos planos de teste.

A monitorização tem de ser parte integrante desse esforço, em vez de ser um exercício isolado. Pode ver como o sistema e os respetivos recursos funcionam ao longo do tempo. Em seguida, pode ajustá-los para maximizar o respetivo valor e garantir que continuam a cumprir os padrões de desempenho.

Tenha em atenção que os destinos de desempenho variam ao longo do tempo, em resposta a alterações. Atualize o modelo de desempenho com base em métricas testadas e monitorizadas. Indique claramente um aumento, redução ou nenhum efeito no desempenho dos fluxos.

Esteja sempre pronto para renegociar e repor as expectativas com os intervenientes empresariais.

Abordagem Vantagem
Integrar testes de desempenho de rotina nos Pipelines do Azure.

Selecione pipelines que possam integrar testes. Por outro lado, selecione ferramentas de teste que possam ser integradas nos pipelines.
Os testes automatizados poupam tempo e fornecem consistência que facilita a deteção de regressões ou melhorias.

Estes artefactos permitem a monitorização contínua de quaisquer desvios ou desvios ao longo do tempo, para que possa manter um desempenho e qualidade consistentes.
Formalize os testes de desempenho como portas de qualidade que podem aprovar ou negar a promoção de lançamento e a implementação final para produção. Estes pontos de verificação garantem que cada fase de implementação cumpre as normas de desempenho necessárias antes de avançar para a fase seguinte. Os pontos de verificação ajudam a evitar uma regressão de desempenho não intencional.

Por exemplo, se o desempenho estiver significativamente abaixo das expectativas, poderá bloquear uma versão até serem efetuadas melhorias.
Configure um processo repetível para monitorizar transações reais na produção e desvios em relação aos seus objetivos de desempenho.

Utilizar transações sintéticas na produção.

Configurar alertas de monitorização sobre regressões de desempenho.
Quer obter informações sobre o desempenho real do seu sistema sob carga real que não poderia ser simulada através de testes.

Em seguida, pode identificar proativamente problemas e áreas de melhoria, tais como potenciais estrangulamentos, recursos subutilizados e outras preocupações.
Reveja os resultados do teste de desempenho e monitorize os dados meticulosamente e otimize até cumprir os objetivos de desempenho.

Priorize as ações derivadas dessas revisões e adicione-as ao backlog para execução planeada.
Com base nos resultados dos testes, pode capturar e comparar dados e começar a analisar tendências.

Os seus esforços de otimização são orientados por dados.
Crie competências de codificação que se focam no desempenho.

Ter padrões de codificação que exemplifiquem padrões de codificação orientados para o desempenho.
O código que não tem problemas de desempenho pode tornar os ciclos de teste mais eficientes , uma vez que os testes podem ser focados em problemas mais significativos.

Os padrões de codificação ajudam a evitar a reformulação e mantêm o seu estilo de codificação consistente.
Resolva a erosão do desempenho à medida que a utilização aumenta, as funcionalidades mudam e os dados acumulam-se ao longo do tempo para manter o desempenho.

Reponha as expectativas e estabeleça novos objetivos, se a otimização trazer apenas benefícios a curto prazo.
Pode preservar o estado de desempenho antes que a degradação se desenvolva em problemas que afetam negativamente a experiência do utilizador para além do intervalo aceitável.

Alterar destinos repõe o modelo de desempenho e não perde tempo na otimização do sistema que já atingiu a sua capacidade.

Melhorar a eficiência através da otimização

Ícone de objetivo Melhore a eficiência do sistema dentro dos destinos de desempenho definidos para aumentar o valor da carga de trabalho.

Os destinos definidos durante a fase inicial baseiam-se num nível razoável de experiência do utilizador, tendo em conta várias restrições. Deve reavaliar e ajustar os destinos para melhorar ainda mais a experiência. Para melhorar ainda mais a experiência, requer uma compreensão clara de como o sistema é utilizado, como evoluiu e como a plataforma ou tecnologia mudou ao longo do tempo. O ciclo de monitorização, otimização, teste e implementação é um processo contínuo.

Os esforços de otimização da eficiência permitem que uma carga de trabalho funcione com menor consumo de recursos. Podem fazer com que a carga de trabalho esteja num estado sobreaprovisionado com capacidade sobressalente. Utilize essa capacidade para melhorar a fiabilidade do sistema. Elimine a capacidade para melhorar o custo do sistema. Em alternativa, reutilize a capacidade para suportar novas funcionalidades de produto em recursos existentes.

Quando o sistema obtiver eficiências, aproveite para definir e manter novos objetivos de desempenho.

Abordagem Vantagem
Aloque ciclos dedicados para otimização do desempenho para abordar requisitos e otimizações não funcionais em áreas funcionais. Os destinos para esta otimização são recursos, código, retenção de dados, consultas de bases de dados, entre outros. Pode criar uma cultura de otimização baseada no desempenho. Mantém a equipa responsável pela monitorização proativa dos padrões de desempenho e também pela otimização da aplicação.
Melhore a arquitetura com novos padrões de estrutura e componentes, o que pode aumentar o desempenho, de formas que anteriormente não considerou devido a tempo ou orçamento limitados. O novo design e componentes podem otimizar o sistema, o que leva a uma melhor experiência de utilizador. Por exemplo, pode utilizar a colocação em cache ou a adição de um componente de rede de entrega de conteúdos.

Também pode levar a benefícios de custos a longo prazo.
Utilize ferramentas de monitorização para analisar tendências históricas e identificar os fluxos e os caminhos de implementação de código que mais beneficiariam com um esforço de otimização do desempenho. Recomendamos ferramentas e perfis de monitorização do desempenho de aplicações (APM) para esta finalidade.

Identifique os caminhos frequentes da operação e outros potenciais estrangulamentos no sistema.
Quando identificar as áreas problemáticas periódicas, a equipa pode concentrar-se onde os ganhos são os mais elevados.
Atualize-se e mantenha-se atualizado com inovações tecnológicas que podem melhorar o desempenho.

Tire partido das novas versões lançadas para as arquiteturas e bibliotecas dependentes.

Da mesma forma, utilize as novas funcionalidades para os recursos da plataforma à medida que são atualizados e corrigidos.
A adoção de novas tecnologias pode, muitas vezes, ser o fator motivador para procurar oportunidades para melhorar.

O código que poderia ter sido lento no passado pode tornar-se mais rápido com estas atualizações. Também quer estar ciente de como determinadas atualizações afetam negativamente o desempenho.

Passos seguintes