Recomendações para otimização contínua de desempenho

Aplica-se a esta recomendação de lista de verificação de Eficiência de Desempenho do Azure Well-Architected Framework:

PE:12 Otimizar continuamente o desempenho. Concentre-se em componentes que mostram desempenho deteriorado ao longo do tempo, como bancos de dados e recursos de rede.

Este guia descreve as recomendações para otimização contínua de desempenho. A otimização contínua de desempenho é o processo de monitoramento, análise e melhoria constante de eficiência de desempenho. A eficiência de desempenho se adapta a aumentos e diminuições na demanda. A otimização de desempenho precisa ser uma atividade contínua durante toda a vida útil da carga de trabalho. O desempenho da carga de trabalho geralmente degrada ou se torna excessivo ao longo do tempo, e os fatores a serem considerados incluem alterações nos padrões de uso, na demanda, nos recursos e na dívida técnica.

Definições

Termo Definição
Camada de dados Uma estratégia de armazenamento que envolve categorizar dados com base em sua frequência de acesso e armazená-los em camadas de armazenamento adequadamente.
Débito técnico As ineficiências acumuladas, opções de design abaixo do ideal ou atalhos intencionalmente feitos durante o processo de desenvolvimento para fornecer código mais rapidamente.
Vida útil Um mecanismo que define um tempo de expiração para os dados.

Principais estratégias de design

A eficiência de desempenho é quando a capacidade da carga de trabalho se alinha ao uso real. Uma carga de trabalho que se sobrepõe é tão problemática quanto uma que tem baixo desempenho. As compensações diferem. O excesso de desempenho afeta a otimização de custos. O baixo desempenho afeta os usuários. A chave para a eficiência do desempenho é monitorar, ajustar e testar ao longo do tempo. Você precisa examinar regularmente as métricas de desempenho e fazer ajustes conforme necessário para garantir que a carga de trabalho seja eficiente. É necessário testar todas as alterações pré e pós-implementação para atingir as metas de desempenho.

Desenvolver uma cultura de desempenho

Uma cultura de desempenho é um ambiente no qual a melhoria contínua é esperada e a equipe aprende com a produção. A otimização de desempenho requer habilidades especializadas. As equipes de carga de trabalho precisam das habilidades e da mentalidade certas para otimizar seu desempenho para atender aos aumentos e diminuições na demanda. Você também precisa alocar seu tempo para dar suporte ao monitoramento e correção necessários de problemas de desempenho à medida que eles surgem. Essas equipes precisam de expectativas claras. Por exemplo, metas de desempenho, linhas de base e limites de desvio (quão longe da linha de base é aceitável) precisam ser altamente visíveis e socializados.

Compensação: as otimizações contínuas de desempenho exigem uma equipe que tenha as habilidades e o tempo certos para encontrar e corrigir problemas de desempenho. Dedicar pessoal ao desempenho aumenta o custo operacional. Se você tiver recursos de pessoal limitados, a otimização contínua de desempenho poderá tirar um tempo de outras tarefas operacionais.

Avaliar novos recursos da plataforma

Avaliar novos recursos de plataforma envolve examinar as novas funcionalidades e ferramentas de uma plataforma que podem melhorar a eficiência do desempenho, como soluções de armazenamento otimizadas, mecanismos de cache ou ferramentas de gerenciamento de recursos. Novos recursos da plataforma podem abrir caminhos para melhorar a eficiência do desempenho. Mantenha sua plataforma e ferramentas atualizadas para garantir que você esteja usando as inovações e as melhores práticas mais recentes. Monitore consistentemente os comentários e as métricas de desempenho dessas novas adições para refinar sua abordagem.

Priorizar os esforços de otimização

Otimizar proativamente o desempenho significa tomar medidas proativas para melhorar e melhorar o desempenho da carga de trabalho antes que ocorram problemas de desempenho. O uso de medidas proativas envolve identificar possíveis gargalos, monitorar métricas de desempenho e implementar otimizações para garantir que a carga de trabalho opere com eficiência e atenda às metas de desempenho desejadas. Com base na análise de componentes deteriorados, fluxos críticos e dívida técnica, você pode implementar otimizações de desempenho específicas para cada área. Melhorias podem envolver alterações de código, ajustes de infraestrutura ou atualizações de configuração.

Priorizar componentes deteriorados

Uma carga de trabalho geralmente tem componentes como bancos de dados e componentes de rede propensos a degradações de desempenho ao longo do tempo. À medida que a carga de trabalho evolui e os padrões de uso mudam, essas alterações geralmente afetam o desempenho de componentes individuais na carga de trabalho. O aumento de dados em bancos de dados pode levar a tempos de execução de consulta mais longos e recuperação de dados mais lenta. Alterações nos padrões de uso podem resultar em design de consulta abaixo do ideal. Consultas que antes eram eficientes podem se tornar ineficientes à medida que a carga de trabalho evolui. Consultas ineficientes podem consumir recursos excessivos e prejudicar o desempenho do banco de dados. O aumento do uso da carga de trabalho pode levar a um tráfego de rede maior, causando problemas de congestionamento e latência.

É importante fazer esforços contínuos para otimizar o desempenho desses componentes. Identifique e resolva proativamente problemas de desempenho em sua carga de trabalho. Ao priorizar componentes de deterioração conhecidos, você pode resolver proativamente possíveis problemas de desempenho e garantir a operação tranquila da carga de trabalho. Isso pode envolver a implementação de técnicas de ajuste de desempenho, a otimização da alocação de recursos ou a atualização de componentes de hardware ou software, conforme necessário.

Priorizar fluxos críticos

Fluxos críticos são os processos ou fluxos de trabalho mais importantes e de alta prioridade na carga de trabalho. Ao priorizar esses fluxos críticos, você garante que as partes mais essenciais da carga de trabalho sejam otimizadas para o desempenho. Saber quais fluxos são críticos ajuda a priorizar os esforços de otimização. Otimizar a eficiência de desempenho das áreas mais importantes do seu aplicativo fornece o maior retorno sobre o investimento. Você deve monitorar fluxos críticos e as páginas mais populares. Procure maneiras de torná-los mais eficientes.

Automatizar a otimização de desempenho

A automação pode eliminar processos manuais repetitivos e demorados, permitindo que eles sejam executados com eficiência. A automação reduz as chances de erro humano e garante a consistência na execução de tarefas de otimização. Ao automatizar essas tarefas, você também pode liberar pessoas para se concentrarem em atividades e atividades mais complexas que agregam valor. Você pode aplicar automação a várias tarefas, como teste de desempenho, implantação e monitoramento:

  • Teste de desempenho automatizado: use ferramentas automatizadas de teste de desempenho, como JMeter, K6 ou Selenium, para simular diferentes cargas de trabalho e cenários.

  • Implantação automatizada: implemente processos de implantação automatizados para garantir implantações consistentes e sem erros. Use as ferramentas de CI/CD para automatizar o processo de implantação. Essas ferramentas podem ajudá-lo a identificar gargalos de desempenho conforme você os usa para testar pontos de extremidade, marcar status HTTP e até mesmo validar a qualidade e as variações dos dados.

  • Monitoramento e alertas: configure sistemas automatizados de monitoramento e alertas para monitorar continuamente as métricas de desempenho e detectar desvios ou anomalias. Quando problemas de desempenho são detectados, alertas automatizados podem ser disparados para notificar as equipes ou indivíduos apropriados.

  • Gerenciamento de incidentes: implemente um sistema automatizado de gerenciamento de incidentes que possa receber alertas, criar tíquetes e atribuir tíquetes às equipes apropriadas para resolução. Essas etapas ajudam a garantir que os problemas de desempenho sejam resolvidos imediatamente e atribuídos aos recursos certos.

  • Diagnóstico automatizado: desenvolva ferramentas de diagnóstico automatizadas ou scripts que possam analisar dados de desempenho e identificar as causas raiz dos problemas de desempenho. Essas ferramentas podem ajudar a identificar áreas ou componentes específicos do sistema que estão causando problemas de desempenho.

  • Ações de correção automatizadas: defina e implemente ações de correção automatizadas que podem ser disparadas quando problemas de desempenho específicos são detectados. Essas ações podem incluir reiniciar serviços, ajustar a alocação de recursos, limpar caches ou implementar outras técnicas de otimização de desempenho.

  • Sistemas de autorrecuperação: crie recursos de autorrecuperação em seu sistema automatizando o processo de recuperação para problemas de desempenho conhecidos. Essa funcionalidade pode envolver a correção ou o ajuste automático da configuração do sistema para restaurar o desempenho ideal.

Resolver dívida técnica

A dívida técnica refere-se às ineficiências acumuladas, opções de design abaixo do ideal ou atalhos feitos durante o processo de desenvolvimento que podem afetar o desempenho. A dívida técnica, o código não claro e implementações excessivamente complexas podem tornar a eficiência de desempenho mais difícil de alcançar. Lidar com a dívida técnica envolve identificar e resolver esses problemas para melhorar o desempenho geral e a manutenção da carga de trabalho. Esse trabalho pode incluir a refatoração de código, a otimização de consultas de banco de dados, a melhoria do design arquitetônico ou a implementação de práticas recomendadas. Talvez você tenha introduzido a dívida técnica para cumprir um prazo, mas precisa resolver a dívida técnica à medida que otimiza a eficiência de desempenho ao longo do tempo.

Otimizar bancos de dados

A otimização contínua de bancos de dados envolve a identificação e a implementação de otimizações para garantir que os bancos de dados possam lidar com cargas, fornecer tempos de resposta rápidos e minimizar a utilização de recursos. Ao otimizar regularmente os bancos de dados, você pode melhorar o desempenho do aplicativo, reduzir o tempo de inatividade e aprimorar a experiência geral do usuário.

  • Otimizar consultas de banco de dados: instruções SQL mal gravadas podem prejudicar o desempenho do banco de dados. Condições JOIN ineficientes podem causar processamento desnecessário de dados. Subconsultas complexas, consultas aninhadas e funções excessivas podem reduzir a velocidade de execução. Consultas que recuperam dados demais devem ser reescritas. Você deve identificar suas consultas de banco de dados mais comuns ou críticas e otimizá-las. A otimização ajuda a garantir consultas mais rápidas.

  • Manter índices: avalie sua estratégia de indexação para garantir que os índices sejam projetados e mantidos corretamente. A manutenção do índice inclui a identificação de índices não utilizados ou redundantes e a criação de índices que se alinham aos padrões de consulta. Os índices de banco de dados ajudam a acelerar as operações de recuperação de dados. Para bancos de dados relacionais, você precisa monitorar a fragmentação de índice. Você deve recompilar ou reorganizar índices regularmente. Para bancos de dados não relacionais, você precisa escolher a política de indexação correta para sua carga de trabalho. Use o ajuste automático em bancos de dados quando disponível. Esses recursos incluem a criação automática de índices ausentes, a remoção de índices não utilizados e a correção do plano. Para obter mais informações, consulte Mantendo índices para melhorar o desempenho.

  • Examinar o design do modelo: examine o modelo de dados para garantir que você otimize-o para os requisitos específicos do aplicativo. Melhorar o desempenho da consulta e a recuperação de dados pode envolver desnormalização, particionamento ou outras técnicas.

  • Otimizar a configuração do banco de dados: otimize as configurações de configuração do banco de dados, como alocação de memória, E/S de disco e configurações de simultaneidade para maximizar o desempenho e a utilização de recursos.

Otimizar a eficiência de dados

Otimizar a eficiência de dados é o processo de garantir que os dados sejam armazenados, processados e acessados da maneira mais eficiente possível. A camada de dados e o uso de TTL (vida útil) são técnicas que podem ser usadas para otimizar a eficiência dos dados. Você pode aplicar essas técnicas em vários cenários de armazenamento de dados, como bancos de dados, sistemas de arquivos ou armazenamento de objetos.

  • Usar camadas de dados: a camada de dados envolve categorizar dados com base em sua importância ou frequência de acesso e armazenamento de dados em diferentes camadas adequadamente. A configuração da camada de dados permite um uso mais eficiente dos recursos de armazenamento e melhora o desempenho. Os dados acessados com frequência ou críticos podem ser armazenados em camadas de alto desempenho, enquanto dados menos acessados ou menos críticos podem ser armazenados em camadas de menor custo. A meta é examinar o uso de dados ao longo do tempo para garantir que os dados estão na camada correta. À medida que as prioridades de dados mudam, os dados devem passar de uma camada para outra.

  • Implementar vida útil: a vida útil é um mecanismo que define um tempo de expiração para os dados. O tempo de vida útil permite que os dados sejam excluídos ou arquivados automaticamente após um determinado período, reduzindo os requisitos de armazenamento e melhorando o gerenciamento de dados. Ao definir um tempo de vida apropriado, você permite que dados desnecessários sejam removidos, liberando espaço de armazenamento e melhorando a eficiência geral. Dados de sessão, arquivos temporários e dados de cache são destinos frequentes para a vida útil. As entradas de banco de dados também podem ter um tempo de vida útil.

Risco: um tempo de vida muito curto pode criar problemas de desempenho.

Facilitação do Azure

Automatizando a otimização de desempenho: o Assistente do Azure fornece recomendações automáticas de desempenho com base na telemetria da carga de trabalho. Você deve examinar e abordar essas recomendações regularmente. O Azure Monitor fornece insights em tempo real sobre o desempenho do sistema e permite configurar alertas com base em métricas de desempenho específicas. O Azure Log Analytics fornece diagnóstico e análise automatizadas em logs e métricas coletados. Ferramentas como Aplicativo Azure Insights fornecem insights e recomendações para otimizar o desempenho.

Para automatizar a correção, use ferramentas de automação ou scripts para executar ações de correção automaticamente quando os alertas forem disparados. Você pode usar Automação do Azure, Azure Functions ou soluções de automação personalizadas.

O Azure permite que o teste de desempenho simule diferentes cenários de usuário e cargas de trabalho. Os testes automatizados podem ajudá-lo a identificar gargalos de desempenho e otimizar seu sistema adequadamente. Ferramentas como o Azure DevOps podem automatizar testes de desempenho.

Otimizando bancos de dados: a família SQL de produtos tem muitos recursos internos que permitem monitorar e corrigir o desempenho do banco de dados SQL. Você deve usar esses recursos para manter o desempenho do banco de dados. SQL do Azure Banco de Dados tem um recurso de ajuste automático que monitora e melhora continuamente as consultas. Você deve usar esse recurso para melhorar as consultas SQL automaticamente.

Você pode personalizar suas políticas de indexação usando os recursos do Azure Cosmos DB. Personalize as políticas para atender às necessidades de desempenho da carga de trabalho.

Otimizando a eficiência de dados: a camada de dados permite que você armazene dados em diferentes camadas com base em sua frequência de acesso e importância. Ele ajuda a otimizar os custos de armazenamento e o desempenho. O Azure fornece diferentes camadas de armazenamento, como camadas quentes, esporádicas e de arquivos para dados de blob. As camadas quentes são otimizadas para dados acessados com frequência, as camadas esporádicas são para dados acessados com pouca frequência e as camadas de arquivo morto são para dados raramente acessados. Usando a camada de acesso de armazenamento mais adequada aos seus dados, você pode garantir o armazenamento e a recuperação de dados eficientes.

Lista de verificação de eficiência de desempenho

Consulte o conjunto completo de recomendações.