Le architetture client-server: definizione generale
Nella lezione precedente abbiamo visto che, in un'architettura basata su scambio di messaggi, il criterio per riconoscere un'architettura client-server e la stabilita dei ruoli: alcuni nodi richiedono sempre un servizio, altri lo forniscono sempre, e i due ruoli non si scambiano. In questa lezione entriamo nel dettaglio di cosa significhi esattamente essere un client o un server, e come i due ruoli interagiscono attraverso quello che si chiama il modello richiesta-risposta.
Pensiamo a un caso semplicissimo: uno studente apre il browser e digita l'indirizzo del sito della scuola. In pochi decimi di secondo compare la pagina. Dietro quell'istante ci sono due soggetti ben distinti che si scambiano messaggi secondo un copione preciso, e capire chi fa cosa e il primo passo per capire come funziona qualunque applicazione di rete, dal registro elettronico a un videogioco online.
Definizione di client e di server
Un client e un software (in esecuzione su un dispositivo qualunque: computer, smartphone, tablet) che avvia la comunicazione inviando una richiesta per ottenere un servizio o una risorsa. Un server e un software che resta in attesa di richieste su una rete e, quando ne riceve una, la elabora e restituisce una risposta.
E importante notare che "client" e "server" sono innanzitutto ruoli software, non tipi di macchine. Un server puo essere in esecuzione su un grande computer dedicato in un data center, ma anche su un normalissimo PC di un'aula scolastica che condivide una cartella o una stampante con gli altri computer della rete. Viceversa, un client non e necessariamente un browser: e client qualunque programma che, in un determinato scambio, assume il ruolo di chi richiede il servizio (un'app di posta elettronica, un videogioco che scarica aggiornamenti, persino un altro server che a sua volta richiede un dato a un servizio esterno).
Regola fondamentale: "client" e "server" descrivono un ruolo nella comunicazione, non una categoria di hardware. Lo stesso computer puo comportarsi da server per un servizio e da client per un altro, purche nei due casi si tratti di scambi di messaggi distinti e separati (altrimenti, se lo stesso nodo scambia ruoli nello stesso scambio, l'architettura sarebbe peer-to-peer, come visto nella lezione precedente).
Il modello richiesta-risposta
Ogni interazione client-server segue lo stesso schema di base, chiamato modello richiesta-risposta: il client invia un messaggio di richiesta contenente cosa vuole ottenere; il server riceve la richiesta, la elabora (che puo significare cercare un dato, eseguire un calcolo, generare una pagina) e restituisce un messaggio di risposta con il risultato oppure con un'indicazione di errore, se la richiesta non puo essere soddisfatta.
Questo schema ha una conseguenza importante sul comportamento dei due ruoli: il server ha un comportamento passivo, nel senso che non inizia mai lui la comunicazione mentre e in attesa, ma resta pronto a rispondere a chiunque lo interpelli secondo le regole previste; il client ha invece un comportamento attivo, perche e sempre lui a decidere quando iniziare uno scambio e cosa chiedere. Questa asimmetria tra "chi aspetta" e "chi inizia" e un altro modo, complementare a quello visto nella lezione precedente, di descrivere la stessa idea di ruoli fissi e distinti.
Il modo esatto in cui una richiesta e una risposta viaggiano sulla rete, quali protocolli usano e come si apre concretamente una connessione (i socket) sono argomenti delle prossime lezioni di questa unita: qui basta fissare che, qualunque sia la tecnologia usata, il ciclo richiesta-risposta e sempre presente in un'architettura client-server.
Esempi di applicazioni client-server nella vita di tutti i giorni e a scuola
Ogni volta che si apre un sito web, il browser (client) invia una richiesta HTTP al server che ospita quel sito, chiedendo una determinata pagina. Il server elabora la richiesta e restituisce il codice HTML della pagina, che il browser interpreta e mostra a schermo. Se in quel momento migliaia di altre persone visitano lo stesso sito, il server risponde a ciascuna richiesta separatamente, mantenendo sempre lo stesso ruolo di "chi fornisce".
Nella rete di un istituto scolastico, il registro elettronico funziona allo stesso modo: quando un docente inserisce un voto dal proprio computer (client), l'informazione viene inviata al server del registro, che la salva nel database della scuola. Quando un genitore consulta il voto da casa tramite l'app, il suo smartphone e di nuovo un client che invia una richiesta allo stesso server, il quale risponde restituendo il dato salvato in precedenza. Il server del registro non richiede mai nulla al computer del docente o allo smartphone del genitore: fornisce sempre e soltanto il servizio.
Errori comuni e distinzioni da non confondere
Un primo errore comune, gia accennato sopra, e identificare il server con "un computer molto potente in una sala server": si tratta invece, prima di tutto, di un ruolo software. Un piccolo programma che condivide file tra due computer di un'aula e comunque, dal punto di vista architetturale, un server, anche se gira su un normale PC.
Un secondo errore e pensare che "client" coincida sempre con "browser". Il browser e solo l'esempio di client piu visibile e comune, ma qualunque applicazione che avvia richieste verso un servizio (un'app di messaggistica, un lettore musicale in streaming, un videogioco) e a tutti gli effetti un client nei confronti del server a cui si collega.
Un terzo punto da non confondere e la differenza tra "client-server" come architettura di rete e "cliente" nel linguaggio comune di tutti i giorni (chi acquista un prodotto): nel contesto informatico il termine non ha nulla a che vedere con acquisti o pagamenti, ma descrive esclusivamente chi, in uno scambio di messaggi, richiede un servizio.
Sintesi applicativa
Di fronte a qualunque applicazione di rete, per riconoscerne l'architettura client-server basta individuare due elementi: chi invia la richiesta iniziale (il client) e chi resta in attesa per rispondere (il server), tenendo presente che questi sono ruoli software e non caratteristiche fisiche delle macchine coinvolte. Nelle prossime lezioni di questa unita vedremo, separatamente, quali sono le caratteristiche specifiche che un sistema deve avere per svolgere bene il ruolo di server e quali per svolgere bene il ruolo di client, e poi i vantaggi e gli svantaggi generali di questo tipo di architettura.
Domanda di autoverifica: quando un insegnante stampa un documento da un computer collegato a una stampante di rete condivisa, qual e il client e quale il server in questo scambio? Prova a rispondere usando solo la definizione data in questa lezione (chi invia la richiesta, chi resta in attesa), prima di leggere le prossime lezioni.