Ce este programarea distribuită?

Programarea distribuită este o formă de programare paralelă sau de calcul paralel. Programarea paralelă implică calculatoare și unități de calcul din cadrul computerelor care lucrează concomitent la o anumită problemă, cum ar fi prezicerea vremii de mâine. Unitățile de calcul pot fi amplasate și coordonate foarte strâns sau pot fi amplasate deoparte. Când unitățile de calcul sunt separate, se numește programare distribuită. Într-un astfel de scenariu, foarte adesea unitățile de calcul diferă unele de altele, iar sistemul de operare și configurația rețelei diferă, de asemenea, ceea ce face programarea activității de calcul deosebit de dificilă.

Când rezolvați o problemă într-o manieră distribuită, programul trebuie împărțit astfel încât părți ale programului să poată rula pe diferite unități de calcul; aceste părți sunt adesea numite „procese”. Procesele rulează simultan, dar trebuie să comunice intrările și rezultatele între ele. Dacă procesele rulează pe hardware diferit, cum ar fi o parte care rulează pe Intel și alta care rulează pe SUN, atunci programele trebuie să fie compilate și optimizate diferit.

O modalitate de a rezolva o problemă suficient de dificilă este de a diviza părțile de intrare și de a face ca diferitele unități de calcul să lucreze pe diferite părți folosind același algoritm, setul de reguli sau pași pentru rezolvarea problemelor. De exemplu, pentru a sparge un genom de 10,000 de perechi, primele 1,000 de perechi ar putea fi atribuite primei unități de calcul, a doua 1,000 de perechi alocate celei de-a doua unități de calcul și așa mai departe, toate folosind același algoritm. Cu programarea distribuită, un avantaj este că diferitele unități de calcul ar putea rula diferiți algoritmi pentru a rezolva aceeași problemă, conducând astfel la o soluție semnificativ mai bună. Acest lucru este asemănător cu rezolvarea unui puzzle în care unii oameni pun împreună chenarul, în timp ce alții pun împreună piese de o anumită culoare.

Coordonarea proceselor de calcul distribuite poate fi o sarcină deosebit de dificilă. Unele unități de calcul pot eșua sau pot fi întrerupte pentru a se ocupa de alte lucrări. Mesajele care conțin intrările sau rezultatele calculului pot să nu ajungă la destinație. Dacă programele sunt scrise într-un mod naiv, atunci pierderea unei unități de calcul sau a unor mesaje poate cauza blocarea întregului set de computere.

În programarea distribuită, un proces ar putea fi procesul de control, în esență obținând munca efectuată de celelalte procese, sau toate procesele ar putea funcționa într-o manieră peer-to-peer, fără ca niciun proces să fie „master”. Câteva exemple de probleme încercate cu programarea distribuită includ analiza datelor geologice pentru resurse precum petrolul, modelarea proteinelor și a moleculelor biologice, cracarea mesajelor codificate și simulările militare. Proiectul SETI de căutare a vieții extraterestre inteligente din mesajele radio primite de Pământ este poate unul dintre cele mai cunoscute exemple.