# Computercluster

Een computercluster bestaat uit een aantal computers die met elkaar verbonden zijn met een snelle verbinding (veelal Myrinet- of Infiniband-verbindingen) en die als één computer een berekening uitvoeren. De bekendste variant hiervan staat bekend als een "Beowulf-cluster", welke werkt onder het besturingssysteem Linux. De naam zelf is weer afkomstig van de allereerste Linux-cluster, die de naam Beowulf meekreeg.
Het gebruik van computers in clusters is onder andere ontwikkeld door Digital Equipment Corporation, die in de jaren 1980 al VAX-computers koppelde in clusters. In het besturingssysteem VMS zijn vanaf versie 5 (ca. 1987) standaard clustermogelijkheden ingebouwd. Voor de "cluster interconnect" kon een speciale verbinding gebruikt worden die vaak ook dubbel uitgevoerd werd, maar ook normaal Ethernet, een WAN-verbinding of zelfs de SCSI-bus konden gebruikt worden. Hierbij lag de nadruk niet zozeer op het vergroten van de prestaties, maar meer op het vergroten van de beschikbaarheid. Ook aparte opslagsystemen ("storage controllers") kunnen worden opgenomen in de cluster, waardoor de opslag in de cluster niet afhankelijk is van een enkele computer.

## Technische aspecten

Bij een cluster is het vrij gebruikelijk dat niet alle deelnemende computers tegelijkertijd opgestart worden. Een reden hiervoor is bijvoorbeeld een piek in het elektriciteitsgebruik als de condensatoren van de voeding van de server vol lopen; als alle servers tegelijk gestart worden kunnen de stoppen springen. Bij sommige clusterarchitecturen bestaat hierbij een kans dat twee groepen onafhankelijk van elkaar besluiten de cluster te vormen, er kunnen dan twee "halve" clusters ontstaan in plaats van één hele. Bij VMS is dit opgelost door een "quorumparameter": een cluster kan alleen gevormd worden als de deelnemende computers samen de helft plus een van de stemmen inbrengen.

## Alternatieven

Een veel goedkopere, maar niet geheel gelijkwaardige variant is distributed computing, waarbij de rekenkracht over (min of meer toevallig) beschikbare computers in een netwerk wordt verdeeld, en waarbij soms zelfs uitsluitend de idle time van pc's die een clientprogramma draaien gebruikt wordt. Een bekend voorbeeld hiervan is het project SETI@home.

## Netwerk

Parallelle applicaties communiceren zeer veel. Tijdens het verzenden van een bericht zijn zowel de zendende machine als de ontvangende machine aan het wachten en dit is zonde van de rekentijd. Een gewoon ethernet is in veel gevallen dan ook volstrekt onvoldoende. In veel clusters wordt daarom een parallel netwerk (interconnect) gebruikt. Systemen hiervoor zijn Quadrics, Myrinet en Infiniband. Deze systemen leveren zowel hogere bandbreedte als zeer lage latentietijden.

## Programmering

Kenmerk van een computercluster is dat een programma verdeeld over meerdere fysieke computers draait, men spreekt hier veelal van gedistribueerd geheugen. Een programma moet dan ook aangepast worden om op een cluster te kunnen draaien. Er bestaan verscheidene programmeerlagen en -raamwerken voor parallelle programmering, zoals PVM, MPI, en Charm++. Deze systemen zorgen dat berichten van de ene machine naar de andere getransporteerd worden, via een bepaald netwerk. Parallelle software vereist een van deze systemen. In zeldzame gevallen kan parallelle software ook zelf voor de communicatie zorgen.
MPI wordt in de praktijk het meest gebruikt. MPI is een industriestandaard beheerd door het MPI consortium. De clusterfabrikant levert één of meerdere MPI-implementaties mee bij het cluster, waartegen de software gecompileerd wordt. Gebruik van software waar geen broncode van bijgeleverd wordt is dan ook problematisch op clusters, maar komt toch voor. Hiertoe wordt dan een bepaalde soft-/hardwarecombinatie gecertificeerd door de leverancier van de applicatiesoftware.