# Scalabilità

Nell'ingegneria del software, nelle telecomunicazioni, in informatica e in altre discipline tra cui economia e business, la scalabilità denota la capacità di un sistema di aumentare o diminuire la potenza di erogare il servizio al quale è destinato. In genere la scalabilità di un sistema si mette in atto in funzione delle necessità e/o della disponibilità. Un sistema che gode di questa proprietà viene detto scalabile. Maggiore è la facilità con cui può essere modificato un sistema nella sua capacità di erogare il servizio al quale è destinato, maggiore è la sua scalabilità.

## Descrizione

L'uso più tradizionale si riferisce alla scalabilità di carico, ovvero alla capacità di un sistema di incrementare le proprie prestazioni (il proprio throughput nel caso di sistemi trasmissivi) se a tale sistema vengono fornite nuove risorse (per esempio, nel caso dell'hardware, maggiore potenza di processore o processori aggiuntivi). Quanto un determinato sistema sia scalabile dipende dalla sua architettura software e/o architettura hardware; per esempio, la presenza di uno o più colli di bottiglia potrebbe rendere ininfluente l'aumento della potenza di calcolo complessiva. Questa dipendenza dall'architettura vale anche, in termini generali, per le altre accezioni in cui si può intendere il termine "scalabile".

### Classificazioni

Nel caso dei sistemi software, la scalabilità può essere intesa come capacità di crescita lungo tre dimensioni.

#### Scalabilità di carico

    Un sistema software dovrebbe aumentare le proprie prestazioni in funzione della potenza di calcolo complessiva richiesta al momento. Per i sistemi distribuiti, di solito, l'enfasi viene posta sulla scalabilità rispetto al numero di processori invece della potenza dei singoli processori impiegati.

#### Scalabilità geografica

    Un sistema geograficamente scalabile è quello che mantiene inalterata la sua usabilità e utilità indipendentemente dalla distanza fisica dei suoi utenti o delle sue risorse.

#### Scalabilità amministrativa

    Un sistema amministrativamente scalabile è quello che mantiene inalterata la sua gestibilità indipendentemente da quante organizzazioni lo utilizzano.
La scalabilità di carico può esplicarsi in scalabilità verticale (relativa all'aumento della capacità di elaborazione di una singola macchina) e scalabilità orizzontale (relativa all'aggiunta di altre macchine in distribuzione di carico).

### Esempi

La scalabilità, nelle sue varie forme, è un parametro di qualità determinante in numerose famiglie di applicazioni software. Sistemi di online transaction processing o DBMS, per esempio, sono scalabili se possono essere messi in condizione di gestire più transazioni aggiungendo processori, memoria o dispositivi. In questo caso, il sistema stesso si presta a essere utilizzato in contesti molto semplici o molto complessi senza che questo richieda una sua riprogettazione.
In alcuni contesti esistono definizioni specifiche, più formali, del concetto di scalabilità; un protocollo di routing, per esempio, si dice scalabile se la dimensione della tabella di routing di ogni nodo cresce secondo un O(log N), dove N è il numero di nodi che compongono la rete.