Paskirstytasis skaičiavimas

**Paskirstytasis skaičiavimas** tai kompiuterinio apdorojimo metodas, kurio metu skirtingos programos dalys tuo pat metu veikia keliuose kompiuteriuose, kurie tarpusavyje komunikuoja per tinklą. Paskirstytasis skaičiavimas yra **dalinio** arba kitaip **lygiagretaus skaičiavimo** tipas, tačiau pastarasis terminas labiau apibrėžia skaičiavimą, kurio metu skirtingos programos dalys tuo pat metu veikia keliuose procesoriuose, kurie yra to paties kompiuterio dalis. Nors abu skaičiavimo tipai reikalauja, kad programa būtų sudalinta į segmentus (dalis, kurios veikia tuo pačiu metu), paskirstytam skaičiavimui dar reikia įvertinti skirtingas aplinkas, kuriose veikia atskiros programos dalys. Pavyzdžiui, atskiri kompiuteriai tikriausiai turės skirtingas failų sistemas ir skirtingus aparatinės įrangos komponentus.

Paskirstyto skaičiavimo pavyzdys yra BOINC - karkasas, kuriame stambios problemos gali būti padalintos į smulkias problemas, kurios paskirstomos daugeliui kompiuterių. Vėliau smulkūs rezultatai yra apjungiami į didelį sprendimą.

Paskirstytasis skaičiavimas – tai elementarus galimybės sujungti kompiuterius išnaudojimas. Tačiau jis skiriasi nuo kompiuterių darbo tinkle ar fragmentuoto skaičiavimo. Pastarasis terminas apima kelis kompiuterius, sąveikaujančius tarpusavyje, bet dažniausiai nesidalinančius vienos programos apdorojimu. Pasaulinis tinklas (internetas) yra pavyzdys tinklo, bet ne paskirstyto skaičiavimo.
Sudarinėti paskirstytuosius skaičiavimus naudojama daug technologijų ir standartų, kai kurios iš jų specialiai optimizuotos šiam tikslui: Remote Procedure Calls (RPC) or Remote Method Invocation (RMI) or .NET Remoting.

## Organizavimas

Sąveikos tarp atskirų kompiuterių organizavimas yra svarbiausias uždavinys. Norint panaudoti kuo didesnį kiekį skirtingų kompiuterių tipų komunikacijos kanalo protokolas negali turėti ar naudoti jokios informacijos, kuri gali būti nesuprantama kažkuriems įrenginiams. Ypatingas dėmesys taip pat turi būti skiriamas pranešimų perdavimui. Jie turi būti pristatomi neiškraipyti, o klaidingi pranešimai atmetami, kad nesukeltų klaidos sistemoje ar net visame tinkle.

Kitas svarbus faktorius yra galimybė persiųsti programinę įrangą į kita kompiuterį taip, kad ji veiktų ir kompiuteris galėtų prisijungti prie egzistuojančio tinklo. Tai ne visuomet įmanoma įgyvendinti, o kartais ir nepraktiška, kadangi gali skirtis techninė įranga ar resursai. Tokiu atveju taikomi kiti metodai: išankstinis kompiliavimas ar rankinis programinės įrangos įkėlimas.

## Tikslai ir pranašumai

Yra daug paskirstytojo skaičiavimo sistemų rūšių ir daug iššūkių kuriant tokias sistemas. Pagrindinis paskirstytojo skaičiavimo sistemos tikslas yra sujungti naudotojus ir šaltinius į aiškų, atvirą ir keičiamo dydžio tinklą. Idealiu atveju toks junginys yra net labai atsparus klaidoms ir galingesnis nei dauguma pavienio kompiuterio sistemos variantų.

### Atvirumas

Atvirumas yra paskirstytųjų sistemų ypatybė, kuri užtikrina, kad kiekviena posistemė yra visiškai atvira sąveikai su kita posisteme. Tinklo servisų protokolai – tai standartai, kurie nurodo paskirstytosioms sistemoms būti išplečiamoms ir besikeičiančioms. Iš esmės kintama atvira sistema turi privalumą prieš visiškai uždarą, savarankišką sistemą.

Dėl to atviros paskirstytosios sistemos susiduria su tokiais sunkumais:

;Monotoniškumas
: Tai kas pateikiama atviroje sistemoje jau nebegali būti atšaukta.
;Pliuralizmas
: Paskirstytosios sistemos atskiros posistemės apima heterogenišką, persidengiančią ir iš dalies konfliktišką informaciją. Šių sistemų centre nėra arbitro, kuris nuspręstų kas teisus.
;Neribotas neapibrėžtumas
: Atskiros sistemos gali įsijungti ir išsijungti, o komunikavimo sąsajos gali prisijungti ir atsijungti nuo posistemių asinchroniškai. Todėl negalima iš anksto apibrėžti laiko, skirto įvykdyti operacijai.

## Trūkumai

### Techniniai klausimai

Blogai suprojektuota paskirstytųjų skaičiavimų sistema gali sumažinti visų skaičiavimų patikimumą jei vieno mazgo nepasiekiamumas suardo kitus mazgus. Kaip kažkada pastebėjo Leslie Lamport: „Paskirstytoji sistema tai tokia sistema, kurioje klaida kompiuterio, apie kurio egzistavimą tu net nežinojai, gali padaryti tavo paties kompiuterį nenaudingu.“

Problemų diagnozavimas ir šalinimas paskirstytoje sistemoje taip pat gali tapti sudėtingu, kadangi analizė reikalauja prisijungti prie nutolusių mazgų arba ištirti ryšius tarp mazgų.

Dauguma skaičiavimo tipų nėra tinkami išskirstytai aplinkai, dažniausiai dėl komunikavimo ir sinchronizavimo tarp mazgų masto. Jei tinklo pralaidumas, gaišties laikas ar komunikacijos reikalavimai yra per daug ryškūs, tuomet paskirstytojo skaičiavimo privalumai gali būti nematomi, o atlikimas gali būti prastesnis nei neišskirstytoje aplinkoje.

### Problemos projektuose

Paskirstytojo skaičiavimo projektai gali sugeneruoti rezultatus, kurie jau yra užpatentuoti, net jei generavimo procesas naudoja duomenis iš savanoriškų šaltinių. Tai gali privesti prie nesutarimų, kadangi pramonė pelnosi iš tokių duomenų, kurie gauti pasitelkus savanorius. Be to kai kurie paskirstytieji skaičiavimų projektai (pvz., biologiniai projektai, kurių tikslas suformuoti tūkstančius ar net milijonus bandomųjų molekulių įvairioms medicininėms problemoms spręsti) gali sukurti milžiniškus kiekius neapdorotų duomenų. Tokie duomenys gali būti beverčiai be apdorojimo ar testavimo realaus pasaulio eksperimentais. Tačiau toks apdorojimas ar eksperimentai gali būti labai brangūs ir ilgalaikiai, net trukti dešimtmečius kol visi duomenys bus išanalizuoti. Taigi kol duomenys nėra apdirbti, negalima tikėtis jokios naudos iš skaičiavimo projektų.

Kiti projektai kenčia nuo jų kūrėjų planavimo stokos. Tokie prastai suplanuoti projektai gali neduoti akivaizdžių rezultatų ar nesugeneruoti duomenų, kurie galiausiai būtų pateikti moksliniuose darbuose. Pastebėję, kad projektas nerodo tikėtų rezultatų, projekto valdytojai gali nuspręsti staiga nutraukti projektą negavę jokių rezultatų, taip paversdami visą sunaudotą elektros energiją ir skaičiavimo resursus į bereikšmį darbą. Tokiu atveju savanoriai gali pasijusti nusivylę ir beprasmiškai išnaudoti. Juk visa energija, laikas ir resursai galėjo būti panaudoti kitam projektui, kurį valdytojai geriau suplanavo.

Kita paskirstytojo skaičiavimo projektų problema yra ta, kad jie gali būti nukreipti spręsti problemas, kurios iš esmės yra neišsprendžiamos ar kurias protingiau būtų atidėti ateičiai, kai kompiuterių galimybės bus ženkliai didesnės. Kai kurie projektai gali bandyti panaudoti kompiuterius rasti sprendimams skaičiuodami matematinius ar fizikinius modelius. Tokiuose projektuose iškyla rizika, kad modelis nebuvo tinkamai suprojektuotas, kad sprendimas būtų surastas efektyviai. Paskirstyto skaičiavimo projekto efektyvumas smarkiai priklauso nuo kūrėjų sumanumo.

## Architektūra
Paskirstytajam skaičiavimui naudojamos įvairios techninės ir programinės įrangos architektūros. Žemiausiame lygmenyje svarbu sujungti keletą procesorių su tam tikru tinklu, nepaisant ar tas tinklas yra išdėstytas ant elektroninės plokštės ar sudarytas iš silpnai sujungtų prietaisų ir kabelių. Aukštesniame lygmenyje svarbu sujungti procesus, veikiančius tuose procesoriuose, į savotišką komunikacijos sistemą.

Paskirstytas programavimas paprastai sueina į vieną ar kelias pagrindines architektūros ar kategorijas: kliento - serverio, 3-čios eilės architektūra, n - tosios eilės architektūra, išskirstyti objektai, tvirtas sukabinimas arba laisvas sukabinimas.

* Kliento - serverio – išmanus kliento kodas kreipiasi į serverį duomenų, tuomet suformuoja juos ir atvaizduoja naudotojui. Įvesti duomenys perduodami atgal į serverį.
* 3-čios eilės architektūra – ji perkelia klientą į vidurinę būseną taip, kad būtų galima naudoti klientus neturinčius būsenos. Tai palengvina programų įdiegimą. Dauguma tinklinių (angl. web) programų yra šitokios architektūros.
* N-tosios eilės architektūra – paprastai skirtos tinklinėms programoms, kurios jau pačios perduoda savo užklausas į kitus servisus. Tokio tipo programos labiausiai prisidėjo prie serverių programoms sėkmės.
* Tvirtas sukabinimas – paprastai ši architektūra skirta didelės integracijos mašinoms, kurios leidžia lygiagrečiai tą patį procesą, padalindamos užduotį į dalis, kurias įvykdo atskirai ir po to sujungia į galutinį rezultatą.
* Taškas į tašką – architektūra, kurioje nėra specialios mašinos ar kelių, kurios teikia servisus ar valdo tinklo resursus. Vietoj to visos atsakomybės yra tolygiai paskirstomos visoms mašinoms, vadinamoms taškais. Taškai gali būti ir klientais ir serveriais.
* Vieta paremta – skirta infrastruktūrai, kuri sukuria vieno adreso - vietos iliuziją (virtualizaciją). Duomenys yra nepastebimai atkartojami pagal programos poreikius.

Kitas esminis paskirstytųjų skaičiavimų architektūros aspektas yra darbų komunikavimo ir koordinavimo tarp lygiagrečių procesų užtikrinimo metodas. Per įvairius žinučių perdavimo protokolus procesai gali komunikuoti vienas su kitu tiesiogiai, paprastai santykiu „šeimininkas/tarnas“. Kitaip yra su centralizuotos duomenų bazės architektūra. Joje paskirstytasis skaičiavimas gali būti atliekamas be jokių tiesioginių vidinių procesų komunikavimų, tiesiog naudojantis bendra duomenų baze.

## Lygiagretumas

Paskirstytasis skaičiavimas apima lygiagretumo rūšį. Jis labai susijęs su lygiagrečiu programavimu, o kartais šios dvi sąvokos net neatskiriamos.

### Daugiaprocesorinės sistemos

Daugiaprocesorinė sistema yra tiesiog kompiuteris, kuris turi daugiau nei vieną procesorių pagrindinėje plokštėje. Jei operacinės sistema geba išnaudoti šį privalumą, ji gali vykdyti kelis procesus (ar kelias to paties proceso dalis) skirtinguose procesoriuose.

### Daugiabranduolinės sistemos

„Intel“ kompanijos procesoriai nuo paskutiniųjų „Pentium 4“ serijos naudojo technologiją vadinamą hipersrautais (angl. Hyperthreading), kuri leido vykdyti daugiau nei vieną proceso giją tame pačiame procesoriuje. Pastarųjų metų gamybos procesoriai turi po keletą branduolių, kas taip pat leidžia vykdyti kelias proceso gijas iškart.

### Keleto kompiuterių sistemos

Multikompiuteriu gali būti laikomas arba lengvai sukabintas NUMA (ang. Non-Uniform Memory Architecture) kompiuteris, arba stipriai sukabintas klasteris. Multikompiuteriai paprastai naudojami tais atvejais, kai reikalinga didelė skaičiavimo galia aplinkoje su ribota fizine vieta ir elektros energija.

Dažniausi pritaikymai yra trimačiuose medicinos vaizdavimo įrenginiuose ir mobiliuose radaruose.

### Skaičiavimo sistematika

Paskirstytųjų sistemų tipai yra paremti Flyno sistematika; viena instrukcija, vieni duomenys (SISD), viena instrukcija, keli duomenys (SIMD), daug instrukcijų, vieni duomenys (MISD) ir daug instrukcijų, daug duomenų (MIMD).

### Kompiuterių klasteriai

Klasteris susideda iš kelių ar daugelio kompiuterinių mašinų (virtualių arba fizinių) vieningai veikiančių greitame kompiuterių tinkle.

Kompiuterių klasteriai yra trijų tipų: 
1) Aukšto skaičiavimų pajėgumo klasteris – šis klasterių tipas paskirsto sakaičiavimo uždavinį klasterio mazgams, tad sutrumpinama uždavinio skaičiavimo trukmė. Sėkmingai panaudojamas uždaviniams, kurių apskaičiavimas gali būti lygiagretinamas.
2) Aukšto patikimumo klasteriai – plačiai naudojami duomenų centruose serverinių sistemų patikimumo didinimui, skirstomi į aktyvius ir pasyvius.
3) Tinklo apkrovos balansavimo klasteriai – naudojami didelius duomenų srautus apdorojančiose kompiuterinėse sistemose.

Šių dienų didelės spartos interneto prieigos leidžia klasteriniais ryšiais susaistyti geografiškai atsietas kompiuterines sistemas, o debesų technologiniai sprendimai leidžia skaičiavimo programinę įrangą atskirti nuo techninės įrangos, kas reišgia geografinę laisvę debesų erdvėje. 

Paskirstytasis skaičiavimas skiriasi nuo klasterinio skaičiavimo tuo, kad kompiuteriai paskirstytojo skaičiavimo aplinkoje paprastai nevykdo grupinių užduočių, tuo tarpu klasteriniai kompiuteriai daug labiau susaistyti tarpusavyje. Be to paskirstytos sistemos sudarytos iš geografiškai plačiai paplitusių mašinų.

### Skaičiavimas tinklelyje

Tinklelis naudoja daugelio atskirų kompiuterių, sujungtų tinklu (dažniausiai internetu), resursus, kad išspręsti didelės apimties skaičiavimo problemas. Vieši tinkleliai gali išnaudoti tūkstančių kompiuterių neveiklos laiką visame pasaulyje. Tokie sujungimai leidžia tvarkyti tokius duomenų kiekius, kuriems paprastai prireiktų brangių superkompiuterių arba apskritai nebūtų įmanoma apdoroti.

## Kalbos

Beveik visos programavimo kalbos, kurios turi visišką priėjimą prie sistemos techninės įrangos, gali susitvarkyti su paskirstytuoju programavimu. Nutolusių procedūrų kreipiniai paskirsto operacinės sistemos komandas per tinklą. Tokios sistemos kaip CORBA, Microsoft DCOM, Java RMI ir kitos bando susieti objektinį projektavimą su tinklu. Lengvai sukabintos sistemos komunikuoja per tarpinius dokumentus, kuriuos paprastai supranta ir žmonės (pvz.: XML, HTML, SGML, EDI).

Specialiai paskirstytajam programavimui pritaikytos kalbos yra šios: Ada, Alef, E, Erlang, Limbo, Oz, ZPL.

## Pavyzdžiai

### Projektai

Pastaraisiais metais atsirado įvairių paskirstytojo skaičiavimo projektų. Dauguma veikia savanoriškom paskatom ir įtraukia vartotojus, aukojančius savo nepanaudotą skaičiavimo galią įdomiems skaičiavimo uždaviniams spręsti. Tokių projektų pavyzdžiai gali būti Stanfordo Universiteto chemijos departamento Folding@home projektas, kuris koncentruojasi ties proteinų junginių simuliacija ieškant vaistų nuo įvairių ligų; “World Community Grid“ projektas siekia sudaryti didžiausią pasaulyje skaičiavimo tinklą, kad galima būtų imtis mokslinių tyrimų, kurie padėtų žmonijai. Šį projektą vykdo ir remia IBM; SETI@home projektas fokusuojamas ties radioteleskopo duomenų analize ieškant sąmoningų signalų iš kosmoso; projektas distributed.net bando „nulaužti“ įvairius kriptografinius šifrus.

Paskirstytojo skaičiavimo projektai dažnai konkuruoja su kitomis paskirstytomis sistemomis. Ši konkurencija galima ir dėl prestižo, ir suvilioti naudotojus prisidėti su savo skaičiavimo pajėgumais prie bendro projekto. Be to yra pateikiama statistika apie paskirstytojo skaičiavimo projekto nuveiktą darbą per paskutinę dieną ar savaitę. Tokie duomenys pasirodo labai naudingi praktikoje, kad visi paskirstytųjų skaičiavimų projektai pateikia savo veiklos statistines analizes, atnaujinamas kasdien ar netgi realiu laiku.

Šios naujos Grid technologijos diegiamos ir Lietuvoje – vykdomi LitGrid ir BalticGrid projektai, kurių tikslas – sukurti lygiagrečiųjų ir paskirstytų tinklų infrastruktūrą ir integruoti ją į intensyviai tobulėjančią Europos Sąjungos šalių Grid infrastruktūrą.

Vykdant šiuos projektus, Lietuvos mokslininkams ir specialistams teikiamos žinios apie lygiagrečiąsias ir paskirstytų skaičiavimų tinklus ir jų galimybes. Tai padės mokslininkams pasiekti labiau pažengusių ES šalių lygį ir paskatins juos įsitraukti į Grid technologijų plėtrą.

2005 m. buvo sukurtas ir įdiegtas Grid naudotojų sertifikatas, kad būtų garantuota duomenų ir tyrimų apsauga. Be to, yra parinkta, įsisavinta ir įdiegta Grid valdymo operacinė programinė įranga, projekto partnerių kompiuteriniai telkiniai įtraukti į LitGRID, turimi telkiniai dirba testiniu režimu, t. y. LitGRID yra funkcionalus jų valdymo lygio atžvilgiu, ir t. t.