Close

Che cos'è un sistema distribuito?

Una panoramica dei sistemi distribuiti e delle architetture di microservizi

Foto di Kev Zettler
Kev Zettler

Full Stack Web Developer


Un sistema distribuito è una raccolta di programmi informatici che utilizzano risorse di elaborazione su più nodi di calcolo separati per raggiungere un obiettivo comune e condiviso. I sistemi distribuiti mirano a rimuovere i colli di bottiglia o i punti di errore centrali da un sistema.

Cosa succede quando crei un'applicazione come una singola unità distribuibile che funziona abbastanza bene, ma che nel corso del tempo cresce in termini di dimensioni e complessità? Spesso diventa più difficile da gestire, la velocity di sviluppo rallenta e il rischio di errore aumenta. In questo caso, il percorso evolutivo prevede che l'elemento monolitico diventi un sistema distribuito, in genere un'architettura di microservizi.

Che cos'è un sistema distribuito?


Un sistema distribuito è una raccolta di programmi informatici che utilizzano risorse di elaborazione su più nodi di calcolo separati per raggiungere un obiettivo comune e condiviso. Noto anche come elaborazione distribuita o sistema di database distribuiti, utilizza nodi separati per comunicare e sincronizzarsi su una rete comune. Questi nodi rappresentano in genere dispositivi hardware fisici separati, ma possono anche rappresentare processi software distinti o altri sistemi incapsulati ricorsivi. I sistemi distribuiti mirano a rimuovere i colli di bottiglia o i punti di errore centrali da un sistema.

I sistemi informatici distribuiti hanno le seguenti caratteristiche:

Condivisione delle risorse: un sistema distribuito può condividere hardware, software o dati.

Elaborazione simultanea: più computer possono elaborare la stessa funzione contemporaneamente.

Scalabilità: la capacità di calcolo ed elaborazione è scalabile in base alle esigenze se viene estesa a macchine aggiuntive.

Rilevamento degli errori: possibilità di individuare gli errori più facilmente.

Trasparenza: un nodo può accedere ad altri nodi del sistema e comunicare con essi.

icona dell'archivio di codice
materiale correlato

Microservices vs. monolithic architecture

icona di tre anelli
Scopri la soluzione

Gestisci i componenti con Compass

Qual è la differenza tra un sistema centralizzato e un sistema distribuito?


Immagine di sistema centralizzato e sistema distribuito

Un sistema informatico centralizzato è la posizione in cui vengono eseguite tutte le attività di elaborazione da un singolo computer. La differenza principale tra sistemi centralizzati e distribuiti è il modello di comunicazione tra i nodi del sistema. Lo stato di un sistema centralizzato è contenuto all'interno di un nodo centrale a cui i clienti accedono in modo personalizzato. I nodi di un sistema centralizzato accedono tutti al nodo centrale, ciò può determinare congestione e lentezza della rete. Un sistema centralizzato ha un singolo punto di errore, a differenza di un sistema distribuito, che ne è privo.

I sistemi distribuiti sono uguali ai microservizi?


Un'architettura di microservizi è un tipo di sistema distribuito, poiché scompone un'applicazione in componenti o "servizi" separati. Ad esempio, un'architettura di microservizi può avere servizi che corrispondono a funzioni aziendali (pagamenti, utenti, prodotti ecc.) in cui ogni componente corrispondente gestisce la logica aziendale per tale responsabilità. Il sistema disporrà quindi di più copie ridondanti dei servizi in modo che non vi sia alcun punto di errore centrale per un servizio.

Che cos'è il tracciamento distribuito?


Il tracciamento distribuito è un metodo utilizzato per profilare o monitorare il risultato di una richiesta eseguita su un sistema distribuito. Monitorare un sistema distribuito può essere difficile perché ogni singolo nodo ha il proprio flusso separato di log e metriche. Per ottenere una visione accurata di un sistema distribuito, queste metriche dei nodi distinte devono essere aggregate in una vista olistica.

Le richieste ai sistemi distribuiti generalmente non accedono all'intero set di nodi all'interno del sistema, ma accedono invece a un set parziale o a un percorso attraverso i nodi. Il tracciamento distribuito mette in luce i percorsi a cui si accede con una maggiore frequenza attraverso un sistema distribuito e consente ai team di analizzarli e monitorarli. Il tracciamento distribuito viene installato in ogni nodo del sistema, consentendo ai team di interrogare il sistema per ottenere informazioni sull'integrità dei nodi e sulle prestazioni delle richieste.

Vantaggi, svantaggi e rischi dei sistemi distribuiti


I sistemi distribuiti spesso contribuiscono a migliorare l'affidabilità e le prestazioni dei sistemi. L'affidabilità migliora attraverso la rimozione dei punti di errore centrali e i colli di bottiglia. I nodi di un sistema distribuito sono ridondanti; questo significa che, se un nodo presenta errori, ci sono altri nodi pronti a sostituirlo. Le prestazioni migliorano perché i nodi sono facilmente scalabili orizzontalmente e verticalmente. Se sul sistema è presente un carico elevato, è possibile ripartirlo aggiungendo altri nodi. È inoltre possibile aumentare la capacità di un singolo nodo per gestire un carico elevato.

Per contro, questi vantaggi possono causare l'inconveniente della "crescita fuori controllo", in cui un sistema diventa eccessivamente complesso e la manutenzione impegnativa. Man mano che aumenta la complessità di un sistema, i team possono avere difficoltà a organizzarlo, gestirlo e migliorarlo efficacemente. In parte, il problema potrebbe risiedere nella difficoltà di comprendere in che modo i diversi componenti si relazionano tra loro o chi sia responsabile di un componente software specifico. Di conseguenza, è difficile capire come modificare i componenti in modo da massimizzare l'integrità operativa ed evitare di causare un impatto negativo non solo sui componenti dipendenti, ma anche sui clienti. Quando un sistema presenta più repository, possono essere necessari strumenti specializzati come Compass di Atlassian per gestire e organizzare il codice di un sistema distribuito.

Architetture di sistemi distribuiti


Esistono numerosi tipi di sistemi distribuiti. Quelli più comuni sono i seguenti:

Client/server

Un'architettura client-server è suddivisa in due responsabilità principali: il client è responsabile della presentazione dell'interfaccia utente, che quindi si connette tramite la rete al server, e il server è responsabile della gestione della logica aziendale e della gestione dello stato. Un'architettura client-server può facilmente trasformarsi in un'architettura centralizzata se il server non viene reso ridondante. Una configurazione client-server realmente distribuita avrà più nodi server per distribuire le connessioni client. La maggior parte delle moderne architetture client-server sono client che si connettono a un sistema distribuito incapsulato sul server.

Più livelli

Un'architettura su più livelli si espande sull'architettura client-server. Il server in un'architettura su più livelli viene scomposto in ulteriori nodi granulari, che separano le responsabilità aggiuntive del server back-end come l'elaborazione e la gestione dei dati. Questi nodi aggiuntivi vengono utilizzati per elaborare in modo asincrono processi a lunga esecuzione e liberare i nodi back-end rimanenti per concentrarsi sulla risposta alle richieste client e sull'interfacciamento con l'archivio dati.

Peer-to-peer

In un sistema distribuito peer-to-peer, ogni nodo contiene l'istanza completa di un'applicazione. A livello di nodo, non esiste alcuna separazione tra presentazione ed elaborazione dei dati. Un nodo contiene il livello di presentazione e i livelli di gestione dei dati. I nodi peer possono contenere tutti i dati sullo stato dell'intero sistema.

I sistemi peer-to-peer offrono il vantaggio di una ridondanza estrema. Quando un nodo peer-to-peer viene inizializzato e portato online, individua altri peer ai quali si connette e sincronizza il suo stato locale con lo stato dell'intero sistema. Con questa funzione, l'errore di un nodo su un sistema peer-to-peer non causerà alcuna interruzione negli altri nodi. Inoltre, un sistema peer-to-peer sarà persistente.

Architettura orientata ai servizi

L'architettura orientata ai servizi (SOA) è un predecessore dei microservizi. La principale differenza tra SOA e microservizi è l'ambito dei nodi: l'ambito dei nodi dei microservizi esiste a livello di funzione. Nei microservizi un nodo incapsula la logica aziendale per gestire uno specifico set di funzioni, come l'elaborazione dei pagamenti. I microservizi contengono più nodi di logica aziendale diversi che si interfacciano con nodi di database indipendenti. I nodi SOA, invece, incapsulano un'intera applicazione o divisione aziendale. Il limite di servizio per i nodi SOA include in genere un intero sistema di database all'interno del nodo.

I microservizi sono emersi come un'alternativa preferita a SOA in virtù dei vantaggi che offrono. Sono più componibili, poiché consentono ai team di riutilizzare le funzionalità fornite dai nodi di servizio di piccole dimensioni. I microservizi sono più solidi e favoriscono una scalabilità verticale e orizzontale più dinamica.

Casi d'uso dei sistemi distribuiti

Molte applicazioni moderne utilizzano sistemi distribuiti, di cui sono esempi le applicazioni web e mobili a traffico elevato. Gli utenti si connettono secondo il metodo client-server, dove il client è un browser web o un'applicazione mobile. Il server è quindi il proprio sistema distribuito. I server web moderni utilizzano un modello di sistema su più livelli. Si utilizza un bilanciamento del carico per delegare le richieste a numerosi nodi logici del server che comunicano su sistemi di coda di messaggi.

Kubernetes è uno strumento diffuso per i sistemi distribuiti, poiché può creare un sistema distribuito da una raccolta di container. I container creano nodi del sistema distribuito e quindi Kubernetes orchestra la comunicazione di rete tra i nodi e gestisce anche la scalabilità orizzontale e verticale dinamica dei nodi nel sistema.

Un altro valido esempio di sistemi distribuiti è quello delle criptovalute come Bitcoin ed Ethereum, che sono sistemi distribuiti peer-to-peer. Ogni nodo in una rete di criptovaluta è una replica autonoma della cronologia completa del registro valutario. Quando un nodo di valuta viene portato online, si avvia collegandosi ad altri nodi e scaricandone la copia completa del registro. Inoltre, le criptovalute hanno client o "wallet" che si connettono ai nodi del registro tramite il protocollo RPC JSON.

In conclusione...


I sistemi distribuiti sono ampiamente adottati e utilizzati nella maggior parte delle applicazioni software moderne. Le app dei social media, i servizi di streaming video, i siti di e-commerce e altro ancora sono tutti basati su sistemi distribuiti. I sistemi centralizzati si trasformano naturalmente in sistemi distribuiti per gestire la scalabilità. L'uso di microservizi è un modello diffuso e ampiamente utilizzato per la creazione di un sistema distribuito.

Sebbene i sistemi distribuiti siano più complessi in termini di creazione e manutenzione, Compass di Atlassian riesce a gestire questa complessità. È una piattaforma per gli sviluppatori che facilita la navigazione all'interno dell'architettura distribuita, riunendo in un'unica posizione centrale e ricercabile le informazioni disconnesse sull'output tecnico e i team che vi collaborano.

Kev Zettler
Kev Zettler

Kev è uno sviluppatore web full-stack lead e imprenditore seriale con oltre un decennio di esperienza nella creazione di prodotti e team con metodologie Agile. È un appassionato collaboratore, autore e insegnante nell'ambito delle tecnologie open source emergenti come DevOps, criptovaluta e realtà aumentata/virtuale. Nel tempo libero, partecipa a competizioni dedicate allo sviluppo di giochi indie.


Condividi l'articolo
Argomento successivo

Letture consigliate

Aggiungi ai preferiti queste risorse per ricevere informazioni sui tipi di team DevOps e aggiornamenti continui su DevOps in Atlassian.

Illustrazione su Devops

Community di Compass

illustrazione del superamento di ostacoli

Tutorial: Creare un componente

Illustrazione di una mappa

Inizia a utilizzare Compass gratuitamente

Iscriviti alla nostra newsletter DevOps

Thank you for signing up