Escalar através de adição de mais hardware até funciona bem se um aplicativo é multithreaded, ou se várias instâncias podem ser executadas em conjunto em uma mesma máquina. Sendo que adicionar mais hardware significa um acréscimo do consumo de memória e demais recursos associados principalmente se os processos forem pesados.

Distribuir o processamento em diferentes servidores funciona bem se o trabalho necessário para gerenciar a distribuição das requisições entre as várias máquinas for pequeno. O objetivo é manter cada máquina igualmente ocupada, como o investimento em mais hardware é desperdiçado se uma máquina estiver totalmente ocupada enquanto as demais estão ociosas. Distribuir a carga uniformemente entre várias máquinas é conhecido como balanceamento de carga.

É importante ressaltar que, para ambas as abordagens, a escalabilidade deve ser alcançada sem modificações na arquitetura da aplicação.

Na realidade, como a carga aumenta, as aplicações irão apresentar uma diminuição no throughput e um aumento exponencial no tempo de resposta. Isto acontece por duas razões.

Em primeiro lugar, com o aumento de carga, aumenta a disputa por recursos como CPU e memória por parte dos processos e threads na arquitetura do servidor.
Em segundo lugar, cada solicitação consome algum recurso adicional (espaço de buffer, locks, e assim por diante) e, eventualmente, estes recursos tornam-se esgotados o que limita a escalabilidade.

Apenas para ilustrar, a figura abaixo mostra como seis diferentes versões do mesmo aplicativo implementado usando diferentes servidores de aplicação JEE se comportam com um aumento de carga de 100 para 1.000 clientes.

Efeitos do aumento da carga de solicitação de cliente em plataformas JEE
Copyright © 2016 AIEC.