TPSIT

Il modello client/server: cos’è e come funziona?

Cos’è, da cosa è formato e come funziona il modello client/server

Il modello client-server è costituito da un insieme di processi in esecuzione su diversi host: i processi che gestiscono una o più risorse sono detti server mentre quelli che richiedono l’accesso ad alcune di queste risorse distribuite sono detti client. Un processo server può a sua volta diventare client ed essere contemporaneamente sia client che server.
É importante non fare confusione tra server e servizio, infatti:

  • Servizio: Entità astratta fornita da uno o più server;
  • Server: Insieme di macchine, spesso eterogenee, che ospitano diversi servizi.

Alcuni esempi di servizi tipici delle architetture client-server sono:

  • HTTP (Porta 80) e HTTPS (Porta 443): utilizzati per la trasmissione d’informazioni sul web.
  • FTP (Porte 21/20): utilizzati per il trasferimento di dati tra diversi host.
  • Telnet (Porta 23): utilizzati per il controllo di computer da remoto.

Schema di funzionamento di un modello client-server:

  1. Il client manda una richiesta al server;
  2. Il server (in stato di ascolto, listening) riceve la richiesta;
  3. Esegue il servizio richiesto (mediante un thread concorrente);
  4. Manda una risposta ed eventualmente dei dati al client;
  5. Il client riceve la risposta ed eventualmente i dati. 

Queste attività avvengono in maniera trasparente sia per i processi server che per i processi client, il solito meccanismo di comunicazione è utilizzato sia se client e server si trovano in esecuzione sullo stesso calcolatore sia che su calcolatori diversi.

 

Distinzione tra server e client

La principale differenza tra server e client è che il processo servizio è colui che mette a disposizione un servizio che poi verrà usufruito da uno o più client. Quindi il server può essere definito come il fornitore del servizio mentre il client come sfruttatore del servizio.

Il processo server è ospitato su un computer, detto host, che è in ascolto su una determinata porta in attesa di connessioni. Ogni servizio di un server è quindi accessibile dai client mediante la connessione al suo socket, che è specificato dalla coppia IP-HOST : PORTA. Questa specifica permette di individuare univocamente il gestore di un servizio, in quanto l’IP indica univocamente l’host mentre la porta indica a quale servizio offerto da quel host ci stiamo riferendo, per questo è importante ricordare che ad ogni porta può venire associato un solo servizio

Un socket aperto su un server è uguale per ogni client, i quali per stabilire una connessione con esso devono utilizzare una porta non privilegiata (>1024) solitamente aperta automaticamente dal sistema operativo e chiamata “ephemeral port”.

Nel modello client-server la modalità di comunicazione può essere di due tipi:

  • Unicast: il server comunica con un solo client per volta, accettando una sola richiesta di connessione per volta;
  • Multicast: al server possono essere connessi e comunicare più client contemporaneamente.

Il server deve essere attivo e possedere l’indirizzo IP statico, contrariamente a quello dei client che generalmente è dinamico. Un client non è in grado di comunicare con altri client, ma solo con il server. Se un server in comunicazione multicast riceve troppe richieste contemporaneamente potrebbe entrare in stato di congestione, quindi è necessaria la virtualizzazione della risorsa mediante una server farm, ossia assegnare al servizio un unico hostname utilizzando più indirizzi IP, trasparenti rispetto ai client, sui quali vengono dirottate le richieste di connessione.

 

Livelli delle architetture client-server

Le architetture client-server sono organizzate a livelli (tiers) e il software di ciascun livello è spesso organizzato internamente a strati. Ciascun livello si comporta da “server” per i livelli precedenti e da “client” per il livello successivo.
In generale possiamo sempre individuare tre tipi principali di funzionalità che corrispondono ad una struttura a tre strati:

  1. Front-end o presentation tier: interfaccia verso l’utente;
  2. Logica applicativa o middle tier;
  3. Back-end con accesso alle risorse e ai dati, chiamato anche data-tier

Questa stessa organizzazione può essere effettuata per qualunque applicazione informatica utilizzando una terminologia diversa:

  • Presentation Layer (PL): insieme delle procedure dedicate all’acquisizione e alla presentazione dei dati all’utente;
  • Business Logic Layer (BLL): corpo centrale dell’applicazione che comprende la logica applicativa.
  • Resource Management Layer: insieme delle procedure che gestiscono i dati, cioè che li memorizzano e li recuperano da basi di dati; 

 

Evoluzione dell’architettura a livelli:

Architettura a un livello – 1 tier

Architettura storica nel quale ogni strato risiedeva su un solo mainframe, al quale erano collegati molteplici terminali che servivano solo per le fasi I/O. Questa architettura non rientra nella tipologia client-server e descrive la situazione che si presentava prima dell’avvento dei sistemi distribuiti.

Architettura a due livelli – 2 tier

Architettura nata negli anni Ottanta con l’avvento delle reti locali. Le funzionalità erano suddivise su due livelli, client e server, seguendo due diversi modelli:

  • Modello thin-client: Il server è responsabile della logica applicativa e della gestione delle risorse, mentre il client della presentazione;
  • Modello thick-client: Il server è responsabile della gestione dei dati, mentre il client della logica applicativa e della presentazione.

Con il tempo si è preferito prediligere il modello thick client poiché favoriva la connessione di host eterogenei. Il problema dell’architettura a due livelli era la limitata scalabilità, in quanto il server doveva gestire la connessione e la sessione di ciascun client portando alla limitazione dei client gestibili contemporaneamente.

Architettura a tre livelli – 3 tier

L’architettura più diffusa dagli anni Novanta ad oggi è quella in cui ogni strato rappresenta un blocco distinto che può posizionarsi su host diversi. Questa architettura presenta numerosi vantaggi: innanzitutto è facilmente adattabile, in quanto ogni livello può venire modificato univocamente senza influire sugli altri, è facilmente scalabile, in quanto all’aumentare delle richieste è possibile aggiungere nuovi server per compensare il carico di lavoro e in questo modo è anche più tollerante ai guasti; infine rende possibile l’introduzione della sicurezza. Come unico svantaggio ha la difficoltà di progettazione, di sviluppo e amministrazione.

Architettura a n livelli – n tier

Le architetture a n livelli sono una generalizzazione del modello client-server a tre livelli dove vengono scomposti e introdotti un numero qualunque di livelli e server intermedi. Questa scomposizione viene effettuata per suddividere ulteriormente i compiti dei vari strati, prende anche il nome di multi-tier. Viene utilizzata ad esempio per gestire la parte di presentazione di un sito web che deve interfacciarsi a più dispositivi in maniera differente.