Calcul distribuit

De la Wikipedia, enciclopedia liberă
Salt la: Navigare, căutare

Calcul distribuit (din engleză Distributed computing) este un domeniu al informaticii care se ocupă de sisteme distribuite. Un sistem distribuit este format din mai multe calculatoare autonome care comunică printr-o rețea. Calculatoarele intreacționează între ele pentru atingerea unui scop comun. Un 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ă.

Introducere[modificare | modificare sursă]

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 problemi mare de calcul.Alternativ, fiecare nod poate avea propriul utilizator cu nevoi specifice, iar sistemul distribuit este utilizat pentru administarea 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[modificare | modificare sursă]

Sistemele distribuite sunt calculatoarele dintr-o rețea ce opereaza 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"ș 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[modificare | modificare sursă]

Utilizarea 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 sfarsitul 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 conferinta 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[modificare | modificare sursă]

Există 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 nedistribui deoarece are un grad mai ridicat de redundanță și poate fi extins și administrat mai ușor. Cateva exemple de sisteme distribuite sunt:

Bazele teoretice[modificare | modificare sursă]

Modele[modificare | modificare sursă]

În domeniile calculului distribuit și paralel se pune intrebarea ce probleme de calcul pot fi rezolvate cu un astfel de sistem și cât de eficient.Aici intervin trei puncte de vedere:

  1. 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ă.
  1. Algoritmi paraleli într-un model cu transmitere de mesaje
  • Arhitectul algoritmului alege structure 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.
  1. 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[modificare | modificare sursă]

Problemele 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[modificare | modificare sursă]

Diverse 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 proceselelor 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 inteligena 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 dimparț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 gestionea 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.

Vezi și[modificare | modificare sursă]