Che cos'è la programmazione distribuita?
La programmazione distribuita è una forma di programmazione parallela o di calcolo parallelo. La programmazione parallela coinvolge computer e unità di elaborazione all'interno di computer che lavorano contemporaneamente su un problema particolare, come prevedere il tempo di domani. Le unità di elaborazione possono essere posizionate e coordinate molto da vicino o possono essere distanziate. Quando le unità di elaborazione sono separate, si chiama programmazione distribuita. In uno scenario del genere, molto spesso le unità di elaborazione differiscono l'una dall'altra e anche il sistema operativo e la configurazione della rete differiscono, rendendo particolarmente difficile la programmazione dell'attività di elaborazione.
Quando si risolve un problema in modo distribuito, il programma deve essere suddiviso in modo che parti del programma possano essere eseguite sulle diverse unità di elaborazione; queste parti sono spesso chiamate "processi". I processi vengono eseguiti contemporaneamente ma devono comunicare tra loro input e risultati. Se i processi sono in esecuzione su hardware diverso, ad esempio una parte in esecuzione su Intel e un'altra in esecuzione su SUN, i programmi devono essere compilati e ottimizzati in modo diverso.
Un modo per risolvere un problema sufficientemente difficile è quello di scomporre le parti di input e far lavorare le diverse unità di elaborazione sulle diverse parti utilizzando lo stesso algoritmo, l'insieme di regole o passaggi per la risoluzione dei problemi. Ad esempio, per craccare un genoma di 10.000 coppie, le prime 1.000 coppie potrebbero essere assegnate alla prima unità di calcolo, le seconde 1.000 coppie assegnate alla seconda unità di calcolo e così via, il tutto utilizzando lo stesso algoritmo. Con la programmazione distribuita, un vantaggio è che le diverse unità di elaborazione potrebbero eseguire algoritmi diversi per risolvere lo stesso problema, portando così a una soluzione significativamente migliore. Questo è simile alla risoluzione di un puzzle con alcune persone che uniscono il bordo mentre altri mettono insieme pezzi di un colore particolare.
Il coordinamento dei processi informatici distribuiti può essere un compito particolarmente difficile. Alcune unità di elaborazione potrebbero non funzionare o potrebbero essere interrotte per gestire altri lavori. I messaggi contenenti gli input oi risultati del calcolo potrebbero non riuscire a raggiungere le loro destinazioni. Se i programmi sono scritti in modo ingenuo, la perdita di un'unità di elaborazione o di alcuni messaggi può causare il blocco dell'intero set di computer.
Nella programmazione distribuita, un processo potrebbe essere il processo di controllo, essenzialmente svolgendo il lavoro svolto dagli altri processi, oppure tutti i processi potrebbero funzionare in modo peer-to-peer senza che il processo sia il "master". Alcuni esempi di problemi tentati con la programmazione distribuita includono l'analisi di dati geologici per risorse come il petrolio, la modellizzazione di proteine e molecole biologiche, il cracking di messaggi codificati e simulazioni militari. Il progetto SETI per la ricerca di una vita extraterrestre intelligente dai messaggi radio ricevuti dalla Terra è forse uno degli esempi più noti.