portal Michała Hanćkowiaka
Begin main content
zar06

Odporność na błędy (fault tolerance)

Są 2 rodzaje błędów sieci: złośliwe i łagodne (ang. benign)

  1. łagodne – wierz lub kraw przestaje działać „na zawsze” (np. "crash" procesorów)
  2. złośliwe - wierz lub kraw(?) zachowuje się w sposób nieprzewidywalny

Problemy które rozważymy:

  1. problem 2 generałów (atakujących miasto z przeciwnych stron)
  2. consensus (wszyscy muszą się zgodzić na tą samą liczbę)

problem 2 generałów (coordinated attack problem) - form. def.

chodzi o podjęcię wspólnej decyzji o ataku...
psują się połączenia (komunikaty nie są dostarczane)
xi – chęć Pi, yi – ostateczna decyzja Pi
formalnie: mamy 2 procesory P1 i P2; mają być spełnione warunki:

  1. „agreement”, y1=y2, czyli wspólna decyzja...
  2. „validity”, if x1=x2=0, żaden kom. nie został dost., to y1=y2=0
  3. „nontriviality”, istnieje egzekucja, w której y1=y2=1

consensus - form. def.

każdy procesor Pi ma liczbę xi na wejściu,
chodzi o wybranie wspólnej liczby yi spośród xi,
przez te proc które się nie popsuły („crash” procesorów)
formalnie: mamy procesory P1, .., Pn; mają być spełnione warunki:

  1. „agreement”, yi=yj dla wsz niepopsutych Pi, Pj
  2. „validity”, yi in {x1, ..., xn}, dla wsz niepopsutych Pi

problem 2 generałów

przypomnieć pojęcie egzekucji asynch (konfiguracja początkowa i ciag zdarzeń) ...

Tw: nie istnieje alg rozwiązujący problem 2 generałów
Dowód:
def: a|P = egzekucja „a” z pkt widzenia procesora P
def: a1/P/a2 = egz a1 i a2 są nierozróżnialne z pkt widzenia P
Zakładamy, że alg istnieje, czyli istnieje egz b1, w której
dostarcza się „k” komunikatów oraz y1=y2=1 (z nontriviality).
Konstruujemy egzekucje ak, która wygląda tak:
2 gen
Zauważmy, że:
b1/P1/ak oraz w ak dostarcza się k1 kom, y1=y2=1 (?)
Następnie tworzymy egz ak1 z ak analogicznie (jak ak z b1)
czyli w ak1 dostarcza się k2 kom, y1=y2=1

w a1 dostarcza się 0 kom, y1=y2=1,
czy to już sprzeczność z validity ?
NIE, no nie wiemy czy w 1 konfiguracji było x1=x2=0 ?!?!
Konstruujemy egz b0 = "a1 z tą zmianą, że x1=0"
a1/P2/b0 => w egz b0: y1=y2=1 (P2 nie widzi innej wart x1)
Konstruujemy egz b0 = "b0 z tą zmianą, że x2=0"
b0/P1/b0 => w egz b0: y1=y2=1 (P1 nie widzi innej wart x2)
tzn. b0 jest egz w której x1=x2=0, y1=y2=1, dostarcza się 0 kom...
SPRZECZNOŚĆ z validity !!!

consensus

algorytm "obliczający" consensus:
consensus
oraz główne Twierdzenie:
consensus tw
pierwszy proces ma x na WE...
„iteracje”: w której dany proces dostaje x, oraz go wysyła w następnej iteracji (ew. crash) !
Są 2 możliwości:

  1. przedostatni proces się psuje – sprzeczność (co do f) !!!
  2. -''- się NIE psuje – wysyła x do Pj

Intuicja algorytmu consensus: wysyłam cenna informację gdzie się da, może przetrwa...

...

Zadania

ZADANIE 50 impl algorytmu consensus
Zaprojektuj eksperyment pokazujący nietrywialne działanie algorytmu Consensus...
Nasz symulator nie jest przystosowany do algorytmow synch "psujących się w połowie rundy",
dlatego najlepiej użyc proc blad {iter1 iter2} generującej błąd fibera przy pomocy error "crash",
w odpowiednio dobranej chwili (patrz tutaj),
Uwaga: przez "nietrywialne działanie" rozumiemy takie, w którym coś się zmienia
także w ostatnich iteracjach pętli for...

uwaga: portal używa ciasteczek tylko do obsługi tzw. sesji...