Co to jest programowanie rozproszone?
Programowanie rozproszone jest jedną z form programowania równoległego lub obliczeń równoległych. Programowanie równoległe obejmuje komputery i jednostki obliczeniowe w komputerach pracujących jednocześnie nad konkretnym problemem, takim jak przewidywanie pogody na jutro. Jednostki obliczeniowe mogą być bardzo blisko i koordynowane lub mogą być rozmieszczone osobno. Gdy jednostki obliczeniowe są rozłączone, nazywa się to programowaniem rozproszonym. W takim scenariuszu bardzo często jednostki obliczeniowe różnią się od siebie, a system operacyjny i konfiguracja sieci również się różnią, co sprawia, że programowanie czynności obliczeniowych jest szczególnie trudne.
Podczas rozwiązywania problemu w sposób rozproszony program musi zostać podzielony, aby części programu mogły działać na różnych jednostkach obliczeniowych; części te są często nazywane „procesami”. Procesy przebiegają jednocześnie, ale muszą się ze sobą komunikować. Jeśli procesy działają na innym sprzęcie, takim jak jedna część działająca na platformie Intel, a druga działająca na SUN, programy muszą zostać skompilowane i zoptymalizowane w różny sposób.
Jednym ze sposobów rozwiązania wystarczająco trudnego problemu jest rozbicie części wejściowych i umożliwienie różnym jednostkom obliczeniowym pracy na różnych częściach przy użyciu tego samego algorytmu, zestawu reguł lub kroków rozwiązywania problemów. Na przykład, aby złamać genom 10 000 par, pierwsze 1000 par można przypisać do pierwszej jednostki obliczeniowej, drugie 1000 par przypisać do drugiej jednostki obliczeniowej i tak dalej, wszystkie przy użyciu tego samego algorytmu. W przypadku programowania rozproszonego jedną zaletą jest to, że różne jednostki obliczeniowe mogą uruchamiać różne algorytmy w celu rozwiązania tego samego problemu, co prowadzi do znacznie lepszego rozwiązania. Jest to podobne do rozwiązywania puzzli z niektórymi ludźmi układającymi ramkę, podczas gdy inni układają kawałki określonego koloru.
Koordynacja rozproszonych procesów obliczeniowych może być szczególnie trudnym zadaniem. Niektóre jednostki obliczeniowe mogą ulec awarii lub zostać przerwane w celu wykonania innej pracy. Wiadomości zawierające dane wejściowe lub wyniki obliczeń mogą nie dotrzeć do miejsca docelowego. Jeśli programy są napisane w naiwny sposób, utrata jednostki obliczeniowej lub niektórych wiadomości może spowodować zawieszenie całego zestawu komputerów.
W programowaniu rozproszonym jeden proces może być procesem kontrolnym, zasadniczo wykonując pracę przez inne procesy lub wszystkie procesy mogą działać w trybie peer-to-peer, przy czym żaden proces nie jest „wzorcem”. Niektóre przykłady problemów próbowanych przy programowaniu rozproszonym obejmują analizę danych geologicznych dla zasobów, takich jak ropa naftowa, modelowanie białek i cząsteczek biologicznych, pękanie zakodowanych wiadomości oraz symulacje wojskowe. Projekt SETI mający na celu poszukiwanie inteligentnego życia pozaziemskiego na podstawie wiadomości radiowych odbieranych przez Ziemię jest prawdopodobnie jednym z najbardziej znanych przykładów.