Eficiência de desempenho

Concluído

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

Nesta unidade, analisamos 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 de desempenho?

A eficiência de desempenho é combinar os recursos disponíveis de um aplicativo com a demanda que ele está recebendo. A eficiência de desempenho inclui o dimensionamento dos recursos, a identificação e otimização dos possíveis estrangulamentos e a otimização do código da sua aplicação para obter o máximo desempenho.

Vamos ver alguns padrões e práticas que podem melhorar a escalabilidade e o desempenho da sua aplicação.

Aumentar verticalmente e horizontalmente

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

  • Aumentar verticalmente consiste em adicionar mais recursos a uma única instância. Também conhecido como dimensionamento vertical.

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

  • Aumentar verticalmente consiste em adicionar mais instâncias. Também conhecido como dimensionamento horizontal.

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

A expansão diz respeito à adição de mais recursos, como CPU ou memória, a uma única instância. Esta instância pode ser uma máquina virtual ou um serviço PaaS.

O ato de adicionar mais capacidade a uma instância aumenta os recursos que estão disponíveis na sua aplicação, mas há um limite. As máquinas virtuais são limitadas à capacidade do host no qual são executadas, e os próprios hosts têm limitações físicas. Eventualmente, quando se aumenta verticalmente uma instância, pode deparar-se com estes limites, que restringem a sua capacidade de adicionar mais recursos à instância.

A expansão diz respeito à adição de mais instâncias a um serviço. Estas podem ser máquinas virtuais ou serviços PaaS, mas em vez de adicionar mais capacidade, o que faz com que uma única instância seja mais potente, adicionamos capacidade ao aumentar o número total de instâncias.

A vantagem do aumento horizontal é que poderá perfeitamente aumentar horizontalmente para sempre se tiver mais máquinas para adicionar à arquitetura. O aumento 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 casos de aumento, os recursos podem ser reduzidos, o que leva à otimização dos custos.

O dimensionamento automático é o processo de alocar dinamicamente recursos para satisfazer requisitos de desempenho. À medida que o volume de trabalho cresce, as aplicações podem precisar de mais recursos para manter os níveis de desempenho pretendidos e satisfazer os contratos de nível de serviço (SLAs). À medida que a demanda diminui e os recursos adicionais não são mais necessários, eles podem ser desalocados para minimizar os custos.

O dimensionamento automático tira partido da elasticidade dos ambientes alojados na cloud e alivia a gestão administrativa. Reduz a necessidade de um operador monitorizar continuamente o desempenho de um sistema e tomar decisões quanto a adicionar ou remover recursos.

Otimizar o desempenho da rede

Ao otimizar o desempenho, você analisa o desempenho da rede e do armazenamento para garantir que seus níveis estejam dentro dos limites aceitáveis. Os níveis de desempenho podem afetar o tempo de resposta da sua aplicação. Selecionar as tecnologias de rede e armazenamento certas para sua arquitetura ajuda a garantir que você esteja oferecendo a melhor experiência para seus consumidores.

A adição de uma camada de mensagens entre serviços pode ser vantajosa para o desempenho e a escalabilidade. A adição de uma camada de mensagens cria uma memória intermédia para que os pedidos possam continuar a fluir sem erros se a aplicação recetora não conseguir acompanhar. À medida que o aplicativo trabalha com 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 estão divididos em partições separadas que podem ser geridas e acedidas separadamente. A estratégia de criação de partições tem de ser escolhida cuidadosamente para maximizar as vantagens, minimizando, ao mesmo tempo, os efeitos adversos. A criação de partições pode ajudar melhorar a escalabilidade, reduzir a contenção e otimizar o desempenho.

Utilize a colocação em cache na sua arquitetura para ajudar a melhorar o desempenho. A colocação em cache é um mecanismo para armazenar dados ou recursos utilizados com frequência (páginas Web, imagens) para os obter mais rapidamente. Pode utilizar a colocação em cache em camadas diferentes da sua aplicação. Pode utilizar a colocação em cache entre os servidores da sua aplicação e uma base de dados de forma a diminuir o tempo de obtenção de dados.

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

Identificar estrangulamentos de desempenho na sua aplicação

As aplicações distribuídas e os serviços em execução na cloud são elementos de software complexos constituídos por inúmeras partes móveis. Em um ambiente de produção, é importante ser capaz de rastrear 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 seu sistema. Pode utilizar estas informações como um auxílio de diagnóstico para detetar e corrigir problemas. Também pode utilizar estas informações para ajudar a detetar potenciais problemas e evitá-los.

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

Analise todas as camadas da sua aplicação e identifique e resolva os estrangulamentos de desempenho. A baixa capacidade de memória na sua aplicação ou até mesmo o processo de adição de índices à sua base de dados são exemplos de estrangulamentos. Pode ser um processo iterativo, porque pode resolver um estrangulamento e, depois, deparar-se com outro que não conhecia.

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

Verifique o seu conhecimento

1.

Qual das seguintes opções é um exemplo de expansão (escala vertical)?

2.

Qual das seguintes opções é um exemplo de dimensionamento (dimensionamento horizontal)?