feature image - https://source.unsplash.com/random/900×600/?wallpaper&sig=b16db183-9321-4244-a41c-db78daa685d5

Dai mainframe ai sistemi distribuiti

Per poter parlare di sistemi distribuiti, l’argomento di questo capitolo, dobbiamo capire come l’evoluzione dell’informatica abbia reso possibile la nascita di questo tipo di sistemi e quale sia stata la loro evoluzione in quello che oggi chiamiamo sistema distribuito.

I mainframe

fino alla fine degli anni '70 i sistemi informatici erano prevalentemente centralizzati. Era infatti molto vantaggioso concentrare tutta la potenza di calcolo disponibile (non elevata) in un unico calcolatore piuttosto di avere più macchine con una potenza di calcolo tanto bassa da non essere utili per eseguire calcoli complessi. All’epoca dobbiamo ricordare che i computer erano molto costosi e tipicamente chi lo possedeva era una grande azienda, una banca o una università.

In questi ambienti il computer centrale, detto \textit{mainframe}, consentiva il collegamento tramite la rete da un apparecchio denominato terminale che non aveva alcuna potenza di calcolo (per qusto spesso si parla anche di terminale stupido) e semplicemente riceveva ed iniava al mainframe i codici corrispondenti ai tasti premuti sulla sua tastiera e riceveva dal mainframe i caratteri da scrivere a schermo in risposta ai comandi inviati.

In questo tipo di architetture le applicazioni venivano eseguite tutte sul mainframe che gestiva gli accessi concorrenti da parte dei vari terminali collegati, allocando un terminale virtuale per ogni connessione.

I sistemi client server

Con l’evoluzione dei processori che, come sappiamo, segue la legge di Moore (il numero dei transistor pre centimetro quadrato raddoppia ogni 18 mesi e il calo dei prezzi è altrettanto esponenziale, a parità di potenza di calcolo), dagli anni '80 si iniziarono a diffondere i personal computer che resero possibili nuove architetture, nelle quali parte della elaborazione, in particolare quella relativa alla viualizzazione, veniva eseguita sul pc che aveva sostituito i terminali stupidi.

In queste nuove architetture il processo che esegue la visualizzazione (il cosidetto frontend) veniva eseguito sulla macchina denominata client mentre l’elaborazione vera e propria restava confinata al server, sostituto del mainframe. La potenza e la capacità di elaboazione di un server è inferiore a quella di un mainframe.

differenza tra architettura client server e mainframe

A prima vista l’architettura di tipo client server puó apparire simile a quella di tipo mainframe. Esiste tuttavia la differenza sostanziale nelle capacitá di calcolo dei terminali e dei client. I primi non hanno alcuna potenza di calcolo, mentre i secondi sono dei computer a tutti gli effetti che poi vanno a contattare il server per effettuare le loro operazioni.

Nelle architetture client server abbiamo due tipologie di gestione delle applicazioni. La prima è l’architettura più semplice dove un processo server comunica con un singolo processo client. In questo modo se più client eseguono la stessa applicazione, ne verranno eseguite due istanze, una per ogni client.

Definizione di Sistema Distribuito

Sempre sotto la spinta dell’evoluzione della potenza di calcolo dei computer e della aumentata velocità di trasmissione delle informazioni sulle reti, dagli anni 90 furono possibili architetture ancora più complesse, dove non esisteva solo un server per gestire i client ma il server singolo venne man mano sostituito da più nodi che comunicavano tra di loro ia rete e consentivano di affrontare il problema di gestire servizi utilizzabili da una platea sempre più vasta, eseguire calcoli sempre più complessi o gestire moli di dati tanto ampie che sarebbe stato impossibile utilizzare un singolo server o mainframe.

Un approccio con più macchine server consentiva di avere sistemi informatici piú economici di un mainframe e molto più potenti dal punto di vista della potenza di calcolo totale.

In questi sistemi che risultavano essere distribuiti tra più processi e quindi chiamati ``sistemi distribuiti’', una delle problematiche importanti da risolvere fu la gestione della comunicazione e sincronizzazione interna e della comunicazione verso l’esterno del sistema.

Un sistema distribuito, secondo la definizione classica ha la seguente definzione:

La locuzione sistema distribuito, in informatica, indica genericamente una tipologia di sistema informatico costituito da un insieme di processi interconnessi tra loro in cui le comunicazioni avvengono solo esclusivamente tramite lo scambio di opportuni messaggi. - George Coulouris et al.

Vediamo di capire questa definizione. La prima caratteristica di questo sistema è quella di essere formato da un insieme di *processi interconnessi. Non si fa riferimento ad un insieme di computer, bensì ci si riferisce ad un insieme di processi, concetto di cui abbiamo già parlato precedentemente.

In un sistema distribuito possiamo effettuare due tipi di distribuzione:

  • Distribuzine dei calcoli: in questo caso si parla di sistemi distrbuiti di calcolo e sono tutti quei sistemi che effettuano delle elaborazioni distribuendo algoritmi (pensati ad hoc per questo tipo di architetture) sui nodi del sistema distribuito in modo tale che i nodi possano collaborare per la sua esecuzione.
  • Distribuzione dei dati: I sistemi distribuiti che operano la distribuzione a liello di dati si chiamano anche sistemi distribuiti informativi. Si tratta di sistemi che consentono di operare su grandi quantità di dati e di gestire in modo ottimale grandi quantità di utenti.

Per quel che riguarda la scelta dei protocolli di comunicazione all’interno del sistema abbiamo una scelta abbastanza ampia di protocolli che dipenderà dal tipo di sistema distribuito che andiamo a considerare.

Nel caso di sistemi distribuiti informativi si utilizzeranno quasi sempre protocolli TCP/IP utilizzando:

  • soluzioni personalizzate a livello applicativo
  • tilizzando protocolli standard come HTTP o MQTT
  • lavorando su livelli di trasporto di tipo custom

Anche per i sistemi distribuiti di calcolo spesso si utilizzano protocolli di TCP/IP ma quando le prestazioni sono fondamentali si ricorre a tipologie di reti che sono diverse da TCP/IP, pensate espressamente per gestire il calcolo ad alte prestazioni.

Nel proseguo del testo ci focalizzeremo sui sistemi distribuiti di tipo informativo.

Un campo che ha catalizzato la diffusione dei sistemi distribuiti informativi è l’Internet of things, ovvero quella branca dell’informatica esplosa negli ultimi dieci anni che progetta, studia e programma sistemi SoC e sensori. In questo caso se si riflette sul fatto che questi componenti spesso possono comunicare con una rete, appare chiaro come un paio di SoC comegli ESP32 (disponibili a pochi euro) possono formare un ssitema distribuito in grado di comunicare con Internet attraverso i protocolli HTTP ed MQTT.

Andrea Pollini

Matematico, informatico.