Compartilhar via


Estratégias de arquitetura 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 Otimize 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 constante, análise e melhoria da eficiência de desempenho. A eficiência de desempenho adapta-se a aumentos e diminuições na demanda. A otimização de desempenho precisa ser uma atividade contínua ao longo da 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, demanda, recursos e dívida técnica.

Definições

Prazo Definition
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ívida técnica As ineficiências acumuladas, as opções de design abaixo do ideal ou os atalhos feitos intencionalmente 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.

A eficiência de desempenho é quando a capacidade da carga de trabalho se alinha ao uso real. Uma carga de trabalho que superaperforma é tão problemática quanto aquela que tem baixo desempenho. As compensações diferem. O excesso de desempenho afeta a otimização de custo. O desempenho ruim afeta os usuários. A chave para a eficiência de 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 a 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, destinos 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 a equipe 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 de plataforma podem abrir caminhos para melhorar a eficiência do desempenho. Mantenha sua plataforma e ferramentas up-to-date para garantir que você esteja usando as inovações e as práticas recomendadas mais recentes. Monitore consistentemente comentários e métricas de desempenho dessas novas adições para refinar sua abordagem.

Priorizar 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 surjam 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 funcione 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 deterioradores

Uma carga de trabalho geralmente tem componentes como bancos de dados e componentes de rede que são 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 dos 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 degradar 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. Pode envolver a implementação de técnicas de ajuste de desempenho, otimização da alocação de recursos ou 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 as pessoas para se concentrarem em atividades e atividades mais complexas que agregam valor. Você pode aplicar a 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 à medida que você os usa para testar pontos de extremidade, verificar 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 quaisquer 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 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 auto-recuperação: crie recursos de auto-recuperação em seu sistema automatizando o processo de recuperação para problemas de desempenho conhecidos. Essa funcionalidade pode envolver a correção ou 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. Dívida técnica, código não claro e implementações excessivamente complexas podem dificultar a obtenção de eficiência de desempenho. O endereçamento da 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 refatoração de código, otimização de consultas de banco de dados, melhoria do design arquitetônico ou 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 identificar e implementar 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 de dados desnecessários. Subconsultas complexas, consultas aninhadas e funções excessivas podem reduzir a velocidade de execução. Consultas que recuperam muitos dados 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 com os 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 do índice. Você deve recriar 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 Manter índices para melhorar o desempenho.

  • Revise 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.

  • Use a camada de dados: a camada de dados envolve a categorização de 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 o uso mais eficiente dos recursos de armazenamento e melhora o desempenho. Dados frequentes 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 o tempo de vida útil: o tempo de 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 o tempo de vida útil. As entradas de banco de dados também podem ter um tempo de vida útil.

Risco: um tempo de vida útil 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 que você configure alertas com base em métricas de desempenho específicas. O Azure Log Analytics fornece diagnóstico e análise automatizados em logs e métricas coletados. Ferramentas como o Azure Application 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 a Automação do Azure, o 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. Testes automatizados podem ajudá-lo a identificar gargalos de desempenho e otimizar seu sistema adequadamente. Ferramentas como o Azure DevOps podem automatizar o teste de desempenho.

Otimização de bancos de dados: a família de produtos SQL 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. O Banco de Dados SQL do Azure tem um recurso de ajuste automático que monitora e aprimora 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 frequentes são otimizadas para dados acessados com frequência, as camadas frias 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.