# Escalabilidade

Em telecomunicações, infraestrutura de tecnologia da informação e na engenharia de software, escalabilidade é uma característica desejável em todo o sistema, rede ou processo, que indica a capacidade de manipular uma porção crescente de trabalho de forma uniforme, ou estar preparado para crescer. Por exemplo, isto pode-se referir à capacidade de um sistema suportar um aumento de carga total quando os recursos (normalmente do hardware) assim requisitam.
Como característica de um sistema, a escalabilidade é normalmente difícil de se definir e, de forma particular, é necessário definir que requerimentos específicos de demanda deverão ser dimensionados para definir a importância da escalabilidade.
A escalabilidade é um assunto extremamente importante em sistemas eletrônicos, bancos de dados, roteadores, redes de computadores, etc, e implica desempenho. Um sistema cujo desempenho aumenta com o acréscimo de hardware, proporcionalmente à capacidade acrescida, é chamado "sistema escalável".
A escalabilidade pode ser medida de vários modos, tais como:
* Carga de escalabilidade – É a facilidade com que um sistema distribuído pode ser expandido usando todos os seus recursos para acomodar as demandas, sejam altas ou baixas.
* Escalabilidade geográfica - Um sistema é geograficamente escalável quando mantém sua utilidade e desempenho, independentemente dos pontos geográficos que compõem sua extensão ou como são usados os seus recursos.
* Escalabilidade administrativa - Não importa a variação de informação que diferentes organizações necessitem compartilhar em um único sistema distribuído, este deve permanecer fácil de ser usado e gerenciado.
Por exemplo, um sistema de processamento de transações on-line ou sistema de gerenciamento de banco de dados é escalável quando pode ser atualizado para aumentar o processamento de transações, mediante a adição de novos processadores, mecanismos e dispositivos de estocagem, que podem ser atualizados facilmente e de modo transparente, sem precisar de desligar o sistema.
Um protocolo de roteamento é considerável escalável com o tamanho da rede, se o tamanho necessário da tabela de roteamento em cada nó cresce como O(log N), onde N é o número de nós na rede.

## Escalabilidade horizontal e vertical

Métodos de adição de recursos para uma aplicação particular recaem em duas amplas categorias: escalamento horizontal e vertical.
* Escalar horizontalmente (também chamado de scale out/in) significa adicionar mais nós a (ou remover nós de) um sistema, como adicionar um novo computador para uma aplicação de software distribuída. Um exemplo pode envolver escalamento horizontal de um sistema de servidor Web para três. Como os preços de computadores caíram e o desempenho continua a crescer, aplicações de computação de alto desempenho, como análise sísmica e cargas de trabalho de biotecnologia adotaram sistemas "mercadoria" de baixo custo para tarefas que antes exigiam supercomputadores. Arquitetos de sistema podem configurar centenas de pequenos computadores em um cluster para obter poder de computação agregada que geralmente excede ao de computadores baseados em um único processador tradicional. O desenvolvimento de interconexões de alto desempenho como Ethernet Gigabit, InfiniBand e Myrinet alimentaram este modelo. Tal crescimento direcionou para demanda por software que possibilita o gerenciamento e manutenção eficientes de vários nós, bem como hardware como armazenamento de dados compartilhado com desempenho de E/S muito maior. Escalabilidade de tamanho é o número máximo de processadores que um sistema pode acomodar.
* Escalar verticalmente (também chamado de scale up/down) significa adicionar recursos (ou remover recursos de) um único nó em um sistema, normalmente envolvendo a adição de UCPs ou memória para um único computador. Tal escalamento vertical de sistemas existentes também permite-os usar tecnologia de virtualização de forma mais eficiente, uma vez que ele fornece mais recursos para o conjunto hospedado de sistema operacional e módulos de aplicação a compartilhar. Tomar vantagem de tais recursos também pode ser chamado de "aumento", como a expansão do número de processos daemon Apache executando no momento. Escalabilidade de aplicação é o desempenho melhorado de execução de aplicações em uma versão aumentada (scaled-up) do sistema.
Um frequente foco do planejamento de um sistema de hardware é a sua escalabilidade.
* Escalar verticalmente (scale up) significa adicionar recursos em um único nó do sistema (mais memória ou um disco rígido mais rápido).
* Escalar horizontalmente (scale out) significa adicionar mais nós ao sistema, tais como um novo computador com uma aplicação para clusterizar o software.
Escalabilidade em startups é uma forma de acelerar o crescimento de uma empresa, com pequenos custos e de forma muito rápida.