È facile pensare che servire un vasto pubblico richieda una sala server delle dimensioni di un magazzino. Tuttavia, non è sempre così. Se il tuo sito è statico, una piccola macchina può gestire centinaia di migliaia di visitatori. Immagina un semplice Celeron da 500 MHz con Linux e Apache. Connettiti a una linea T3 (45 milioni di bit al secondo). Questa impostazione gestisce quantità di traffico molto elevate. Gli ISP noleggiano l’intera configurazione per meno di $ 1.000 al mese.

Ma ecco il problema. I siti più popolari non sono piccoli. Colpiscono rapidamente il muro. Una casella non può essere espansa all’infinito.

“Se hai a che fare con milioni di visitatori e contenuti dinamici, la tua macchina si romperà.”

I limiti compaiono quando viene raggiunta una determinata soglia. Innanzitutto, potresti dover supportare milioni di visitatori ogni giorno. Una singola CPU ha delle limitazioni. Il secondo è un guasto hardware. Se uno dei tuoi server non funziona, il tuo sito si oscurerà finché non lo sostituirai con uno nuovo e lo configurerai di nuovo. In terzo luogo, le pagine grandi o complesse consumano rapidamente le risorse. In quarto luogo, se la pagina deve cambiare dinamicamente per ciascun utente, il server deve lavorare di più. Infine, l’elaborazione in background aggiunge latenza. La maggior parte dei siti di grandi dimensioni soddisfa tutti questi criteri e pertanto richiede infrastrutture estese.

Le tre strategie di scalabilità più importanti

Se il budget lo consente, gli ingegneri possono scegliere tre percorsi principali durante i picchi di traffico.

  1. Acquista una macchina enorme con potenza illimitata e ridondanza.
  2. Dividere il carico tra molte macchine più piccole.
  3. Combina i due metodi.

L’approccio distribuito è più comune nelle applicazioni web di grandi dimensioni. Potresti anche averlo visto in azione senza rendertene conto. Se l’URL cambia leggermente ogni volta che visiti e aggiorni il sito web (ad esempio “www1.xyz.com” e “www2.xyz.com”), questo è un indizio. Questo sito utilizza una serie di computer indipendenti. Tutti utilizzano il software del server web. Usano tutti la stessa copia della pagina del sito web.

La vera magia sta nel modo in cui vengono distribuite le richieste in arrivo. Ciò può avvenire in due modi principali.

Bilanciamento del carico basato su DNS

Il Domain Name System (DNS) traduce i nomi leggibili dall’uomo in indirizzi IP. Alcune configurazioni DNS utilizzano un approccio round-robin. I server DNS scorrono l’elenco degli indirizzi IP disponibili ogni volta che viene ricevuta una richiesta.

Questo distribuisce naturalmente il carico. Ogni server riceve una parte del traffico. Non si parlano del carico. Fornire solo contenuti statici o pregenerati a cui hanno accesso.

Interruttore di bilanciamento del carico

Un approccio più avanzato prevede un bilanciamento del carico. Tutto il traffico di rete raggiunge prima lo switch centrale. Questa macchina funge da vigile urbano. Inoltra la richiesta a un server disponibile.

L’interruttore non si limita a indovinare. Controlla ciascun server per vedere quale è il meno occupato. Ciò garantisce una divisione equa del lavoro. HowStuffWorks ha adottato questo approccio. Il bilanciatore del carico dell’azienda distribuisce il traffico tra tre diversi server web. Se uno di loro fallisce, gli altri due manterranno attivo il sito. Nessun tempo di inattività per l’utente.

Questa configurazione ridondante presenta evidenti vantaggi. Il guasto di una macchina non manda in crash l’intero sito. Puoi anche aumentare la capacità gradualmente. Hai bisogno di più potenza? Aggiungi un’altra casella. È flessibile.

C’è uno svantaggio. Queste macchine distribuite spesso si affidano ancora a database centralizzati per l’elaborazione delle transazioni. Con l’aumento del traffico, questo database è diventato un collo di bottiglia.

Una macchina enorme

Non tutti distribuiscono. TerraServer di Microsoft segue il percorso della “singola grande macchina”.

TerraServer memorizza terabyte di immagini satellitari. Gestisce milioni di richieste per tali dati. utilizza un enorme hardware di classe aziendale. Prendiamo ad esempio il Digital AlphaServer 8400. Ha otto processori a 64 bit da 440 MHz. Contiene 10 GB di RAM con controllo e correzione degli errori.

C’è molta potenza in un unico chassis. Ciò evita la complessità del coordinamento di rete tra più server. Ma è costoso. Se un AlphaServer fallisce, il servizio si interrompe.

La scelta dipende dal tuo modello di business. Il contenuto statico favorisce configurazioni semplici. Le transazioni dinamiche richiedono ridondanza. Le applicazioni ad uso intensivo di dati possono richiedere potenza pura.

Se vuoi saperne di più, ci sono molte risorse. Il W3C stabilisce gli standard. Microsoft ha pubblicato un white paper sul bilanciamento del carico di Windows NT. IBM fornisce un libro rosso sul bilanciamento dei server. Un articolo sui server web collaborativi distribuiti descrive questa teoria.

Ma la realtà fondamentale rimane semplice. Scale di traffico. Limiti hardware. Gli ingegneri costruiscono un ponte tra i due. Il modo in cui lo costruisci dipende dallo scopo per cui verrà effettivamente utilizzato il tuo sito web.