Calcul distribuit
Calcul distribuit (din engleză Distributed computing) este un domeniu al informaticii care se ocupă de sisteme distribuite. Un sistem distribuit este un sistem informatic implementat pe o rețea de calculatoare în care componentele soft și hard situate în calculatoarele din rețea comunică și își coordonează acțiunile numai prin intermediul transmiterii unor mesaje. Un sistem distribuit are următoarele caracteristici: „concurența (prin partajarea resurselor), inexistența unui ceas global (programele care trebuie să coopereze își coordonează acțiunile prin schimburi de mesaje și nu se poate conta pe sincronizarea ceasurilor) eșecuri independente (fiecare componentă a sistemului poate eșua în mod independent neafectându-le pe celelalte)”.[1]
Introducere
modificareUn program de care rulează într-un sistem distribuit se numește un program distribuit, iar procesul de scriere a astfel de programe se numește programare distribuită. Cuvântul distribuit, folosit în termeni precum "sistem distribuit", "programare distribuită", și "algoritm distribuit" se referea inițial la rețelele de calculatoare în care calculatoarele individuale erau distribuite fizic în cadrul unei anumite zone geografice. Astăzi, termenii sunt folosiți într-un sens mult mai larg, referindu-se până si la procese autonome ce se execută pe același calculator și comunică între ele prin transmiterea de mesaje. Deși nu exista o singură definiție pentru un sistem distribuit, toate vor avea următoarele proprietăți in comun:
- Există mai multe calculatoare/noduri autonome de calcul, fiecare cu memoria sa locală.
- Calculatoarele/nodurile comunică între ele prin transmiterea de mesaje.
Un sistem distribuit poate avea un scop comun, cum ar fi rezolvarea unei probleme mare de calcul. Alternativ, fiecare nod poate avea propriul utilizator cu nevoi specifice, iar sistemul distribuit este utilizat pentru administrarea resurselor comune sau pentru furnizarea de servicii de comunicare intre utilizatori. Alte proprietăți ale sistemelor distribuite pot fi:
- Sistemul trebuie să poată tolera erori în noduri individuale.
- Structura sistemului (topologia rețelei, latența rețelei, numărul de calculatoare) nu este cunoscută în avans, sistemul poate fi format din diferite tipuri de calculatoare si link-uri de rețea, iar sistemul se poate schimba în timpul executării unui program distribuit.
- Fiecare nod are doar o viziune limitată, incompletă a sistemului. Fiecare nod poate cunoaște doar o parte a datelor de intrare.
Calcul paralel și distribuit
modificareSistemele distribuite sunt calculatoarele dintr-o rețea ce operează cu aceleași procesoare. Termenii de calcul concurent, calcul paralel si calcul distribuit au foarte multe în comun. Același sistem poate fi caracterizat ca fiind atât "paralel cât și "distribuit" și procesele dintr-un sistem distribuit tipic rulează în paralel. Sistemele concurente pot fi clasificate ca fiind paralele sau distribuite in funcție de următoarele criterii:
- În calcul paralel, toate procesoarele au acces la o memorie partajată. Memorie partajata poate fi utilizat pentru schimbul de informații între procesoare.
- În calcul distribuit, fiecare procesor are memorie proprie (memorie distribuită). Schimbul de informații prin trimiterea de mesaje între procesoare.
Istoric
modificareUtilizarea de procese concurente care comunică prin mesaj-trece își are rădăcinile în arhitecturile sistemelor de operare studiate în anii 1960. Primele sisteme distribuite pe scară largă au fost LAN-urile, cum ar fi Ethernet, care a fost inventat în anii 1970. ARPANET, predecesorul de Internet, a fost introdus la sfârșitul anilor 1960, și ARPANET e-mail a fost inventat la începutul anilor 1970. E-mail a devenit cea mai de succes aplicație de ARPANET, și este, probabil, cel mai vechi exemplu de aplicație distribuita la scară largă. Pe lângă ARPANET și succesorul său internet, au existat și alte rețele globale de calculatoare inclusiv Usenet și FidoNet din 1980, ambele fiind utilizate pentru a sprijini sisteme de comunicare distribuite. Studiul de calcul distribuit a devenit o ramura a informaticii la sfârșitul anilor 1970 și începutul anilor 1980. Prima conferință din domeniu, Simpozionul privind principiile de calcul distribuit (PODC), datează din 1982, și omologul său european Simpozion internațional în calcul distribuit (DISC) a fost organizat pentru prima dată în 1985.
Aplicații
modificareExistă două motive principale pentru folosirea sistemelor distribuite și a calculului distribuit:
- Primul este că o aplicație poate necesita comunicarea cu un alt calculator legat la aceeași rețea.
- Al doilea este că utilizarea unui sistem distribuit poate prezenta o serie de beneficii practice. De exemplu, în unele situații poate fi mai avantajos din punctul de vedere al raportului cost/performanță folosirea unui cluster de calculatoare mai slabe pentru efectuarea unui proces în locul unui singur calculator mai puternic.
Un sistem distribuit poate fi mai fiabil decât unul nedistribuit deoarece are un grad mai ridicat de redundanță și poate fi extins și administrat mai ușor. Câteva exemple de sisteme distribuite sunt:
- Rețele de telecomunicație
- Rețele telefonice și celulare
- Rețele de calculatoare
- Rețele de senzori wireless
- Algoritmi de routare
- Aplicații de rețea
- World wide web și rețele peer-to-peer
- Comunități de realitate virtuală și MMO-uri
- Sisteme de fițiere de rețea
- Sisteme distribuite de prelucrare a informațiilor, cum ar fi sistemele bancare și sistemele de rezervare al companiei aeriene.
- Procese controlate în timp real
- Sistemele de control a aeronavelor.
- Sisteme de control industriale.
- Calcul paralele
- Calcul științific, incluzând cluster computing și grid computing.
- Randare distribuita în domeniul graficii pe calculator.
Bazele teoretice
modificareModele
modificareÎn domeniile calculului distribuit și paralel se pune întrebarea ce probleme de calcul pot fi rezolvate cu un astfel de sistem și cât de eficient.Aici intervin trei puncte de vedere:
- Algoritmi paraleli într-un model cu memorie comună
- Toate calculatoarele au acces la o memorie comună. Programatorul alege programul ce trebuie executat de către fiecare calculator.
- Un model care este mai aproape de comportamentul de mașini cu mai multe procesoare reale ce ia în considerare utilizarea de instrucțiuni mașină.
- Algoritmi paraleli într-un model cu transmitere de mesaje
- Arhitectul algoritmului alege structura rețelei, precum și ce instrucțiuni execută fiecare calculator.
- Sunt folosite modele precum circuite booleane și rețele de sortare. Un circuit booleene poate fi văzut ca o rețea de calculatoare: fiecare poarta este un calculator care execută un program extrem de simplu. În mod similar, o rețea de sortare poate fi văzut ca o rețea de calculatoare: fiecare comparator este un calculator.
- Algoritmi distribuiți într-un model cu transmitere de mesaje
- Arhitectul algoritmului alege programul. Toate calculatoarele executați același program. Sistemul trebuie să funcționeze corect, indiferent de structura rețelei.
- Un model utilizat în mod obișnuit este un grafic cu câte un automat finit pe fiecare nod.
Probleme
modificareProblemele tradiționale de calcul presupun punerea unei întrebări, după care un calculator (sau un sistem distribuit) procesează întrebarea pentru un timp, apoi și produce un răspuns și se oprește. Cu toate acestea, există, de asemenea, probleme în cazul în care nu vrem ca sistemul să oprească vreodată. În aceste cazuri, sistemul distribuit ar trebui să coordoneze continuu utilizarea resurselor comune, astfel încât să nu apară conflicte sau blocaje. Există, de asemenea, provocări fundamentale care sunt specifice calculului distribuit. Un exemplu ar fi provocările legate de toleranța la defecte. Exemple de probleme asemănătoare includ probleme legate de consens, Byzantine fault tolerance, și autostabilizare.
Arhitecturi
modificareDiverse arhitecturi hardware și software sunt utilizate pentru calcul distribuit. La un nivel inferior, este necesară interconectarea a mai multor procesoare, într-un fel de rețea, indiferent dacă aceasta este pe o singura placă de circuite sau daca este alcătuită dintr-o serie de dispozitive interconectate prin cabluri. La un nivel superior, este necesară interconectarea proceselor care rulează pe aceste procesoare cu un fel de sistem de comunicare. Sistemele de programare distribuite de obicei se încadrează într-una din următoarele categorii de arhitecturi: client-server, arhitectura 3-tier, arhitectura n-tier, obiecte distribuite, loose coupling, sau tight coupling.
- Client-server: Codul client contactează serverul cerându-i informații ce sunt apoi formatate și afișate utilizatorului.
- Arhitectura 3-tier: Trei sisteme pe nivele muta inteligența clientului la un nivel middle-tier, astfel încât să se pot utiliza clienți stateless. Acest lucru simplifică implementarea aplicație. Cele mai multe aplicații web sunt 3-Tier.
- Arhitectura n-tier: n-tier se referă de obicei la aplicații web, care transmite mai departe cererile lor la alte servicii. Acest tip de aplicație este în mare măsură responsabil pentru succesul serverelor de aplicații.
- Tightly coupled (clustered): se referă de obicei la un grup de mașini care lucrează strâns împreună, rulând un proces comun în paralel. Sarcina este împărțită in altele mai mici, care sunt executate în mod individual de către fiecare în parte și apoi a pus din nou împreună pentru a face rezultatul final.
- Peer-to-peer: o arhitectură în care nu există nici un aparat special sau mașini care furnizează un serviciu sau gestiunea resursele de rețea. În schimb toate responsabilitățile sunt împărțite uniform între toate mașinile, cunoscute sub numele de peers. Peers pot servi atât ca clienți cât și ca servere.
Proiecte care folosesc calcul distribuit
modificare- BOINC: platformă pentru diferite proiecte care folosesc calculul distribuit voluntar
- PiHex: proiect inițiat pentru calculul lui Pi
- Distributed.net: scheme de spargere a criptărilor
- GIMPS (Great Internet Mersenne Prime Search): folosește numere prime de forma 2^p-1.
- PVM/POV-Ray: calculează imagini "ray tracing".
- Golem@home (programare logică inductivă): dezvoltă forme de viață robotice [2]
Vezi și
modificareLegături externe
modificareNote
modificare- ^ Moldovan, G. and Dzițac, I. (2006).Sisteme distribuite. Arhivat în , la Wayback Machine. Oradea: Editura Universității Agora.
- ^ Active Distributed Computing Projects distributedcomputing.info