Le scelte su come strutturare una rete che debba erogare servizi Web, e non solo, dipendono da molti fattori diversi:
- Risorse economiche (il budget a disposizione per l'intero progetto)
- Skill disponibili (le conoscenze del personale interno, la disponibilità di consulenti esterni)
- Infrastruttura esistente (eventuali vincoli dovuti ad una situazione preesistente)
- Traffico previsto (è importante dimensionare le strutture per gestire senza problemi il carico previsto e scalare facilmente quando questo aumenta)
- Tipo di informazioni e servizi offerti online (se si trattano dati personali, sensibili, critici, come vanno inseriti e gestiti)
- Criticità del servizio (un'idea di quanto è sopportabile un down del servizio da indicazione sui sistemi di High Availability da implementare)
- Variabilità ed espandibilità del servizio (avere un'idea se la nostra web farm è destinata ad aumentare i servizi erogati).
- Necessità di interfacciamento con altri sistemi (se è necessario uno scambio di dati con altri sistemi, eventualmente non su Internet, se sono richieste compatibilità e interoperabilità con sistemi proprietari, ecc)
Questi ed altri fattori inevitabilmente influenzano il tipo di infrastruttura Web che si deve mettere in campo.
Semplificando, e lasciando a BOX di approfondimento i dettagli e le distinzioni del caso, possiamo ipotizzare tre principali categorie di implementazione:
Singolo server per gestire basso traffico - Può essere il singolo sito aziendale, statico o dinamico, con un traffico relativamente basso (meno di 2000 visite al giorno, gestibile con meno di 512Kb/s di banda) o anche un hosting server di un provider con vari siti virtuali con poco traffico.
Per simili casi può bastare una singola macchina Unix che contenga tutto quanto serve per erogare anche pagine dinamiche. Il trittico Apache-PHP-MySQL su piattaforma Linux appare una soluzione economica, affidabile e testata, ma non è certo necessariamente l'unica.
Le funzioni di firewalling possono essere fornite da un dispositivo esterno o anche dalla macchina stessa.
Infrastruttura distribuita per medi carichi - Può riferirsi a siti con traffico medio (da 512Kb/s a qualche Megabit al secondo) o caratteristiche complesse. In questo caso diverse macchine forniscono diversi servizi. Oltre a un DB server autonomo è legittimo prevedere uno o più application server, uno o più web server, eventuali cache server e firewall indipendenti. Un caso simile può presentare una notevole varietà di soluzioni e implementazioni, secondo i fattori sopra indicati e il livello di ridondanza richiesto
Infrastruttura complessa per alti carichi - Necessaria per gestire siti che erogano traffico per varie decine di Megabit al secondo. E' ovviamente distribuita, con diverse macchine, o pool di macchine, a fornire diversi servizi.
La scalabilità orizzontale dovrebbe essere prevista per ogni livello (i web server su cui viene fatto bilanciamento di carico devono poter aumentare in numero senza problemi, e lo stesso vale, per gli altri servizi), la ridondanza e l'high availability diventano, su siti ad alto traffico, quasi obbligatorie, per cui è prevedibile che si debba implemntare a tutti i livelli. Meccanismi di caching e staticizzazione delle pagine sono quasi obbligatori, visto l'alto carico e la natura quasi certamente dimanica di un simile sito.