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 ...
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
4.4 Pro<strong>to</strong>kół zachłanny 73<br />
Uzgadnianie wielowar<strong>to</strong>ściowe. Zanim repliki przystąpią do wyko<strong>na</strong>nia zlecenia<br />
muszą tą czynność potwierdzić za pomocą wielowar<strong>to</strong>ściowego uzgadniania<br />
opisanego w poprzednim rozdziale. Pro<strong>to</strong>kół realizujący wyko<strong>na</strong>nie zleceń <strong>na</strong>dsyłanych<br />
do grupy przez klientów jest wykonywany w <strong>na</strong>stępujących krokach:<br />
1. Gdy replika i otrzyma zlecenie r c s wysyła komunikat < vote-request, r g ,<br />
R i = r c s > σi do wszystkich replik, gdzie r g , <strong>to</strong> aktualny numer rundy,<br />
a R i , <strong>to</strong> wek<strong>to</strong>r zleceń, w tym przypadku zakładamy, że replika nie posiadała<br />
żadnych zleceń w kolejce Q i . Gdyby okazało się, że w kolejce<br />
są zlecenia, <strong>to</strong> powinny zostać umieszczone <strong>na</strong> początku wek<strong>to</strong>ra R i ,tak<br />
by zlecenia były ułożone z rosnącym porządkiem sekwencji s rozpatrując<br />
poszczególnych klientów (np. R i = {r 1 1 ,r 1 2 ,r 3 2 ,,...}). War<strong>to</strong> zauważyć,<br />
że sposób uporządkowania elementów w R i ustawia zlecenia <strong>na</strong>dane przez<br />
tych samych klientów w jednej grupie. Takie postępowanie zapewnia brak<br />
wystąpienia konfliktów typu zapis-zapis w obrębie jednej rundy.<br />
2. Odebranie komunikatu < vote-request, r g , R j = r s c > σj <strong>na</strong>kłada obowiązek<br />
rozesłania odpowiedzi przez replikę, używając komunikatu < voteresponse,<br />
r g , R i > σi . Jeżeli r g okazałoby się nieprawidłowe, <strong>to</strong> replika<br />
powin<strong>na</strong> odpowiedzieć komunikatem z poprawnym r g . Komunikat voteresponse<br />
powinien zostać <strong>na</strong>dany wtedy i tylko wtedy, gdy replika wcześniej<br />
nie wysłała własnego komunikatu vote-request dla rundy o numerze<br />
r g . Replika otrzymawszy f +1 wiadomości z r g , różnym od własnego, ale<br />
takim samym z<strong>na</strong>czniku, powin<strong>na</strong> wprowadzić korektę i rozesłać jeszcze<br />
raz vote-response z poprawnym r g .<br />
3. Zgromadzenie przez i-tą replikę 2f +1 odpowiedzi vote-response uwzględniając<br />
siebie samą i/lub vote-request rozpoczy<strong>na</strong> fazę uzgadniania. Wek<strong>to</strong>ry<br />
R j składane są przez replikę w jeden wek<strong>to</strong>r R g zachowując porządek<br />
taki sam jak w R i , który <strong>na</strong>stępnie jest rozgłoszony < request-ready, r g ,<br />
R g > σi .Zebranief +1 takich samych komunikatów request-ready, może<br />
rozpocząć fazę przetwarzania zleceń.<br />
4. Pro<strong>to</strong>kół, który realizuje wyko<strong>na</strong>nie każdego zlecenia składa się z trójfazowego<br />
uzgadniania każdego wyko<strong>na</strong>nia:<br />
• Pierwszym komunikatem rozsyłanym przez replikę, jest < prepare,<br />
r g , H(R g (k)) > σi dla k-tego zlecenia w wek<strong>to</strong>rze R g .<br />
• Po odebraniu 2f +1 komunikatów prepare dla zlecenia R g (k), replika<br />
wykonuje żądanie i wysyła komunikat < pre-commit, r g , V g (k)<br />
> σi , który po odebraniu od 2f +1 powinien zostać potwierdzony komunikatem<br />
< commit, r g , H(V g (k)) > σi , co ostatecznie zatwierdza<br />
wyko<strong>na</strong>nie operacji R g (k).