Modello per sistemi distribuiti
Tradizionalmente, avere un sistema monolitico eseguito in più computer significava suddividere il sistema in componenti client e server separati. In tali sistemi, il componente client ha gestito l'interfaccia utente e il server ha fornito l'elaborazione back-end, ad esempio l'accesso al database, la stampa e così via. Man mano che i computer si moltiplicano, vengono eliminati i costi e diventano connessi da reti di larghezza di banda sempre più elevate, suddividendo i sistemi software in più componenti è diventato più pratico, con ogni componente in esecuzione in un computer diverso ed eseguendo una funzione specializzata. Questo approccio semplifica lo sviluppo, la gestione, l'amministrazione e spesso migliora le prestazioni e la robustezza, poiché l'errore in un computer non disabilita necessariamente l'intero sistema.
In molti casi il sistema appare al client come cloud opaco che esegue le operazioni necessarie, anche se il sistema distribuito è composto da singoli nodi, come illustrato nella figura seguente.
L'opacità del cloud viene mantenuta perché le operazioni di calcolo vengono richiamate per conto del client. Di conseguenza, i client possono individuare un computer (un nodo) all'interno del cloud e richiedere un'operazione specificata; nell'esecuzione dell'operazione, tale computer può richiamare funzionalità in altri computer all'interno del cloud senza esporre i passaggi aggiuntivi o il computer in cui sono stati eseguiti, al client.
Con questo paradigma, i meccanismi di un sistema distribuito, simile al cloud possono essere suddivisi in molti singoli scambi di pacchetti o conversazioni tra singoli nodi.
I sistemi client-server tradizionali hanno due nodi con ruoli fissi e responsabilità. I sistemi distribuiti moderni possono avere più di due nodi e i loro ruoli sono spesso dinamici. In una conversazione un nodo può essere un client, mentre in un'altra conversazione il nodo può essere il server. In molti casi, il consumer finale della funzionalità esposta è un client con un utente seduto su una tastiera, guardando l'output. In altri casi, le funzioni di sistema distribuite non vengono eseguite automaticamente, eseguendo operazioni in background.
Il sistema distribuito potrebbe non avere client e server dedicati per ogni scambio di pacchetti specifico, ma è importante ricordare che c'è un chiamante, (o iniziatore, uno dei quali è spesso definito client). C'è anche il destinatario della chiamata (spesso definito server). Non è necessario avere scambi di pacchetti bidirezionali nel formato request-reply di un sistema distribuito; spesso i messaggi vengono inviati solo un modo.