Cos'è l'elaborazione a elevato parallelismo?
L'elaborazione a elevato parallelismo (MPP) è un paradigma di elaborazione in cui centinaia o migliaia di nodi di elaborazione lavorano su parti di un'attività di calcolo in parallelo. Ognuno di questi nodi esegue singole istanze di un sistema operativo. Hanno i loro propri dispositivi di input e output e non condividono la memoria. Raggiungono un'attività di calcolo comune comunicando tra loro mediante un'interconnessione ad alta velocità.
Le organizzazioni che hanno a che fare con enormi volumi di dati in continua espansione utilizzano l'elaborazione a elevato parallelismo per l'elaborazione dei dati. Per esempio, immaginiamo una famosa compagnia di assicurazioni con milioni di clienti. Man mano che il numero di clienti aumenta, aumentano anche i dati dei clienti. Anche se l'azienda utilizza l'elaborazione parallela, potrebbe subire un ritardo nell'elaborazione dei dati dei clienti. Supponiamo che un analista di dati stia eseguendo una query su 100 milioni di righe di un database. Se l'organizzazione usa un sistema di elaborazione a elevato parallelismo con 1000 nodi, ogni nodo deve sopportare solo 1/1000 di carico computazionale.

Quali sono i principali componenti hardware dell'elaborazione a elevato parallelismo?
È essenziale comprendere i componenti hardware di un sistema di elaborazione a elevato parallelismo per comprendere le varie architetture.
Nodi di elaborazione
I nodi di elaborazione sono gli elementi di base dell'elaborazione a elevato parallelismo. Tali nodi sono semplici nuclei di elaborazione omogenei con una o più unità di elaborazione centrale. I nodi possono essere visualizzati come semplici PC desktop.
Interconnessione ad alta velocità
I nodi di un sistema di elaborazione a elevato parallelismo lavorano in parallelo su parti di un singolo problema di calcolo. Anche se la loro elaborazione è indipendente l'uno dall'altro, hanno bisogno di comunicare regolarmente tra loro poiché stanno cercando di risolvere un problema comune. Tra i nodi è necessaria una connessione a bassa latenza ed elevata larghezza di banda. Questa è chiamata interconnessione ad alta velocità o bus. Potrebbe essere una connessione ethernet, un'interfaccia dati distribuita in fibra o qualsiasi metodo di connessione proprietario.
Gestore di blocco distribuito (DLM)
In quelle architetture di elaborazione a elevato parallelismo in cui la memoria esterna o lo spazio su disco sono condivisi tra i nodi, un gestore di blocco distribuito (DLM) coordina questa condivisione di risorse. Il gestore di blocco distribuito prende una richiesta di risorse da vari nodi e collega i nodi quando le risorse sono disponibili. In alcuni sistemi, il gestore di blocco distribuito assicura la coerenza dei dati e il recupero di qualsiasi nodo fallito.
Architettura/e di elaborazione a elevato parallelismo
Le architetture di elaborazione a elevato parallelismo appartengono a due gruppi principali a seconda di come i nodi condividono le loro risorse.
Sistemi a disco condiviso
Ogni nodo di elaborazione nel sistema a disco condiviso avrà una o più unità di elaborazione centrale (CPU) e una memoria ad accesso casuale (RAM) indipendente. Questi nodi, tuttavia, condividono uno spazio sul disco esterno per l'archiviazione dei file. Questi nodi di elaborazione sono collegati con un bus ad alta velocità. La scalabilità dei sistemi a disco condiviso dipende dalla larghezza di banda dell'interconnessione ad alta velocità e dai vincoli hardware del gestore di blocco distribuito.
Quali sono i vantaggi dei sistemi a disco condiviso?
Poiché tutti i nodi condividono un unico database esterno, il sistema di elaborazione a elevato parallelismo diventa altamente disponibile. Nessun dato viene perso in modo permanente anche se un nodo è danneggiato. I sistemi a disco condiviso sono più semplici in quanto non devono usare un database distribuito. È facile aggiungere nuovi nodi nei sistemi a disco condiviso.
Quali sono gli svantaggi dei sistemi a disco condiviso?
Poiché i nodi di elaborazione condividono un disco comune, il coordinamento dell'accesso ai dati è complesso. Il sistema deve affidarsi a un gestore di blocco distribuito. Queste comunicazioni tra i nodi occupano una certa larghezza di banda dell'interconnessione ad alta velocità. Il disco condiviso ha bisogno di un sistema operativo che lo controlli. Ciò aggiunge ulteriore overhead.
Sistemi shared nothing
Un'architettura più popolare di sistemi di elaborazione a elevato parallelismo è l'architettura "shared nothing". I nodi di elaborazione hanno una memoria indipendente ad accesso casuale e un disco che memorizza i file e i database necessari. I dati che devono essere elaborati sono condivisi tra i nodi utilizzando varie tecniche.
Database replicato: in questo metodo, ogni nodo di elaborazione possiede una copia completa dei dati. In questo modello, il rischio di perdita di dati è basso, anche se alcuni nodi falliscono. Questo modello ha l'overhead dello spazio di archiviazione aggiuntivo.
Database distribuito: in questo modello, il database è partizionato in fette multiple. Ogni nodo di elaborazione possiede una particolare fetta del database e lavora su di essa. Tale metodo risparmia molto spazio su disco poiché non vi è ridondanza. Tuttavia, è più complesso di un database replicato. Qui, molti dati si spostano tra i nodi per completare l'elaborazione, il che aumenta il traffico sul bus di interconnessione. Il modello potrebbe anche comportare una perdita di dati, poiché non vi è ridondanza.

Quali sono i vantaggi dei sistemi "shared nothing"?
I sistemi shared nothing possono scalare orizzontalmente per includere un numero enorme di nodi. Poiché i nodi di elaborazione sono relativamente indipendenti l'uno dall'altro, aggiungere un nuovo nodo di elaborazione è più facile. Se il database è di sola lettura, i sistemi "shared nothing" funzionano in maniera eccellente. Il fallimento di un nodo non influisce sugli altri nodi perché sono quasi indipendenti. Nel caso dei sistemi "shared nothing" le possibilità di corruzione del database sono minime.
Quali sono gli svantaggi dei sistemi "shared nothing"?
I sistemi "shared nothing" con database distribuiti hanno bisogno di molta coordinazione per completare un'attività comune. Ogni nodo possiede fette del database. Gestire questo database potrebbe essere molto difficile. I sistemi shared nothing con il database replicato non sono adatti ad applicazioni con requisiti eccezionali di dati. Se il calcolo ha bisogno di molte operazioni di modifica dei dati come l'inserimento e il join, allora l'architettura "shared nothing" potrebbe non essere fattibile.
Elaborazione a elevato parallelismo (MPP) e multielaborazione simmetrica (SMP)
L'elaborazione a elevato parallelismo è un sistema liberamente accoppiato in cui i nodi non condividono una memoria o in alcuni casi uno spazio su disco. L'elaborazione a elevato parallelismo può essere pensata come una serie di nodi di elaborazione indipendenti che comunicano su un bus di interconnessione ad alta velocità.
La multielaborazione simmetrica è un sistema singolo con più processori strettamente accoppiati. Tali processori condividono il sistema operativo, i dispositivi I/O e la memoria. I sistemi di multielaborazione simmetrica sono spesso più economici dell'elaborazione a elevato parallelismo. Ma la multielaborazione simmetrica è limitata in termini di scalabilità. Tutti i nodi di elaborazione nella multielaborazione simmetrica condividono un singolo bus di memoria, quindi all'aumentare del numero di processori possono verificarsi dei colli di bottiglia nella memoria, che alla fine rallenteranno il sistema. I sistemi di elaborazione a elevato parallelismo sono costosi e complessi, ma possono crescere all'infinito. L'elaborazione a elevato parallelismo funziona meglio quando le attività di elaborazione possono essere perfettamente partizionate ed è richiesta una comunicazione minima tra i nodi.