OdpornoÅÄ na bÅÄdy bizantyjskie w systemach peer-to-peer - Instytut ...
OdpornoÅÄ na bÅÄdy bizantyjskie w systemach peer-to-peer - Instytut ...
OdpornoÅÄ na bÅÄdy bizantyjskie w systemach peer-to-peer - Instytut ...
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
82 Rozdział 4. Tolerowanie bizantyjskich uszkodzeń<br />
W tym paragrafie przedstawiłem pro<strong>to</strong>kół zatwierdzania stanu pokazując<br />
wcześniej, że brak uzgodnienia momentu zapisu mógłby doprowadzić do niepożądanego<br />
działania usługi. W uzupełnieniu do pro<strong>to</strong>kołu BFT został pokazany<br />
prosty sposób sterowania częs<strong>to</strong>ścią zapisu, który mógłby okazać się zawodny<br />
przy większych wymaganiach, jed<strong>na</strong>k stanowi rozwiązanie, które może zostać<br />
użyte po małych modyfikacjach w praktycznej realizacji.<br />
4.6 Pro<strong>to</strong>kół optymistyczny<br />
Twierdzenie o nie istnieniu konsensusu w całkowicie asynchronicznym systemie<br />
w obecności choć jednego nieuczciwie działającego procesu Fischera [FLP85]<br />
mówi o tym, że próba uzgadniania bez synchronizacji może nie przynieść rezultatu.<br />
Jed<strong>na</strong>k <strong>na</strong>dal istnieje szansa, że uzgadnianie się powiedzie. Pro<strong>to</strong>koły,<br />
które dopuszczają możliwość zaistnienia błędnego przebiegu przyjęło się <strong>na</strong>zywać<br />
pro<strong>to</strong>kołami optymistycznymi. W przypadku, gdy pro<strong>to</strong>kół optymistyczny<br />
zawiedzie wyko<strong>na</strong>nie zostaje przełączone w tryb użycia pro<strong>to</strong>kołu zachłannego.<br />
Opisywane w poprzednim rozdziale pro<strong>to</strong>koły BFT i SC-ABC posiadają swoje<br />
wersje optymistyczne. Pro<strong>to</strong>kół BF2 moż<strong>na</strong> również zmodyfikować w taki sposób,<br />
że zostanie wyeliminowa<strong>na</strong> duża część synchronizacji między replikami, a<br />
powrót do pro<strong>to</strong>kołu właściwego <strong>na</strong>stąpi podczas wykrycia błędów.<br />
• Wyko<strong>na</strong>nie pro<strong>to</strong>kołu BF2 w punkcie trzecim zakłada uzgodnienie przez<br />
repliki zbudowanego wek<strong>to</strong>ra R g . W pro<strong>to</strong>kole optymistycznym zamiast<br />
uzgadniać R g używając komunikatu request-ready <strong>na</strong>tychmiast przechodzimy<br />
do fazy wyko<strong>na</strong>nia zleceń.<br />
• Faza wyko<strong>na</strong>nia zlecenia może również zostać skróco<strong>na</strong>. W tym przypadku<br />
replika zapamiętuje stan obiektu sprzed wyko<strong>na</strong>nia zlecenia i wykonuje<br />
je <strong>na</strong>tychmiast, <strong>na</strong>stępnie rozgłasza komunikat pre-commit. Gdy<br />
pro<strong>to</strong>kół zawiedzie, replika wycofuje wyko<strong>na</strong>nie zlecenia.<br />
• Podążając za <strong>to</strong>kiem rozumowania z poprzedniego punktu, replika może<br />
wysłać odpowiedź do klienta od razu po wyko<strong>na</strong>niu zlecenia, jeżeli nie<br />
modyfikuje ono stanu usługi. Klient w przypadku odebrania za małej<br />
liczby takich samych odpowiedzi ponownie wyśle zlecenie ustawiając dodatkową<br />
flagę retrospect. Replika po odebraniu takiego zlecenia wie, że<br />
uprzednio wyko<strong>na</strong>nie nie powiodło się i <strong>na</strong>leży zrealizować całą operację<br />
z uwzględnieniem wszystkich kroków.<br />
Przełączenie w tryb wyko<strong>na</strong>nia pro<strong>to</strong>kołu zachłannego powinno <strong>na</strong>stępować<br />
zaraz po wykryciu niepoprawnego działania. Powrót do optymistycznego pro<strong>to</strong>-