10.03.2015 Views

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 ...

SHOW MORE
SHOW LESS

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>-

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!