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.
66 Rozdział 4. Tolerowanie bizantyjskich uszkodzeń<br />
o tym, które zlecenia zostaną wyko<strong>na</strong>ne a które nie. War<strong>to</strong> zauważyć, że usługa<br />
niezawodnego rozgłaszania nie koniecznie musi gwaran<strong>to</strong>wać w tym przypadku<br />
całkowite uporządkowanie komunikatów (ang. <strong>to</strong>tally ordered multicast), czy<br />
właściwość a<strong>to</strong>mowego rozgłaszania (ang. a<strong>to</strong>mic multicast), która zapewnia, że<br />
wiadomość zostanie dostarczo<strong>na</strong> do wszystkich aktywnych uczestników lub do<br />
nikogo. Zapewnienie niezawodnego rozgłaszania jest konieczne, gdyż wszystkie<br />
poprawnie działające repliki muszą dowiedzieć się o tym, które zlecenia zostały<br />
przez nie pominięte i które powinny wyko<strong>na</strong>ć, by pozostać w synchronizacji z<br />
innymi replikami.<br />
Ogólny opis działania pro<strong>to</strong>kołu. Węzeł po włączeniu się do systemu zostaje<br />
przyłączony do grupy replik, których identyfika<strong>to</strong>ry z<strong>na</strong>jdują się w jego o<strong>to</strong>czeniu.<br />
Jest on zapraszany do istniejącej grupy replik lub tworzy własną grupę.<br />
W pierwszym przypadku, węzeł pobiera stan i zaczy<strong>na</strong> uczestniczyć w wykonywaniu<br />
pro<strong>to</strong>kołu, <strong>na</strong><strong>to</strong>miast w drugiej sytuacji zaprasza szereg replik do swojej<br />
grupy, do momentu gdy osiągnie o<strong>na</strong> oczekiwany rozmiar.<br />
Klient c, może wysłać zlecenie r c s do dowolnej repliki i, przy czym zlecenia<br />
muszą być kolejno ponumerowane przez klienta używając odpowiedniego s.<br />
Repliki działają spełniając zlecenia w rundach r g numerowanych kolejno. Runda<br />
składa się z grupy zleceń odebranych przez repliki od momentu rozpoczęcia poprzedniej<br />
rundy do chwili bieżącej. Rundy są mechanizmem, który wprowadza<br />
pewien s<strong>to</strong>pień synchronizacji w pro<strong>to</strong>kole, podobnie jak ma <strong>to</strong> miejsce BFT w<br />
przypadku s<strong>to</strong>sowania techniki widoków.<br />
Zaletą wyko<strong>na</strong>nia zleceń w rundach w s<strong>to</strong>sunku do wirtualnej synchroniczności<br />
jest rzadka konieczność interwencji, <strong>na</strong>wet gdy któraś z replik przestałaby<br />
odpowiadać. W BFT <strong>na</strong>leży przeprowadzić zmianę widoku zawsze gdy zawodzi<br />
replika głów<strong>na</strong>, a wyz<strong>na</strong>czenie nowej repliki głównej wymaga ponumerowania<br />
replik. Długość rundy może zostać ograniczo<strong>na</strong>, ale wskazane jest, by repliki<br />
dopasowywały długość ok<strong>na</strong> rundy dla wyko<strong>na</strong>nia zleceń w zależności od obciążenia,<br />
podobnie jak w sterowaniu częs<strong>to</strong>ścią zapisu stanu.<br />
Replika otrzymując zlecenie od klienta rozsyła komunikat rozpoczy<strong>na</strong>jący<br />
kolejną rundę vote-request i czeka <strong>na</strong> akceptację od 2f +1 replik uwzględniając<br />
siebie samą, które w odpowiedzi rozgłaszają wek<strong>to</strong>r R j zawierający zlecenia,<br />
które repliki chcą wyko<strong>na</strong>ć w danej rundzie. Każda replika składa wszystkie<br />
wek<strong>to</strong>ry odpowiednio uwzględniając kolejność wyko<strong>na</strong>nia i rozsyła wek<strong>to</strong>r R g<br />
do reszty replik, <strong>na</strong>stępnie czeka <strong>na</strong> 2f +1 takich samych odpowiedzi od różnych<br />
replik uwzględniając siebie samą. Po zebraniu wymaganej liczby komunikatów<br />
replika wybiera pierwsze zlecenie z R g i rozgłasza wiadomość przygo<strong>to</strong>wania<br />
prepare dla tego zlecenia i ponownie czeka <strong>na</strong> odpowiednią liczbę komunikatów.<br />
W <strong>na</strong>stępnej kolejności rozsyła wiadomość pre-commit zawierającą wynik<br />
wyko<strong>na</strong>nia zlecenia. Komunikat commit, zostaje wysłany <strong>na</strong> końcu w celu za-