Klaster (infotehnoloogia)

**Kobar** ehk toorlaenuna **klaster** on infotehnoloogias kogum omavahel ühendatud arvuteid, mis töötavad ühtse tervikuna.

Klastrite loomise eesmärgiks on paralleelarvutuste abil jõudluse kasvatamine ja veakindluse tagamine. Klastri arvutusvõimsus võib teatud juhtudel olla samaväärne traditsioonilise superarvuti arvutusvõimsusega, ent hinna-jõudluse suhtes on klaster enamasti soodsam kui superarvuti.

Laias perspektiivis võib iga klastri jagada kolmeks põhikomponendiks: arvutid, nendevaheline võrk ja paralleelsust rakendav tarkvara. Klastris olevaid arvuteid kutsutakse tihti ka arvutussõlmedeks või lihtsalt sõlmedeks.

Võrgutehnoloogiatest on klastrites enim kasutatavad Gigabit Ethernet ja kiire Ethernet tänu odavusele, aga kasutatakse ka tehnoloogiaid nagu Myrinet, Infiniband, Infinipath, QsNet ja SCI, mis on eelmainitutest oluliselt madalama latentsusega.

Klastrites kasutatakse operatsioonisüsteemidena eelkõige teatud Linuxi versioone, kuid ka eriotstarbelisi operatsioonisüsteeme ja Windows NT versioone. Sõlmede virtuaalseks ühendamiseks kasutatakse klastrites erilist operatsioonisüsteemi ja rakenduste vahel tegutsevat vahevara, mis jätab süsteemist ühtlase mulje. Paralleelprogrammeerimiseks kasutatakse klastrites enamasti teekide standardeid PVM (inglise *Parallel Virtual Machine*) ja MPI (inglise *Message Passing Interface*).

## Ajalugu
Teema kohta, kes ja millal lõi esimese klasterarvuti, leidub vastakaid arvamusi. Üks esimesi kohti, kus kasutati midagi klastrisarnast, on IBM ja MIT poolt 1950. aastatel ehitatud SAGE õhukaitsesüsteem USA õhujõudude jaoks. SAGE-s kasutatud arvutite ülesandeks oli võrrelda teadaolevate lendude trajektoore radaritelt saadud informatsiooniga, et varakult tuvastada võimalikke vaenlase lennukeid. Selleks kasutati igas SAGE baasis kaht omavahel ühendatud arvutit. Ühe riknemisel sai teine arvuti kohe esimese ülesanded üle võtta.

Läbimurre sobivate riist- ja tarkvaratehnoloogiate väljakujunemisel toimus 1970. aastate lõpus: võeti kasutusele esimesed mikroprotsessorid. Hakati laiatarbeliselt tootma personaalarvuteid ja tööjaamu. Valmis Etherneti kohtvõrgu standard, mis oli ka hinna poolest võrdlemisi soodne.

1980. aastatel hakkas tõusma huvi klastrite potentsiaali vastu. NSA kasutas 160 Apollo tööjaama klastrina teatud arvutuste läbiviimiseks. DEC arendas välja süsteemi, mis koosnes mitmest omavahel ühendatud AX11/750-st, ja võttis ka esimesena kasutusele termini "klaster". Sellel perioodil hakkas teaduslik kogukond laialdaselt uurima paralleelarvutuste võimaluste rakendamist. Töötati välja ka sõnumiedastusmudel, mis domineerib tänapäeva klasterarvutamist.

Väga oluline muutus oli 1989. aastal loodud PVM, mille ülesandeks oli andmeedastuse koordineerimine klastrisse kuuluvate arvutite vahel. See oli esimene hajus tarkvarasüsteem, mida sai rakendada paljudel platvormidel.

UC Berkley projekti NOW raames loodi 1993. aastal esimene klaster, mis pääses TOP 500 maailma kõige võimsama arvuti nimekirja. Samal aastal toodi turule ka Myrinet, võrgutehnoloogia, mis oli oluliselt kiirem kui samal ajal kasutuses olnud kiire Ethernet.

Esimese Beowulf-tüüpi PC-arvutite klastri töötas välja NASA 1994. aastal, rakendades varajasi Linuxi versioone ja PVM-i. Kasutati 16 Inteli 100&nbsp;MHz 80486 protsessoriga PC-arvutit, mis olid omavahel ühendatud 10 Mbit Etherneti abil. Samal aastal arendati välja ühtne sõnumiedastussüsteem MPI. MPI on tänapäeval peamine klastrite teekide standard.

1996. aastal Los Alamos National Laboratory ja CalTEC koostöös NASA-ga suudeti luua 1 GigaFlopsise Beowulf süsteem, mis maksis vaid 50 000 dollarit. Selle eest teenisid nad ka Gordon Belli hinna/jõudluse preemia.

Sajandi lõpuks oli TOP 500-sse jõudnud 28 klastrit, millest parima sooritus oli 500 GigaFlopsi. 2000. aastate alguseks ületati kiiresti ka ühe TeraFlopsi piir.

## Liigitamine
Üks võimalikest klastrite liigitusviisidest on nende jagamine tööülesandeks ehk funktsiooniks järgi. Tasub mainida, et igat klastrit ei saa tihti üheselt kindlasse gruppi liigitada. Näiteks on tüüpiline, et arvutusklaster on samal ajal ka töökindlusklaster.

### Töökindlusklaster (inglise ''High Availability cluster'')
Klastrid, mille puhul on tähtis, et süsteem oleks alati töökorras. Tüüpiline töökindlusklaster jaguneb primaarseks sõlmeks, mis täidab mingit ülesannet, ja tagavarasõlmedeks, mis on kuulavas režiimis. Primaarse sõlme riknemisel võtab mõni teine klastri sõlm selle tööülesanded üle. Sedasorti klastreid kasutatakse eelkõige serverite jaoks, mis peavad pidevalt olema võimelised oma teenust pakkuma. Nendeks võivad olla näiteks kriitilise tähtsusega andmebaasid, failide jagamine, äri- ja klienditeenindusrakendused.

Tavaliselt kasutatakse kahest sõlmest koosnevaid HA klastreid, kuid on olemas ka tunduvalt suuremaid. HA klastri sõlmed peavad omama alati ühtesi ja samu andmeid. Selleks kasutatakse kas ühiseid või eraldiseisvaid salvestusseadmeid. Eraldatud salvestusseadmete korral peavad tagavarasõlmed pidevalt enda andmekandjatele primaarse sõlme andmeid ümber kopeerima.

Oluline omadus HA tarkvara puhul on see, et kui kõikide sõlmede vahel peaks korraga ühendus katkema, ei tohi arvutitel tekkida arusaam, et nad kõik peaksid hakkama primaararvutiks. Selline olukord võib kiiresti viia andmete riknemiseni.

### Arvutusklaster (inglise ''High-Performance computing cluster'')
Klastri tüüp, mida peamiselt kasutatakse suurt arvutusvõimsust nõudvate teaduslikke arvutuste tegemiseks, aga ka näiteks 3D-graafika renderdamiseks. Ühendamisläheduse kaudu võiks arvutusklastrid jagada kaheks:	

;Beowulf: Üle kohtvõrgu ehitatud klaster, mis peamiselt koosneb laiatarberiistvarast. Tavaliselt kasutatakse üht juhtsõlme, mis on ühendatud välismaailmaga ja millel on sisend- ja väljundseadmed. Levinud on peamiselt Linuxi operatsioonisüsteemid. Beowulf klastrid võivad olla ka HA klastrid. 
;Võreklaster (inglise *Grid*): Võreklastri sõlmed on omavahel palju nõrgemalt seotud. Arvutid võreklastris võivad asuda erinevates võrkudes. Võreklastritel rakendatakse ülesandeid, mis on väga kergesti paralleelseks muudetavad ega vaja klastri sõlmede omavahelist suhtlust. Tuntumad näited on Seti@home, mis kasutab ära vabatahtlike arvuteid üle kogu maailma, et analüüsida kosmosest tulevaid signaale maaväliste tsivilisatsioonide leidmiseks ja Folding@home, mis sarnasel meetodil uurib proteiine, et leida ravimeetodeid haigustele. Olenevalt taksonoomiast võidakse võreklastreid ka üldse mitte liigitada klastrite alla, vaid võtta kui täiesti iseseisvat paralleelarvutuse meetodit. 
	

Sellise funktsionaalsusega klastrid suudavad pakkuda tugevat konkurentsi traditsioonilistele superarvutitele. TOP500 superarvutite nimekirja statistika lehelt võib lugeda, et 2011. aastal moodustavad 82% nimekirjas olevatest arvutitest just klastrid. Samast allikast võib ka näha, et 1997. aastal oli sama näitaja vaid 0,2%.

Klastrisse ühendatud arvutid ei pea ilmtingimata pidevalt olema pühendunud klastrile määratud ülesandele. NOW (inglise *Network of workstations* või vahel COW *Cluster of Workstations*) on klaster, kus iga arvuti on ka iseseisvalt kasutatav muudeks töödeks. Tavaliselt nädalavahetustel või öösel kasutatakse arvuteid sellises süsteemis arvutusklastrina. Sellised klastrid on peamiselt kasutusel kontorites või ülikoolide arvutiklassides. Lähedalt seotud termin on ka *Cycle Harvesting*, kus kasutatakse ära võrku ühendatud arvutite vabu ressursse. Selline keskkond nõuab tolerantseid algoritme, mida ei häiri suured viited andmevahetusel ja ebaühtlane ning pidevalt muutuv koormusjaotus arvutite vahel.

### Koormuse jagamise klastrid (inglise ''Load balancing cluster'')
Koormuse jagamise klaster, tuntud ka kui serveripark, on omamoodi hübriid töökindlusklastrist ja arvutusklastrist. Töökoormus tasakaalustatakse sõlmede vahel, et suurendada läbilaske võimet, vähendada viiteaegu ja vältida ülekoormatust. Samas ühe sõlme riknemise korral on võimalik koormus teistele arvutitele üle kanda nagu HA klastris. Koormuse jagamise klastreid kasutatakse peamiselt veebiteenuste puhul.

## Komponendid
Laialt võttes võib iga klastri jagada kolmeks komponendiks: arvutiteks ehk sõlmedeks (*node*), võrguks, mis sõlmi ühendab ja tarkvaraks, mis oskab paralleelsust ära kasutada.

### Sõlmed
Sõlmed kujutavad endast klastrisse ühendatud arvuteid, mis võivad täita erinevaid funktsioone. Lihtsamates arvutusklastrites täidab kõik administratiivsed ülesanded ära primaarne sõlm ja ülejäänud sõlmedele jääb ülesandeks vaid arvutustegevus. Keerukamates arvutusklastrites võib aga sõlmi olla palju ja nende ülesanded mitmekülgsemad. Mõned tüüpilisemad sõlme funktsioonid: 
;Kasutajaga suhtlemine: Selle sõlme eesmärgiks on lasta kasutajal sisestada ülesandeid klastri jaoks ja lasta tal näha ülesande läbimise staatust. Samuti võib läbi selle sõlme käia vahevara seadistamine.

;Klastri juhtimine: See sõlm tegeleb arvutusülesannete jagamisega arvutussõlmedele.

;Andmete salvestamine: Suurtes kobarates, mis toodavad tohutul hulgal andmeid, kasutatakse salvestamiseks eraldi sõlmi.

;Arvutuste läbiviimine: Sõlm, mis reaalselt tegeleb vajaliku arvutustööga. Tavaliselt puuduvad Beowulf-tüüpi klastrite puhul neil sõlmedel ka sisend -ja väljundseadmed.

;Installiserver: Server, mis paigaldab sõlmedele operatsioonisüsteemi, teegid ja muu vajaliku tarkvara.

Need ülesanded käivad pigem arvutusklastrite kohta ja võivad erinevates klastrites olla sõlmede peale väga erinevalt jaotatud. HA klastris võib sõlme ülesandeks olla hoopis kontrollimine, kas primaarne sõlm on töökorras ja vajadusel selle ülesanded üle võtta.

Klastris olevad arvutid võivad oma riist- ja tarkvara poolest olla nii homogeensed kui ka heterogeensed. Levinumad on siiski homogeensed süsteemid, kuna neid on tunduvalt lihtsam hallata. Riistvara poolelt ei ole tihti vaja kõiki komponente, mida võiks leida tüüpilises lauaarvutis. Kõvakettad võivad olla(olenevalt klastri tüübist) kas igas iseseisvas sõlmes või ühes kindlas sõlmes. Klaviatuur, hiir ja kuvar on tihti olemas vaid sõlmel, millega kasutaja saab suhelda. Teistele klastri sõlmedele ligipääsemiseks võib kasutada erilisi KVM(inglise *keyboard-video-mouse*) kommutaatoreid, millega saab ühe klaviatuuri, kuvari ja hiire ühendada korraga kõigi arvutitega. Alternatiiv on muidugi ka lihtsalt klaviatuuri, hiire ja kuvariga vastava arvuti juurde minna ja need sellega ühendada.

#### Mängukonsoolid
Sõlmed klastris ei pea olema ilmtingimata tavalised arvutid. Arvutusklastreid on ehitatud ka PlayStation 2, PlayStation 3 ja Xboxi mängukonsoolidest.

Üks PlayStation 3 klaster on kasutuses ka Tartu Ülikooli matemaatika-informaatikateaduskonnas.

### Võrgud
Klastersüsteemides kasutatavad võrgutehnoloogiad peavad olema suure ribalaiusega ja väikese latentsusega, et sõlmed saaksid omavahel kiiresti andmeid vahetada. Suur ribalaius on tähtis eelkõige suurte andmehulkade vahetamisel. Reaalajas toimivatele rakendustele või rakendustele, mis vahetavad tihedalt sõlmede vahel andmeid, on eriti tähtis madal latentsus.

Üks levinud lahendus on Gigabit Etherneti kasutamine, kuna see on üks soodsamaid tehnoloogiaid ja pakub piisavat jõudlust enamiku toimingute jaoks.

Suuremate kiiruste saavutamiseks on ka kasutusel spetsiaalselt suure arvutusjõudluse jaoks loodud Myrinet ja Infiniband.

Infiniband on Gigabit Etherneti järel praegu TOP 500 superarvutite seas kasutatavuselt teisel kohal. Infinibandi arhitektuuri spetsifikatsioon defineerib ühendused protsessorite ja suure jõudlusega sisend-/väljundseadmete vahel. Infinibandi omadustest on silmapaistvad suur läbilaskevõime, madal latentsus, QoS(inglise *Quality of Service*) ja skaleeritavus. Kasutatakse nii vask- kui ka valguskaableid.

Myrinet on firma Myricom loodud kohtvõrgusüsteem, mis on loodud spetsiaalselt klastrite jaoks. Myrinetil on Ethernetiiga võrreldes palju väiksem protokollipaketti juhtiva ja kontrolliva informatsiooni hulk. Tänu sellele on Myrinetil suurem läbilaskevõime ja väiksem latentsus. Myrinetti kasutatakse tihti olukordades, kus programm suhtleb otse võrguga, jättes OS poole pöördumata. Füüsilisel tasemel kasutatakse kaht optilist kaablit, üles- ja allavool, mis on ühendatud ühe ja sama pistiku külge.

### Tarkvara
Levinuimad on Linuxi-põhised operatsioonisüsteemid. Väiksemates klastrites tehakse reeglina sõlmede operatsioonisüsteemide paigaldus manuaalselt, suuremates aga kasutatakse selleks kloonimissüsteemi. Kloonimissüsteem paigaldab operatsioonisüsteemi ja muu vajaliku tarkvara klastri sõlmedele. Sellega tegeleb tavaliselt eraldi serverarvuti.

Omavahel ühendatud arvutid seotakse ühiseks arvutussüsteemiks tarkvaraga, mida kutsutakse vahevaraks. Vahevara on tarkvara kiht, mis aktiivselt tegutseb operatsioonisüsteemi ja kasutaja rakenduste vahel. Vahevara seob sõlmed omavahel sõnumiedastustega, protsesside liigutamisega ning ülesannete jälgimise ja sünkroonimisega sõlmede vahel.

Levinumad teegid paralleelprogrammeerimise jaoks on PVI (inglise *Parallel Virtual Machine*) ja MPI (inglise *Message Passing Interface*). Traditsiooniliselt toetavad paralleelprogrammeerimise teegid keeli C, C++ ja Fortran.

Kogu klastri jaoks vajaliku tarkvara ülesseadmiseks on loodud ka tarkvarakomplekte, mille paigaldamisel on võimalik saada klaster kiiresti tööle. Teatud komplektide, näiteks ROCKS, puhul kaasneb ka operatsioonisüsteem. Selline viis lihtsustab küll oluliselt klastrite tarkvara paigaldust, kuid sellega võivad kaasneda teatud puudused. Näiteks teatud paketiga võib tulla kaasa tarkvara, mida ei ole klastril parasjagu vaja ja mis teeb klastri haldamise keerukamaks. Levinumad tarkvarapaketid Linuxile on NPACI Rocks, OSCAR ja Scyld Beowulf. Lisaks on olemas ka võimalusi, kus kogu vajaliku tarkvara saab buutida CD-ROM’lt või mälupulgalt igale arvutile klastris ja otseselt paigaldamist ei olegi vaja.

Arvutusklastrite rakendamine ei ole sobiv kõikide arvutuste jaoks. Selleks, et klaster ennast ära tasuks, peab olema võimalik rakendatav ülesanne jagada paralleelseteks osadeks, mida iga sõlm eraldi saaks lahendada. Amdhali seadus ütleb, et programmi lõpetamiseks kuluv aeg on mitmeprotsessorilistes süsteemides piiratud sellega, kui palju aega kulub kõige aeglasema mitteparalleelseks muudetava osa töötlemise peale. Olukorras, kus programm ei ole hästi paralleelseteks osadeks muudetav, on tõhusam kasutada üht kiiret arvutit kui paljusi paralleelseid arvuteid. Tüüpiliselt osa koodist, mis on paralleelseks muudetav ülesande suurenemisel, kasvab kiiremini kui see osa, mis seda ei ole. Järelikult Amdhali seadusest tulenev probleem ka enamikul juhtudel ülesande suurenedes tegelikult väheneb.

## Vaata ka
	
*Hajusarvutus 	
*Superarvuti
*Server

## Viited

## Välislingid
* exforsys
* scribd