Czym dokładnie jest przetwarzanie rozproszone? [Zamknięte]

14

Co dokładnie stanowi przetwarzanie rozproszone i czym różni się od przetwarzania równoległego / równoległego?

Czy użycie muteksów i semaforów w wielu równoległych wątkach próbujących zsynchronizować się w celu uzyskania dostępu do zasobu stanowi problem w dziedzinie przetwarzania rozproszonego?

rdasxy
źródło

Odpowiedzi:

8

Co dokładnie stanowi przetwarzanie rozproszone?

Przetwarzanie rozproszone to z natury równoległy zbiór elementów przetwarzania, które komunikują się ze sobą w celu rozwiązania jednego lub więcej problemów. Te elementy przetwarzające są wystarczająco oddzielone od siebie, aby zbudowanie między nimi niezawodnej i terminowej struktury przesyłania wiadomości nie było praktyczne, a zatem niemożliwa jest globalna znajomość stanu systemu. Szczególne cechy Messaging z systemów rozproszonych na to, że komunikaty będą się zgubić, będzie się nieczytelny, będzie się opóźnia - rozwiązania w tej przestrzeni muszą uwzględniać to. Zatem programowanie rozproszone polega na radzeniu sobie z sieciami i komunikatami, równoległości i braku globalnych informacji.

Najłatwiejszą metodą obejścia problemów jest uczynienie pojedynczego elementu przetwarzania specjalnym, tzn. Autorytatywnym dla określonej informacji. Następnie pozostałe elementy mogą albo odwoływać się do nich za każdym razem, albo buforować informacje i mieć nadzieję, że nie przestaną być aktualne (ponieważ nie mogą liczyć na informację o zmianach). Jest to klasyczna architektura klient / serwer.

Obliczenia internetowe to obliczenia rozproszone, ale bez możliwości kontrolowania, co tak naprawdę robi większość rozproszonych węzłów.

Czy wiele równoległych wątków próbujących zsynchronizować się w celu uzyskania dostępu do zasobu stanowi problem w dziedzinie przetwarzania rozproszonego?

Stanowią one możliwe rozwiązanie, które jest przydatne podczas budowania modelu klient / serwer, ale kosztem potencjalnie dramatycznego wzrostu rywalizacji o zasoby. W przypadku odczytów nie jest to wielka sprawa (pod warunkiem, że jest wystarczająca ilość sprzętu), ale w przypadku zapisów jest to naprawdę duży problem.

To, czego starasz się unikać, to rozproszone zamki. Brak niezawodnego przesyłania wiadomości w odpowiednim czasie całkowicie eliminuje rozproszone protokoły decyzyjne, chyba że użyjesz czegoś takiego jak protokół Paxos , ale ma to wiele zastrzeżeń. Podstawowym problemem związanym z przetwarzaniem rozproszonym jest to, że „złe wiadomości przytrafiają się komunikatom”. Protokoły relatywnie niskiego poziomu, takie jak TCP, zmniejszają problemy, ale nadal możesz się poważnie nie utknąć.

Donal Fellows
źródło
6

Czy wiele równoległych wątków próbujących zsynchronizować się w celu uzyskania dostępu do zasobu stanowi problem w dziedzinie przetwarzania rozproszonego?

Robią to, jeśli wątki te mogą działać na różnych komputerach, a nawet jeśli działają na tym samym komputerze, ale w różnych procesach.

Caleb
źródło
1
Wątków działających na różnych maszynach w zasadzie nie można zsynchronizować tradycyjnego sposobu muteksów i semaforów.
Jan Hudec,
@ JanHudec Myślę, że o to właśnie chodziło w pytaniu ankietera. Bez atomowych instrukcji testowania i ustawiania, porównywania i zamiany lub pamięci współużytkowanej przetwarzanie rozproszone musi polegać na przesyłaniu komunikatów między maszynami w celu synchronizacji. Na szczęście istnieją algorytmy, które to osiągają.
Caleb
Nie zgadzam się z „na szczęście”. Algorytmy są skomplikowane i nie są odporne na uszkodzenia, dlatego należy ich unikać.
Jan Hudec,
5

Przetwarzanie rozproszone to system obliczeniowy, którego przetwarzanie odbywa się na różnych komputerach (tj. W systemie rozproszonym). Poszczególne programy komunikują się ze sobą poprzez szereg kanałów komunikacji. Kanały te są zwykle połączeniami sieciowymi (na przykład gniazdami TCP), ale często używają innych protokołów komunikacyjnych i urządzeń (takich jak DeviceNET, BACNet, SECS-2, Modbus itp.) Lub nawet protokołów, które są wykonane na zamówienie dla konkretnego urządzenia.

Systemy rozproszone są zwykle znacznie bardziej skomplikowane niż systemy zaprojektowane do działania na jednym komputerze. Oprócz problemów z współbieżnością i blokowaniem zasobów, z którymi muszą zmagać się aplikacje wielowątkowe, systemy rozproszone muszą obsługiwać awarie komunikacji i awarie węzłów przetwarzania. Transakcje (i wycofywanie), które wymagają przeprowadzenia wielu procesorów, mogą być trudne.

Systemy rozproszone przyjmują wiele form i są obecnie używane w wielu aplikacjach. Aplikacje internetowe to systemy rozproszone. System N-warstwowy zwykle ma co najmniej N różnych procesorów (z różnymi aplikacjami). Systemy rozproszone są również stosowane w wielu systemach automatyki przemysłowej.

Write-up na Distributed Computing w Wikipedii jest warta przeczytania.

W odpowiedzi na pytanie, czy aplikacja wielowątkowa stanowi aplikację rozproszoną - jeśli wątki działają na jednym komputerze, system nie jest dystrybuowany. Musi rozwiązać niektóre problemy związane z systemami rozproszonymi, ale nie wszystkie.

Jay Elston
źródło
3

Ściśle mówiąc „przetwarzanie rozproszone” to każde rozwiązanie, które wymaga przetworzenia pojedynczej transakcji / żądania / obliczenia na więcej niż jednym komputerze.

Spotkasz się również z terminem „Systemy rozproszone”, który jest uniwersalnym pojęciem dla serwerów Windows, Unix i innych małych systemów, które pierwotnie byłyby wdrażane poza centralnym centrum danych. Chociaż obecnie jest to bardziej normalne w przypadku wdrażania tych systemów w centrum danych, termin ten utknął.

James Anderson
źródło
3

Aby odpowiedzieć na twoje ogólne pytanie dotyczące tego, co stanowi przetwarzanie rozproszone, poleciłbym artykuł A Note on Distributed Computing autorstwa Ann Wollrath, Geoff Wyant, Jim Waldo i Samuel C. Kendall . Obejmuje najnowszą historię systemów rozproszonych i ich awarie oraz sugeruje, że przetwarzanie rozproszone wymaga odmiennego myślenia o związanych z tym problemach.

Chociaż w artykule nie wymieniono ani muteksów, ani semaforów, zapewnia on cenny wgląd w prawidłową inżynierię rozproszonego systemu oprogramowania.

Co do tego, dlaczego twój ankieter zapytał o muteksy i semafory, zgodziłbym się z @Caleb:

Robią to, jeśli wątki te mogą działać na różnych komputerach, a nawet jeśli działają na tym samym komputerze, ale w różnych procesach.

Dodam tylko, że muteksy i semafory są prymitywami blokującymi niskiego poziomu, które umożliwiają dystrybucję pracy między wieloma urządzeniami obliczeniowymi, a ich działanie jest (zwykle) kluczowe dla powodzenia aplikacji. Oczywiście zależy to od używanego języka i technologii. Jeśli używasz Erlanga lub Scali, prawdopodobnie użyjesz współbieżności opartej na modelu aktora, a nie tradycyjnej współbieżności opartej na blokadzie.

Matthew Rodatus
źródło
2

Słowo mówi wszystko. Musisz wykonać pewną operację obliczeniową i jeśli możesz rozdzielić części tego obliczenia tak, aby każde obliczenie działało niezależnie od innych obliczeń, a następnie, gdy wszystko jest zrobione, łącz wynik każdego obliczenia, aby uzyskać odpowiedź obliczeń głównych. Przykładem może być: Mapa-Zmniejszenie

Ankur
źródło
1

Mieliśmy kurs na temat „systemów rozproszonych” i chociaż nie pamiętam dokładnie definicji, przebiegała ona w następujący sposób:

  1. może działać na wielu osobnych węzłach komunikujących się za pośrednictwem wiadomości (nie może współdzielić pamięci)
  2. obiekty można migrować między węzłami
  3. obiekty zachowują swoją tożsamość podczas migracji i mogą być w przejrzysty sposób adresowane podczas migracji
  4. obiekty nie zależą od węzła, który je utworzył
  5. system może obsługiwać dodawanie i usuwanie węzłów

(Wierzę, że było ich więcej i nie jestem pewien co do ostatniego punktu)

Teraz na kursie nauczyliśmy się, jak implementować transakcję rozproszoną i blokadę rozproszoną. Lekcja polega na tym, że blokada rozproszona jest zasadniczo wdrażana przy użyciu transakcji rozproszonej, co jest odwrotnością w porównaniu z tym, co robisz lokalnie, i że z natury nie jest odporna na uszkodzenia, co raczej nie wystarcza, aby system rozproszony był w pierwszej kolejności.

Edycja: Definicja ta dotyczy „systemu rozproszonego” w wąskim znaczeniu systemu operacyjnego lub systemu baz danych, a nie tylko systemu klient-serwer. Wszystko, co spełnia pierwszy warunek, może być nazywane rozproszonym w niektórych kontekstach.

Przypadkowo definicja odpowiada różnicy między rozproszonymi a tradycyjnymi systemami kontroli wersji, z których wszystkie są przynajmniej klient-serwer i często również są replikowane.

Jan Hudec
źródło
To bardzo szczególny styl przetwarzania rozproszonego. Są inne, a jedyną rzeczą, którą tak naprawdę dzielą, jest pierwszy punkt. Przesyłanie wiadomości jest bardzo ważne, inni… nie tak bardzo.
Donal Fellows
1
@DonalFellows: Cóż, jest to system rozproszony , w sensie systemu operacyjnego lub systemu baz danych. Tam migracja i odporność na awarie są głównymi punktami ich realizacji. Rozproszone „przetwarzanie” to wszystko, co działa na wielu węzłach.
Jan Hudec,
Cóż, w takim przypadku powinna była obejmować decyzję o podjęciu decyzji. To trudne w systemie rozproszonym. (Co więcej, większość prac naukowych, które widziałem na ten temat, zawiera całkowicie nierealistyczne założenia dotyczące podstawowej topologii grafu, dając prawidłowe, ale bezużyteczne wnioski.)
Donal Fellows
@DonalFellows: Oczywiście obejmował biznes związany z podejmowaniem decyzji i całym tym arbitrażem i dzieleniem mózgów (niezbyt głęboko, był to tylko poziom wprowadzający). Ale to nie definiuje właściwości rozproszonego systemu. To tylko przeszkoda, którą musisz skakać, jeśli chcesz ją stworzyć.
Jan Hudec
0

Przetwarzanie rozproszone to termin „nierynkowy” dla obliczeń korporacyjnych, który w rzeczywistości można usłyszeć znacznie więcej. Jednak ogólna idea, jak zauważyli inni, to „używasz więcej niż jednego komputera do pracy”

Archimedes Trajano
źródło