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.

68 Rozdział 4. Tolerowanie bizantyjskich uszkodzeń<br />

men<strong>to</strong>wano częściowo algorytm SC-ABC. OceanS<strong>to</strong>re zbudowane jest używając<br />

Tapestry - warstwy komunikacyjnej <strong>peer</strong>-<strong>to</strong>-<strong>peer</strong>, która zdaje się mieć słabszą<br />

wydajność w przekazywaniu komunikatów niż Pastry, jed<strong>na</strong>k gwarantuje większą<br />

niezawodność [LKRG03, ZHS + 03, RD01b]. Projek<strong>to</strong>wany system będzie<br />

realizował <strong>na</strong>stępujące, podstawowe operacje:<br />

insert (id, creds, object) - wprowadza obiekt identyfikowany przez globalnie<br />

unikalny identyfika<strong>to</strong>r id do systemu wraz z uprawnieniami creds 6 .<br />

lookup (id, creds, object*) - zwraca obiekt zidentyfikowany przez id weryfikując<br />

operację przy użyciu uprawnień creds.<br />

invoke (id, creds, operation, params, results*) - wywołuje operację <strong>na</strong><br />

obiekcie identyfikowanym przez id pod warunkiem poprawnej weryfikacji<br />

uprawnień creds. Wynik operacji zwracany jest w zmiennej results.<br />

remove (id, creds) - usuwa obiekt z systemu o identyfika<strong>to</strong>rze id pod<br />

warunkiem poprawnej identyfikacji uprawnień creds.<br />

Podział <strong>na</strong> wyżej wymienione me<strong>to</strong>dy wynika z ich różnorakiej obsługi przez<br />

grupę replikującą. Operacja insert rozpoczy<strong>na</strong> działanie pro<strong>to</strong>kołu <strong>na</strong> rzecz<br />

konkretnego obiektu. Usługa powin<strong>na</strong> stać się dostęp<strong>na</strong>, gdy będzie wiadomo,<br />

że obiekt został umieszczony w przy<strong>na</strong>jmniej 2f +1 replikach. Na rysunku<br />

4.3 pokazano różne możliwe typy zachowania klienta i grupy replik podczas<br />

wprowadzania obiektu. W pierwszym przypadku (a) klient stara się wprowadzić<br />

obiekt do systemu, jed<strong>na</strong>k replika, do której wysłał zlecenie jest nieuczciwa i nie<br />

wypycha kopii obiektu do innych replik; (b) klient rozsyła wiadomość do kilku<br />

replik i czeka <strong>na</strong> odpowiedzi; (c) klient ponownie wysyła komunikat do jednej<br />

z replik i czeka <strong>na</strong> odpowiedź od różnych replik, gdy otrzymają one obiekt.<br />

Gdy obiekt zostanie poprawnie umieszczony w systemie, <strong>to</strong> grupa replik<br />

może zacząć przetwarzanie <strong>na</strong>pływających zleceń. Rozpatrując operację lookup,<br />

łatwo moż<strong>na</strong> zauważyć, że nie modyfikuje o<strong>na</strong> stanu obiektu i może zostać obsłużo<strong>na</strong><br />

<strong>na</strong>wet przez jedną replikę, jed<strong>na</strong>k wymaga również rozpatrzenia kilku<br />

przypadków, gdyż klient może np. wymagać potwierdzenia stanu odebranego<br />

obiektu od większości replik w grupie. Wywołanie invoke jest operacją modyfikującą<br />

stan obiektu, dlatego konieczne jest ustalenie kolejności realizacji zleceń<br />

przez repliki i zatwierdzenie stanu końcowego. Tu niezbędnym jest wprowadzenie<br />

pro<strong>to</strong>kołu uzgadniającego stan. Zakończenie działania pro<strong>to</strong>kołu <strong>na</strong> rzecz<br />

obiektu zachodzi, gdy zostanie odebrane zlecenie remove. Usunięcie obiektu<br />

6 Mechanizm zarządzania i weryfikacji uprawnień został <strong>na</strong>szkicowany w <strong>na</strong>stępnym rozdziale,<br />

który dotyczy projektu systemu Pas<strong>to</strong>r. Na chwilę obecną wystarczy założyć, że uprawnienia<br />

jednoz<strong>na</strong>cznie określają, k<strong>to</strong> i jakie operacje może wyko<strong>na</strong>ć.

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

Saved successfully!

Ooh no, something went wrong!