Partilhar via


Estratégias de arquitetura para otimização contínua de desempenho

Aplica-se a esta recomendação da 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 deterioração do desempenho ao longo do tempo, como bancos de dados e recursos de rede.

Este guia descreve as recomendações para otimização contínua do desempenho. A otimização contínua do desempenho é o processo de monitorar, analisar e melhorar constantemente a eficiência do desempenho. A eficiência de desempenho adapta-se a aumentos e diminuições na procura. A otimização do desempenho precisa ser uma atividade contínua durante toda a vida útil da carga de trabalho. O desempenho da carga de trabalho muitas vezes se degrada ou se torna excessivo com o tempo, e os fatores a serem considerados incluem mudanças nos padrões de uso, demanda, recursos e dívida técnica.

Definições

Term Definition
Hierarquização de dados Uma estratégia de armazenamento que envolve categorizar dados com base em sua frequência de acesso e armazená-los em níveis de armazenamento de acordo.
Dívida técnica As ineficiências acumuladas, escolhas de design subótimas ou atalhos intencionalmente tomados durante o processo de desenvolvimento para entregar código mais rapidamente.
Tempo de vida Um mecanismo que define um tempo de expiração para os dados.

A eficiência de desempenho ocorre quando a capacidade da carga de trabalho se alinha ao uso real. Uma carga de trabalho com desempenho excessivo é tão problemática quanto uma com desempenho inferior. As compensações diferem. O desempenho excessivo afeta a otimização de custos. O mau desempenho afeta os utilizadores. A chave para a eficiência do desempenho é monitorar, ajustar e testar ao longo do tempo. Você precisa revisar regularmente as métricas de desempenho e fazer os ajustes necessários para garantir que a carga de trabalho seja eficiente. É necessário testar todas as alterações antes e depois da implementação para atingir as metas de desempenho.

Desenvolver uma cultura de desempenho

Uma cultura de desempenho é um ambiente em que a melhoria contínua é esperada e a equipe aprende com a produção. A otimização do desempenho requer habilidades especializadas. As equipes de carga de trabalho precisam das habilidades e 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. Estas equipas precisam de expectativas claras. Por exemplo, metas de desempenho, linhas de base e limiares de desvio (quão longe da linha de base é aceitável) precisam ser altamente visíveis e socializados.

Compensação: 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 do desempenho pode tirar tempo de outras tarefas operacionais.

Avalie os novos recursos da plataforma

A avaliação de novos recursos da 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. Os novos recursos da plataforma podem abrir caminhos para melhorar a eficiência do desempenho. Mantenha sua plataforma e ferramentas up-toatualizadas para garantir que você esteja usando as últimas inovações e práticas recomendadas. Monitore consistentemente o feedback e as métricas de desempenho dessas novas adições para refinar sua abordagem.

Priorize 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 surjam quaisquer problemas de desempenho. O uso de medidas proativas envolve a identificação de possíveis gargalos, o monitoramento de métricas de desempenho e a implementação de otimizações para garantir que a carga de trabalho opere de forma eficiente 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. As melhorias podem envolver alterações de código, ajustes de infraestrutura ou atualizações de configuração.

Priorize componentes deteriorados

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 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 um 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 maior tráfego de rede, 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 conhecidos em deterioração, você pode resolver proativamente possíveis problemas de desempenho e garantir o bom funcionamento de sua 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

Os 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 desempenho. Saber quais fluxos são críticos ajuda a priorizar os esforços de otimização. A otimização da eficiência de desempenho das áreas mais importantes do seu aplicativo proporciona o maior retorno sobre o investimento. Você deve monitorar os fluxos críticos e as páginas mais populares. Procure formas de os tornar mais eficientes.

Automatize a otimização do desempenho

A automação pode eliminar processos manuais repetitivos e demorados, permitindo que sejam executados de forma eficiente. A automação reduz as chances de erro humano e garante 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 mais complexas e atividades que agregam valor. Você pode aplicar a automação a várias tarefas, como testes de desempenho, implantação e monitoramento:

  • Testes de desempenho automatizados: use ferramentas de teste de desempenho automatizadas 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 ferramentas de CI/CD para automatizar o processo de implantação. Essas ferramentas podem ajudá-lo a identificar gargalos de desempenho à medida que você as usa para testar em relação a pontos de extremidade, verificar status HTTP e até mesmo validar a qualidade e as variações dos dados.

  • Monitoramento e alerta: configure sistemas automatizados de monitoramento e alerta para monitorar continuamente as métricas de desempenho e detetar quaisquer desvios ou anomalias. Quando problemas de desempenho são detetados, alertas automatizados podem ser acionados 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 prontamente resolvidos e atribuídos aos recursos certos.

  • Diagnóstico automatizado: desenvolva ferramentas de diagnóstico automatizado ou scripts que possam analisar dados de desempenho e identificar as causas básicas de 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 acionadas quando problemas de desempenho específicos são detetados. 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. Esse recurso pode envolver a correção ou ajuste automático da configuração do sistema para restaurar o desempenho ideal.

Resolver o problema da dívida técnica

A dívida técnica refere-se às ineficiências acumuladas, escolhas de design subótimas ou atalhos tomados durante o processo de desenvolvimento que podem afetar o desempenho. Dívida técnica, código pouco 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 capacidade de 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 projeto arquitetônico ou a implementação de práticas recomendadas. Talvez você tenha introduzido a dívida técnica para cumprir um prazo, mas você 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 melhorar a experiência geral do usuário.

  • Otimizar consultas de banco de dados: instruções SQL mal escritas podem degradar o desempenho do banco de dados. Condições JOIN ineficientes podem causar processamento de dados desnecessário. Subconsultas complexas, consultas aninhadas e funções excessivas podem reduzir a velocidade de execução. As 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 de índices 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 reconstruir 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íveis. Esses recursos incluem a criação automática de índices ausentes, a eliminação de índices não utilizados e a correção de planos. Para obter mais informações, consulte Mantendo índices para melhorar o desempenho.

  • Revisar o design do modelo: revise o modelo de dados para garantir que você o otimize 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 definiçõ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.

Otimize a eficiência dos dados

Otimizar a eficiência dos dados é o processo de garantir que os dados sejam armazenados, processados e acessados da maneira mais eficiente possível. A hierarquização de dados e o uso do tempo de vida (TTL) 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 hierarquização de dados: a hierarquização de dados envolve a categorização de dados com base em sua importância ou frequência de acesso e o armazenamento de dados em diferentes camadas de acordo. A configuração da hierarquização de dados permite um uso mais eficiente dos recursos de armazenamento e melhora o desempenho. Dados críticos ou acessados com frequência podem ser armazenados em camadas de alto desempenho, enquanto dados acessados com menos frequência ou menos críticos podem ser armazenados em camadas de baixo custo. O objetivo é revisar o uso de dados ao longo do tempo para garantir que os dados estejam na camada correta. À medida que as prioridades de dados mudam, os dados devem passar de uma camada para outra.

  • Implementar time-to-live: Time-to-live é um mecanismo que define um tempo de expiração para os dados. O tempo de vida permite que os dados sejam automaticamente excluídos ou arquivados após um determinado período, reduzindo os requisitos de armazenamento e melhorando o gerenciamento de dados. Ao definir um tempo de vida adequado, 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 alvos frequentes para o tempo de vida. As entradas do banco de dados também podem ter um tempo de vida.

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

Gestão do Azure

Automatizando a otimização de desempenho: o Azure Advisor fornece recomendações automáticas de desempenho com base na telemetria da carga de trabalho. Deve rever e abordar estas recomendações regularmente. O Azure Monitor fornece informações em tempo real sobre o desempenho do seu sistema e permite-lhe configurar alertas com base em métricas de desempenho específicas. O Azure Log Analytics fornece diagnósticos e análises automatizados em logs e métricas coletados. Ferramentas como o Azure Application Insights fornecem informações 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 acionados. Você pode usar a Automação do Azure, o Azure Functions ou soluções de automação personalizadas.

O Azure permite testes de desempenho para simular 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 de acordo. Ferramentas como o Azure DevOps podem automatizar testes 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 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 de sua carga de trabalho.

Otimizando a eficiência dos dados: a hierarquização de dados permite armazenar dados em diferentes camadas com base em sua frequência e importância de acesso. Ele ajuda a otimizar os custos de armazenamento e o desempenho. O Azure fornece diferentes camadas de armazenamento, como camadas quentes, frias e de arquivamento para dados de blob. As camadas quentes são otimizadas para dados acessados com frequência, as camadas legais são para dados acessados com pouca frequência e as camadas de arquivamento são para dados raramente acessados. Usando o nível de acesso de armazenamento mais adequado aos seus dados, você pode garantir armazenamento e recuperação de dados eficientes.

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

Consulte o conjunto completo de recomendações.