Cos’è un cluster
Con il termine ”Cluster” si intende una particolare configurazione hardware e
software avente per obiettivo quello di fornire all’utente un insieme di risorse
computazionali estremamente potenti ed affidabili.
Il cluster risponde all’esigenza di utenti ed amministratori di sistema di
assemblare insieme più macchine per garantire prestazioni, capacità, disponibilità,
scalabilità ad un buon rapporto prezzo/prestazioni.
Si può pertanto parlare propriamente di cluster quando un insieme di computer
completi ed interconnessi ha le seguenti proprietà:
-
I vari computer appaiono all’utente come una singola risorsa computazionale;
-
Le varie componenti sono risorse dedicate al funzionamento dell’insieme.
Motivazioni
La scelta di adoperare un cluster per smaltire il calcolo computazionale è dettato
da alcune esigenze:
- un ambiente distribuito è scalabile, e può essere facilmente incrementato
per venire incontro a nuove esigenze computazionali;
- la richiesta di risorse computazionali può essere distribuita fra un insieme
di macchine invece di essere confinata ad un singolo sistema, eliminando i cosiddetti
”colli di bottiglia” e fornendo, quindi, migliori prestazioni;
- la disponibilità delle risorse e dei servizi viene fortemente incrementata.
Problematiche
Insieme ai vantaggi che si percepiscono con queste architetture, nascono anche una
serie di svantaggi da tenere in considerazione:
- l’amministrazione di decine o centinaia di sistemi è molto più onerosa di quella del singolo sistema;
- la gestione della sicurezza cresce esponenzialmente all’aumentare degli host presenti nella rete;
- la gestione di risorse condivise via rete, è più complessa rispetto a quella locale.
Tipologie di cluster
Si possono individuare quattro categorie di problemi in cui l'utilizzo di cluster può
apportare sostanziali miglioramenti delle prestazioni e dei servizi:
- alta disponibilità dei servizi;
- affidabilità dei servizi;
- bilanciamento del carico
- calcolo parallelo
Cluster per l'alta disponibilità dei servizi
Tale soluzione prevede la
predisposizione di un insieme di sistemi che devono mantenere copie separate dei
servizi e che rispondano comunque ad un unico nome di host virtuale con il quale
i client interrogano il singolo servizio;
Cluster per l’affidabilità dei servizi
Questa tipologia di cluster è costituita essenzialmente da due (o più) server
gemelli dove meccanismi hardware e software permettono di far sì che se il nodo
principale del cluster si blocca, il nodo secondario, fino a quel momento in attesa,
si riconfiguri per apparire come il nodo principale del cluster, con un’immagine congrua
al nodo originale immediatamente prima della sua indisponibilità.
Cluster per il bilanciamento del carico
L’idea è quella di introdurre un
sotto-sistema di schedulazione delle richieste applicative, ad esempio un sistema di code,
che sia in grado di reindirizzare la richiesta sul nodo più scarico, in grado di far fronte
alla richiesta utente.
I sotto-sistemi di questo tipo solitamente sono dotati di vari strumenti amministrativi
che permettono un controllo molto fine sull’utilizzo delle risorse e che consentono un
monitoraggio avanzato dello stato del cluster;
Cluster per il calcolo parallelo
Lo sviluppo di architetture cluster per il calcolo parallelo trova ampi spazi nel
panorama delle soluzioni computazionali ad alte prestazioni grazie alla forte riduzione
dei costi che questi sistemi hanno rispetto ai supercalcolatori.
Si è sempre più affermata l’idea di assemblare grandi quantità di processori classe
PC con una struttura di comunicazione a banda alta e bassa latenza, appositamente progettata.
Per mantenere tali caratteristiche a volte viene utilizzato un protocollo di rete diverso dal
TCP/IP (come Myrinet), che contiene troppo overhead rispetto alle limitate esigenze di
indirizzamento, routing e controllo nell’ambito di una rete in cui i nodi siano ben noti
a priori.
In alcuni casi viene utilizzato un meccanismo di Direct Memory Access (DMA) fra i nodi,
fornendo una sorta di distribuited shared memory che può essere acceduta direttamente da
ogni processore su ogni nodo.
Inoltre, è previsto un livello di comunicazione a scambio di
messaggi (message passing) per la sincronizzazione dei nodi, le cui implementazioni più
diffuse sono rappresentate da MPI (Message Passing Interface), OpenMP (Open Message Passing)
e PVM (Parallel Virtual Machine):
- MPI: è una API (Application Program Interface) per gli sviluppatori di programmi
paralleli che garantisce una piena astrazione dall’hardware correntemente utilizzato
senza alcuna necessità di inserire nel codice del programma alcuna direttiva di effettiva
distribuzione dei segmenti di codice fra i nodi del cluster garantendo, fra l’altro, una
buona portabilità del codice prodotto;
-
PVM: permette ad un insieme di computer di essere visto come una singola macchina
parallela; la Parallel Virtual Machine è composta da due entità principali: il processo PVM
daemon su ogni processore e l’insieme delle routine che ne forniscono il controllo.
Sistemi cluster esistenti
Si possono già trovare in giro per la rete diversi sistemi che permettono il clustering di
risorse computazionale, molti dei quali sono distribuiti con licenza gpl e sono open source.
Tra quelli più noti potete trovare Mosix, OpenMosix e Beowulf.