/ / algorytm do równomiernego rozkładu wartości do wszystkich procesów - algorytm, projekt, język-agnostyk, rozproszony

Algorytm równomiernego rozkładu wartości dla wszystkich procesów - algorytm, projekt, język-agnostyk, rozproszony

Muszę napisać system rozproszony z czteremaprocesy działające na czterech różnych węzłach. System rozproszony powinien działać w następujący sposób: generator liczb losowych generuje liczbę losową w każdym procesie. Celem jest wyrównywanie tych wartości we wszystkich procesach poprzez przekazywanie komunikatów między procesami. Taki proces A jest serwerem, który pobiera liczby ze wszystkich procesów, a następnie zleca im wysłanie części ich numeru do jednego lub więcej innych procesów w celu wyrównywania wszystkich numerów przechowywanych przez procesy. Na przykład liczba A wynosi 30, liczba B wynosi 65, liczba C wynosi 35, a liczba D wynosi 70. A oblicza 30 + 65 + 35 + 70 = 200 podzielone przez 4 = 50. Teraz przetwarzaj A , serwer wie, kto ma mniej niż przeciętny i kto ma więcej niż przeciętnie. Teraz pytanie brzmi, w jaki sposób A decyduje, kto przesyła, który numer do kogo? aby wyrównać wartości wszystkich procesów. należy pamiętać, że A nie może bezpośrednio polecić procesowi zmniejszenia lub zwiększenia jego liczby, np. nie może wysłać komunikatu do B i nakazać mu zmniejszenia o 15, a następnie wysłać kolejną wiadomość do C i polecić jej zwiększenie o 15. musi wysłać wiadomość do B, która powie B, że zmniejszy się o 15, a następnie wyśle ​​wiadomość do C i poleci jej zwiększenie o 15 lub innymi słowy, mówi B, aby wysłać 15 z twojej liczby do C. Z góry dziękuję. Zaki.

Odpowiedzi:

0 dla odpowiedzi № 1

Problem, który opisujesz, jest znany jako agregacja rozproszona. Istnieje wiele rozwiązań odpowiednich dlaróżne założenia w sieci (jakie węzły są połączone? czy można zgubić komunikaty?), funkcję do obliczenia (średnia? suma?), i tak dalej. Dobry przegląd z odniesieniami do algorytmów, z których można korzystać, można znaleźć pod adresem http://arxiv.org/abs/1110.0725.


1 dla odpowiedzi nr 2

Bo to, co wiem, nie jest specyficzne Przepis lub tylko dobrze zdefiniować wzór do wdrożenia takiegosystem rozproszony (również jeśli istnieje materiał zawierający wskazówki na temat argumentu, patrz link na końcu pytania). W grę wchodzą różne opcje, które ukształtują ostateczny system, jego skalowalność, jak będzie reagować, jak będzie solidnie, itp.

Oznaczono to jako język agnostyczny. Jestem przekonany, że dobre koncepcje liczą więcej niż technologie, ale na końcu trzeba dokonać wyboru, a taki system jest zbyt skomplikowany, aby można go było zbudować przy użyciu języka, który nie jest aż tak znajomy.

Zbudowałbym go przy pomocy języka C #, ponieważ jest to mój podstawowy język programowania, w którym stosuje się techniki zwinny rozwój.

  1. Najpierw spróbuję naszkicować a projekt makr architektoniczny, podkreślając zaangażowane podmioty i ich odpowiedzialność (ale bez wchodzenia w szczegóły).
  2. Wtedy spróbuję najpierw zakodować prosty prototyp to obejmuje dwa węzły.
  3. Kiedy działa prototyp, spróbuję go znaleźć słabe punkty i niech zadziała z czterema węzłami.
  4. Jeśli występują problemy, powtarzaj ostatni punkt do tego czasu spełniają wymagania.

Zajmując się szczegółami, można go zbudować nawet przy użyciu surowe gniazda; ale żeby to było proste, sugeruję, żebyś znalazł swój system Protokół HTTP (np. za pomocą .NET BCL HttpListener i HttpClient składniki jako podstawa) do komunikacji:

  1. Predefiniowany zestaw GET wiadomość może wykonywać synchronizację między serwerami równorzędnymi.
  2. POST wiadomość może być używana do wymiany danych na liczbach losowych.

O generacji numeru otwiera zupełnie nowy świat. Opieram się na usługach zewnętrznych takich jak ANU Quantum Random Server (jeśli możesz policzyć aktywne połączenie z Internetem). Wiem, że oświadczyłeś, że jesteś algorytmem do wdrożenia, podałem to jako alternatywę (nie wiem, czy tę część można zmienić, czy nie).

Co najmniej, proponuję ci przeczytać Ten artykuł i również to o peer-to-peer jeśli użyjesz platformy .NET.