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.

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-

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

Saved successfully!

Ooh no, something went wrong!