# Computer cluster

In informatica un computer cluster, o più semplicemente un cluster (dall'inglese grappolo), è un insieme di computer connessi tra loro tramite una rete telematica. Lo scopo di un cluster è distribuire un'elaborazione molto complessa tra i vari computer, aumentando la potenza di calcolo del sistema e/o garantendo una maggiore disponibilità di servizio, a prezzo di un maggior costo e complessità di gestione dell'infrastruttura: per essere risolto il problema che richiede molte elaborazioni viene infatti scomposto in sottoproblemi separati i quali vengono risolti ciascuno in parallelo.

## Storia

La storia del calcolo cluster è riassunta nel modo migliore in una nota in In Search of Clusters di Greg Pfister:
«Praticamente ogni dichiarazione rilasciata dalla DEC che menziona i cluster dice: DEC, che ha inventato i cluster.... Non li ha inventati neanche IBM. Gli utenti hanno inventato i cluster, dal momento che non potevano portare avanti tutto il loro lavoro su un solo computer, o necessitavano di un backup. La data dell'invenzione è sconosciuta, ma penso che sia durante gli anni '60, o anche alla fine dei '50.»
La base della tecnologia del calcolo cluster inteso come il compiere un lavoro qualsiasi parallelamente fu discutibilmente introdotta da Gene Amdahl della IBM, che nel 1967 pubblicò un articolo con quella che sarebbe stata considerata la base del calcolo parallelo: la Legge di Amdahl, che descrive matematicamente l'aumento di prestazioni che si può ottenere compiendo un'operazione in una architettura in parallelo.
L'articolo scritto da Amdhal definisce le basi ingegneristiche sia per il calcolo multiprocessore che per il calcolo cluster. la differenza significativa tra i due sta nel fatto che le comunicazioni interprocessore sono supportate all'interno del computer (ad esempio con un bus o rete di comunicazione interna adattata), invece il calcolo cluster avviene all'esterno del computer, su una rete commerciale.
Di conseguenza la storia dei primi computer cluster è più o meno direttamente inclusa nella storia delle prime reti, dato che uno dei primi motivi per lo sviluppo di una rete è stata la possibilità di collegare fra loro risorse di calcolo, di fatto creando un cluster di computer.
Le reti a commutazione di pacchetto furono inventate concettualmente dalla società RAND nel 1962. Utilizzando il concetto di una rete a commutazione di pacchetto, il progetto ARPANET riuscì nella creazione nel 1969 di quello che era forse il primo cluster di computer basato su una rete commerciale collegando quattro diversi centri di calcolo (ognuno dei quali era quasi un "cluster", ma probabilmente non un cluster commerciale).
Il progetto ARPANET si sviluppò quindi come Internet, che può essere considerata la madre di tutti i computer cluster; Internet raffigura il paradigma odierno del cluster di tutti i computer del mondo.

## Descrizione

I cluster hanno le seguenti caratteristiche: i vari computer risultano come una singola risorsa computazionale e le varie componenti sono risorse dedicate al funzionamento dell'insieme; il server cluster è quindi un server ad altissime prestazioni poiché, invece di gravare su un'unica macchina standalone, suddivide il carico di lavoro (quindi, ad esempio, funzioni di mail server, web server, database server e file server) su più macchine, essendo di fatto una forma di sistema distribuito.
Attualmente, la clusterizzazione consiste nel connettere, meglio via fibra ottica, X server fisici, quasi sempre di tipo blade, che condividono Y unità di storage, possibilmente dotati di dischi SSD, il tutto attraverso switch prestazionali, e di erogare agli utenti i servizi necessari sotto forma di Z istanze virtuali, ivi comprese risorse in remoto. Questa è la tipica situazione della logica cloud, come anche delle reti distribuite geograficamente (si pensi alle sedi dislocate sul territorio di un'impresa o un ente, che devono avere un'unica rete aziendale). Logicamente, le due situazioni non sono disgiunte: è ormai normale che una rete aziendale multisede utilizzi il cluster comprendendo anche risorse in cloud. Appositi e complessi software di virtualizzazione e di networking permettono all'administrator di gestire ottimamente il consolidamento e operare automaticamente il bilanciamento, risultando di fatto indispensabili nel caso frequente di marche e modelli diversi dell'hardware di rete da integrare nonché dei diversi sistemi operativi server (domain controller, servizi di rete, programmi applicativi).
I mainframe, sia per la produzione sia per il monitoraggio, sono le tipiche tipologie di macchine che formano un cluster.
Nell'architettura cluster un nodo è una macchina elaborativa ovvero un server fisico o virtuale che prende parte al grappolo. Per l'utente o i client, il cluster è assolutamente trasparente: tutta la notevole complessità hardware e software è mascherata; i servizi vengono erogati, i dati sono resi accessibili e le applicazioni elaborate come se fossero tutte provenienti da un solo mega computer centrale.

### Tipi

Esistono tre tipi di cluster (i primi due sono i più diffusi):
* Fail-over Cluster: il funzionamento delle macchine è continuamente monitorato e quando uno dei due host smette di funzionare un'altra macchina subentra in attività. Lo scopo è garantire dunque un servizio continuativo garantendo cioè alta disponibilità di servizio grazie all'alta affidabilità dovuta alla tolleranza ai guasti del sistema cluster per effetto della ridondanza di apparati;
* Load balancing Cluster: è un sistema nel quale le richieste di lavoro sono inviate alla macchina con meno carico di elaborazione distribuendo/bilanciando così il carico di lavoro sulle singole macchine. Questo garantisce tempi minori di processamento di un servizio e minore affaticamento di una macchina;
* High Performance Computing (HPC Cluster): i computer sono configurati per fornire prestazioni estremamente alte. Le macchine suddividono i processi di un job su più macchine, al fine di guadagnare in prestazioni. La peculiarità saliente è che i processi sono parallelizzati e che le routine che possono girare separatamente saranno distribuite su macchine differenti invece di aspettare di essere eseguite sequenzialmente una dopo l'altra. Gli HPC sono diffusi specialmente nei Centri di Elaborazione Dati (CED);
* Cluster virtualizzato, oltre alle precedenti caratteristiche combina le tecnologie di clusterizzazione con quelle di virtualizzazione ottenendo cluster di macchine virtuali su una o più macchine fisiche ottenendo così il massimo grado di complessità, la massima flessibilità possibile e notevole risparmio sui costi di esercizio.

### Requisiti

Per ottenere un sistema di computer operanti come un cluster è necessario:
* hardware di rete ad elevate prestazioni
* un sistema operativo distribuito in grado di far funzionare i computer come cluster (per esempio GNU/Linux, utilizzando OpenMosix)
* un algoritmo parallelizzabile.

### Vantaggi

I vantaggi dell'utilizzo di questo sistema sono:
* L'economicità, infatti questi sistemi sono fino a quindici volte più economici dei tradizionali supercalcolatori rispetto ai quali, a parità di prestazioni, permettono un notevole risparmio sui componenti hardware.
* La scalabilità, dal momento che le risorse sono distribuite.
* Facilità di aggiornamento e manutenzione.
* Disponibilità di un gran numero di software Open Source per i cluster, come MOSIX, openMosix e Beowulf.
* Incremento capacità e velocità di calcolo grazie allo sfruttamento di più unità di calcolo, di un'architettura più potente e maggiore disponibilità di memoria.
* Lo sfruttamento della cooperazione per risolvere problemi complessi.
* L'affidabilità, in quanto il sistema continua a funzionare anche in caso di guasti a parti di esso, con prestazioni inferiori.

### Svantaggi

Gli svantaggi principali sono:
* Difficoltà di gestione e di organizzazione di un elevato numero di computer;
* Scarse prestazioni nel caso di applicazioni non parallelizzabili;
* Occupazione di spazio fisico notevolmente superiore a quella di un singolo server;
* Maggiore consumo di energia rispetto a un singolo server.

## Implementazioni

MPI è una libreria di programmi di comunicazione tra computer, ampiamente disponibili che permette la scrittura di programmi paralleli nei linguaggi C, Fortran, Python, OCaml, e molti altri linguaggi di programmazione.
Il mondo Linux supporta vari tipi di software per il clustering, come:
* Beowulf, distcc, MPICH ed altri - gran parte sono applicazioni di clustering molto specializzate. Il programma distcc fornisce compilazione parallela quando utilizza la GCC.
* Linux Virtual Server, Linux-HA - sono cluster con un computer-direttore che permette alle richieste di servizi in arrivo di essere distribuite attraverso molteplici nodi del cluster.
* MOSIX, openMosix, Kerrighed, OpenSSI - sono cluster sotto ogni punto di vista, che sono stati integrati nel kernel che provvede alla migrazione automatica dei processi tra nodi omogenei. OpenSSI, openMosix e Kerrighed sono implementazioni single-system image.
Linux è attualmente il sistema più utilizzato per il clustering: secondo TOP500 nel 2006 è stato il sistema più usato in assoluto.
La piattaforma Microsoft Windows Compute Cluster Server 2003 basata su Windows Server 2003 Standard x64 Edition fornisce elementi per il calcolo ad alte prestazioni, come "Job Scheduler", le librerie MSMPI ed altri strumenti di amministrazione.
Lincoln, recentemente installato nel NCSA è un cluster di 450 Dell PowerEdge 1855 blade servers sui quali gira Windows Compute Cluster Server 2003. Questo cluster debuttò al centotrentesimo posto nella TOP500 nel giugno 2006 anche se attualmente come unico rappresentante di questa tecnologia.
DragonFly BSD, un fork di FreeBSD 4.8 è stato ridisegnato nel suo cuore elaborativo per abilitare capacità di clustering naturali. Consente inoltre di ottenere capacità di single-system image.

### Clustering software (software libero/open source)

* BioWolf Pack
* BOINC - Berkeley Open Infrastructure for Network Computing
* Gluster - The GNU Clustering Platform
* Linux-Cluster Project Global File System & HA
* Linux Virtual Server
* Linux-HA
* Maui Cluster Scheduler
* OpenSSI High-availability, load-balancing, and high-performance clustering with or without a SAN.
* OpenMosix
* Open Source Cluster Application Resources (OSCAR)
* Rocks Cluster Distribution
* Sun Grid Engine
* TORQUE
* WareWulf

### Prodotti commerciali che permettono di implementare il "clustering"

* Alchemi
* Condor
* HP Serviceguard
* HP's OpenVMS
* Microsoft Windows Compute Cluster Server 2003 (CCS) o Microsoft Cluster Server (MSCS)
* Platform LSF
* NEC ExpressCluster
* Openpbs
* PBSPro
* Red Hat Cluster Suite,
* Sun N1 GridEngine Sun N1 GridEngine
* Tangosol Coherence Clustering Software
* Scyld Beowulf Cluster
* Platform Open Cluster Stack
* Xgrid from Apple
* Cluster H.A. NIXO

## Applicazione di cluster computing per grandi prestazioni

L'organizzazione TOP500 elenca ogni semestre i 500 calcolatori più veloci al mondo e solitamente in questa lista sono inclusi molti cluster.
TOP500 è una collaborazione fra università di Mannheim, università del Tennessee e centro di elaborazione scientifico nazionale di ricerca energetica al laboratorio nazionale Lawrence Berkeley. Al novembre 2006, il supercomputer più veloce era il sistema IBM Blue Gene/L del Dipartimento per l'energia degli USA con le prestazioni di 280.6 TeraFLOPS.
Usare cluster può fornire significativi incrementi di prestazioni contenendo il costo. System X, il supercomputer di Virginia Tech, al giugno 2006 era il ventottesimo supercomputer più potente sulla terra Archiviato il 30 giugno 2019 in Internet Archive.. È un cluster da 12.25 TeraFLOPS costituito da 1100 Apple XServe G5 a doppio processore da 2.3 gigahertz (RAM da 4 GB, HD SATA da 80 GB) con sistema operativo macOS ed interconnessi tramite InfiniBand. Il cluster inizialmente era costituito da Power Mac G5 che poi sono stati venduti. Gli XServe sono impilabili e meno voluminosi dei Mac desktop e consentono di realizzare quindi un cluster più compatto. Il costo complessivo del suddetto cluster di Power Mac era $5.2 milioni, un decimo del costo dei più lenti supercomputer costituiti da un unico elaboratore (mainframe).
Il concetto centrale del cluster Beowulf è l'uso di calcolatori commerciali per produrre un'alternativa economica ad un supercomputer tradizionale. Un progetto che ha preso questo concetto portandolo all'estremo era lo Stone Soupercomputer.
Il progetto SETI@home sembrerebbe essere il più grande cluster distribuito esistente. Utilizza circa tre milioni di personal computer sparsi in tutto il mondo per analizzare i dati provenienti dal radiotelescopio di Arecibo, al fine di trovare la prova dell'esistenza di intelligenza extraterrestre.