Skip to the content.

Protokół komunikacji

Priorytet stanu

Używany podczas aktualizacji stanu od strony wątku Sieci. Ma zapewnić jednoznaczność stanu na podstawie zbioru przekształceń niezależnie od ich kolejności. Niższy numer - wyższy priorytet:

  1. Obliczone
  2. Zajęte
  3. Wolne

W sytuacji konfliktu w ramach stanu wygrywa ten, którego właścicielem jest Node o niższym id.

Dołączanie do sieci

  1. Tworzy połączenie z nodem głównym publicznym.
  2. Wysyła wiadomość pytanie o listę nodów do głównego publicznego.
  3. Otrzymuje wiadomość odpowiedź z listą nodów.
  4. Tworzy połączenie ze wszystkimi pozostałymi nodami publicznymi.
  5. Rozpoczyna kolejkowanie wiadomości z sieci.
  6. Wysyła wiadomość powitalną do wszystkich nodów.
  7. Wysyła pytanie o postęp obliczeń do losowego noda.
  8. Otrzymuje odpowiedź z postępem obliczeń i inicjalizuje stan.
  9. Aplikuje otrzymane zmiany stanu do obiektu stanu.
  10. Node rozpoczyna zwykłą pracę.

Protokół jest zawodny w pewnym scenariuszu. Dlatego potrzebna jest dodatkowa synchronizacja stanu obliczeń między nodami. Zapewnia ją potwierdzenie zajęcia danych oraz protokół końcowej synchronizacji.

Heart beat

Potrzebne są dwie struktury danych:

Rezerwowanie zadania

  1. Wątek obliczeń prosi o zadanie.
  2. Wątek stanu daje zadanie i informuje wątek sieci o rezerwacji.
  3. Wątek sieci wysyła wiadomość “zajmuję dane”.
  4. Pozostałe nody aktualizują swój stan na podstawie priorytetu i odsyłają potwierdzenie zajęcia danych ze stanem po aktualizacji.
  5. Node otrzymuje potwierdzenia zajęcia danych.
  6. Aktualizuje stan na podstawie odpowiedzi i jeśli to konieczne, informuje odpowiedni wątek obliczeń o zadaniu do przerwania.

Kończenie zadania

  1. Wątek obliczeń po zakończeniu zadania informuje o tym wątek stanu.
  2. Wątek stanu zmienia stan i informuje o tym wątek sieci.
  3. Wątek sieci wysyła wiadomość broadcast “obliczyłem”.
  4. Pozostałe nody aktualizują stan według priorytetu.

Końcowa synchronizacja

  1. Aktywuje się, gdy wszystkie zadania w stanie lokalnym staną się zajęte, lub obliczone.
  2. Wysyła pytania o synchronizację niedokończonych zadań do nodów, które nie ukończyły swojego zadania (według lokalnego stanu). Pytanie dla każdego noda dotyczy tylko powiązanych z nim zadań.
  3. Otrzymuje odpowiedzi synchronizujące zadania i aktualizuje stan.

Home