Eficiência de desempenho

Concluído

Imagine que uma notícia foi publicada sobre um dos recentes comunicados de produtos da sua organização. A publicidade adicional da notícia traz um grande fluxo de tráfego para o seu site. Seu site pode lidar com esse aumento de tráfego? Seu site pode assumir a carga extra sem ficar lento ou sem resposta?

Nesta unidade, examinamos alguns dos princípios básicos para garantir um excelente desempenho do aplicativo. Especialmente, os princípios de dimensionamento e otimização que compõem o pilar de eficiência de desempenho.

O que é a eficiência do desempenho?

A eficiência do desempenho é a correspondência dos recursos disponíveis de um aplicativo com a demanda que ele recebe. A eficiência do desempenho inclui dimensionar recursos, identificar e otimizar os possíveis gargalos e aprimorar o código do aplicativo para melhorar o desempenho em picos.

Vamos analisar alguns padrões e práticas que podem melhorar a escalabilidade e o desempenho do seu aplicativo.

Escalar verticalmente e horizontalmente

Recursos de computação podem ser dimensionados em duas direções:

  • Escalar verticalmente é adicionar mais recursos a uma instância. Isso também é conhecido como escalonamento vertical.

    An illustration that shows scaling up by adding resources to a virtual machine.

  • Escalar horizontalmente é adicionar mais instâncias. Isso também é conhecido como escalonamento horizontal.

    An illustration that shows scaling out by adding instances to increase performance.

Escalar verticalmente é adicionar mais recursos, como CPU ou memória, a uma instância. Essa instância pode ser uma máquina virtual ou um serviço de PaaS.

O ato de adicionar mais capacidade à instância aumenta os recursos disponíveis para o aplicativo, mas isso tem um limite. As máquinas virtuais são limitadas à capacidade do host na qual são executadas, e os hosts têm limitações físicas. Você pode encontrar esses limites ao escalar verticalmente uma instância. Eles restringem sua capacidade de adicionar mais recursos à instância.

A escala horizontal é adicionar mais instâncias a um serviço. Podem ser máquinas virtuais ou serviços de PaaS. Em vez de adicionar mais capacidade tornando uma única instância mais potente, a capacidade é adicionada aumentando o número total de instâncias.

A vantagem de escala horizontal é que você pode, em teoria, escalar horizontalmente para sempre se tiver mais computadores a serem adicionados à arquitetura. A escala horizontal requer algum tipo de distribuição de carga. Por exemplo, um balanceador de carga que distribui solicitações entre servidores disponíveis ou um mecanismo de descoberta de serviço para identificar servidores ativos para os quais enviar solicitações.

Em ambos os tipos de escala, os recursos podem ser reduzidos, o que gera otimização de custos.

O dimensionamento automático é o processo de alocar recursos dinamicamente para atender aos requisitos de desempenho. À medida que o volume de trabalho aumenta, um aplicativo pode precisar de recursos adicionais para manter os níveis de desempenho desejados e atender aos SLAs (Contrato de Nível de Serviço). Conforme a demanda diminui e os recursos adicionados deixam de ser necessários, é possível desalocá-los para minimizar os custos.

O dimensionamento automático aproveita a elasticidade de ambientes hospedados na nuvem e ainda alivia a sobrecarga no gerenciamento. Ele reduz a necessidade de um operador monitorar constantemente o desempenho de um sistema e toma decisões sobre a adição ou remoção de recursos.

Otimizar o desempenho de rede

Quando estiver otimizando para aumentar o desempenho, você examina o desempenho de rede e de armazenamento para garantir que os níveis estejam dentro de limites aceitáveis. Esses níveis de desempenho podem afetar o tempo de resposta do seu aplicativo. Selecionar as tecnologias certas de rede e armazenamento para a sua arquitetura ajuda a garantir a melhor experiência para seus consumidores.

Adicionar uma camada de mensagens entre os serviços pode beneficiar o desempenho e a escalabilidade. Uma camada de mensagens criará um buffer para que as solicitações possam continuar a fluir sem erros se o aplicativo receptor não puder acompanhar. Conforme o aplicativo percorre as solicitações, elas são respondidas na ordem em que foram recebidas.

Otimizar o desempenho de armazenamento

Em muitas soluções de grande escala, os dados são divididos em partições separadas que podem ser gerenciadas e acessadas separadamente. A estratégia de particionamento deve ser cuidadosamente escolhida para maximizar os benefícios, ao mesmo tempo que minimiza os efeitos adversos. O particionamento pode ajudar a aprimorar a escalabilidade, reduzir a contenção e otimizar o desempenho.

Use o cache em sua arquitetura para ajudar a aprimorar o desempenho. O cache é um mecanismo para armazenar dados ou ativos (páginas da Web, imagens) usados com frequência para acelerar a recuperação. O cache pode ser usado em diferentes camadas do aplicativo. Você pode usar o cache entre os servidores de aplicativo e um banco de dados para diminuir os tempos de recuperação de dados.

Também pode usar o cache entre os usuários e os servidores Web, colocando conteúdo estático mais perto do usuário. Esse tipo de cache diminui o tempo necessário para retornar páginas da Web aos usuários. Ele também tem o efeito secundário de descarregar solicitações de seus servidores Web ou banco de dados, aumentando o desempenho para outras solicitações.

Identificar gargalos de desempenho em seu aplicativo

Os serviços e os aplicativos distribuídos em execução na nuvem são partes complexas de software que incluem diversas partes em movimento. Em um ambiente de produção, é importante poder acompanhar a maneira como os usuários utilizam seu sistema. Também é importante rastrear a utilização de recursos e geralmente monitorar a integridade e o desempenho do sistema. Use essas informações como um apoio ao diagnóstico para detectar e corrigir problemas. Além disso, para ajudar a identificar possíveis problemas e impedir que eles ocorram.

A otimização de desempenho inclui o entendimento sobre o desempenho dos próprios aplicativos. Erros, código com baixo desempenho e gargalos em sistemas dependentes podem ser descobertos usando uma ferramenta de gerenciamento de desempenho do aplicativo. Muitas vezes, esses problemas podem estar ocultos ou ofuscados para usuários, desenvolvedores e administradores, mas podem ter um efeito adverso no desempenho geral do aplicativo.

Examine todas as camadas do aplicativo e identifique e corrija os gargalos de desempenho. Esses gargalos podem ser uma manipulação ruim da memória no aplicativo ou até mesmo o processo de adicionar índices ao banco de dados. Talvez o processo seja iterativo, pois você pode aliviar um gargalo e, em seguida, descobrir outro do qual não estava ciente.

Com uma abordagem completa do monitoramento de desempenho, você pode determinar os tipos de padrões e práticas dos quais sua arquitetura pode se beneficiar.

Verificar seu conhecimento

1.

Qual das alternativas a seguir é um exemplo de expansão vertical (escalar verticalmente)?

2.

Qual das alternativas a seguir é um exemplo de expansão horizontal (escalar horizontalmente)?