Małgorzata Sikorska - Praktyczne porównanie mechanizmów 2PC i
Transkrypt
Małgorzata Sikorska - Praktyczne porównanie mechanizmów 2PC i
Praktyczne porównanie mechanizmów 2PC i 3PC dla rozproszonych baz danych Małgorzata Sikorska Wydział Inżynierii Mechanicznej i Informatyki Kierunek Informatyka, Rok V [email protected] Streszczenie Artykuł przedstawia porównanie podstawowych protokołów niepodzielnego zatwierdzania – 2PC oraz 3PC dla rozproszonych baz danych. Odgrywaja˛ one zasadnicza˛ rol˛e w przetwarzaniu transakcji rozproszonych. W celu praktycznego porównania tych protokołów zaprojektowano interfejsy realizujace ˛ mechanizmy 2PC i 3PC w oparciu o model przetwarzania transakcyjnego DTP, a nast˛epnie zaimplementowano je w jednej z najpopularniejszych architektur rozproszenia wspomagajacych ˛ przetwarzanie transakcyjne – architekturze trójwarstwowej. W pracy skupiono si˛e na przedstawieniu idei protokołów niepodzielnego zatwierdzania oraz ich oceny na podstawie kryteriów, takich jak złożoność czasowa oraz złożoność pod wzgl˛edem komunikatów, pozwalajacych ˛ na określenie ich wydajności. 1 Wprowadzenie Przetwarzanie transakcyjne jest jednym z podstawowych elementów funkcjonalności systemów zarzadzania ˛ bazami danych. Jest ono niezb˛edne wsz˛edzie tam gdzie aplikacje wymagaja˛ jednoczesnego dost˛epu do danych, współdzielonych pomi˛edzy wiele aplikacji, celem wykonania na nich operacji bazodanowych, stanowiacych ˛ koncepcyjnie logiczna˛ całość. Taki spójny logicznie zestaw operacji wykonywanych na bazie danych określany jest terminem transakcja. Najcz˛eściej transakcja obejmuje operacje na jednej bazie danych. W przypadku rozproszonej bazy danych (DDB – ang. Distributed Database), transakcja wykorzystuje dane z wielu baz danych tzw. w˛ezłów systemu rozproszonego. Transakcje wykonujace ˛ operacje na danych znajdujacych ˛ si˛e na wielu niezależnych serwerach baz danych, stanowiacych ˛ logiczna całość, określane sa˛ mianem transakcji rozproszonej (globalnej). Natomiast operacje składowe, czyli lokalne cz˛eści transakcji globalnej wykonywane na poszczególnych w˛ezłach, sa˛ nazywane gał˛eziami transakcji (ang. transaction branch). Zarówno w przypadku systemu scentralizowanego, jak i rozproszonego transakcja powinna odnosić si˛e do danych odtwarzalnych i być z założenia niepodzielna (ang. atomic). W sytuacji, gdy operacje transakcji zostana˛ poprawnie zakończone, mówimy wtedy, że transakcja zakończyła si˛e powodzeniem i jej skutki moga˛ zostać zatwierdzone w bazie danych. W pozostałych przypadkach mówimy o niepowodzeniu transakcji i tym samym 1 skutki transakcji powinny być wycofane, a stan bazy danych powinien być przywrócony do stanu sprzed rozpocz˛ecia transakcji. Aby zagwarantować powyższe własności każda transakcja powinna spełniać postulaty zasady ACID (ang. atomictiy, consistency, isolation, durability), zaproponowane przez Haider’a i Reutera [3]: • Atomowość (ang. atomicity) – określa reguł˛e „wszystko albo nic”, oznaczajac ˛ a,˛ że zbiór operacji składowych transakcji musi być wykonany w całości albo wcale. • Spójność (ang. consistency) – transakcja powinna przekształcać system z jednego stanu spójnego w inny spójny stan. • Izolacja (ang. isolation) – każda transakcja powinna być wykonywana niezależnie od innych działajacych ˛ współbieżnie transakcji, przetwarzanych w tym samym środowisku. Skutki współbieżnego wykonania transakcji powinny być takie same, jak wówczas gdyby wykonywano je w sposób szeregowy. • Trwałość (ang. durability) – wyniki działania zatwierdzonych transakcji powinny być zachowane w pami˛eci trwałej. W systemie rozproszonym zagwarantowanie powyższych własności transakcji nie jest zadaniem łatwym, dlatego też wprowadzono specjalne mechanizmy ułatwiajace ˛ przetwarzanie transakcji rozproszonych zapewniajace ˛ własności ACID. Sa˛ nimi protokoły niepodzielnego zatwierdzania (ang. atomic commitment protocols – ACP). 2 Zatwierdzanie rozproszone Protokół niepodzielnego zatwierdzania jest algorytmem wykonywanym w celu niepodzielnego zatwierdzenia transakcji rozproszonej przez współpracujace ˛ w tym celu procesy. Każdy proces może oddać dokładnie jeden z dwóch możliwych głosów (ang. votes) – Yes lub No, co pozwala na podj˛ecie wspólnej decyzji: Zatwierdzenie (ang. Commit) lub Zaniechanie (ang. Abort) transakcji. ACP pozwala zadecydować, czy transakcje rozproszona˛ należy zatwierdzić, czy też nie [1]. Na podj˛ecie decyzji maja˛ wpływ nast˛epujace ˛ kwestie: 1. AC1 – Wszystkie procesy, które podejmuja˛ decyzje, podejmuja˛ ta˛ sama˛ decyzje. 2. AC2 – Procesy te nie moga˛ unieważnić swojej decyzji po tym jak już ja˛ podj˛eły. 3. AC3 – Decyzja o zatwierdzeniu może być podj˛eta tylko wtedy, gdy wszystkie procesy głosowały za zatwierdzeniem transakcji (oddały głos Yes). 4. AC4 – Jeżeli wszystkie procesy głosowały na Yes, wtedy decyzja˛ b˛edzie Zatwierdzenie. 5. AC5 – Powinno si˛e rozważyć wykonania algorytmu obejmujace ˛ różnego rodzaje niepowodzenia takie jak awarie czy utraty komunikatów, do tolerowania których algorytm został zaprojektowany. Jeżeli wszystkie zaistniałe awarie zostana˛ naprawione i nie wyst˛epuja˛ dostatecznie długo nowe awarie, wszystkie procesy podejma˛ w końcu decyzje. 2 3 Podstawowe protokoły niepodzielnego zatwierdzania Najcz˛eściej stosowanym protokołem niepodzielnego zatwierdzania jest dwufazowy protokół zatwierdzania (ang. two-phase commit protocol), nazywany w skrócie protokołem 2PC [3]. Wykonanie protokołu 2PC rozpoczyna si˛e w momencie rozpocz˛ecia zatwierdzania transakcji rozproszonej przez proces zwany koordynatorem na zlecenie klienta. Składa si˛e z dwóch faz, w pierwszej fazie koordynator decyduje, kiedy rozpoczać ˛ zatwierdzanie transakcji rozproszonej. Jest to tzw. faza przygotowania (ang. prepare), każdy z uczestników transakcji przygotowuje si˛e do lokalnego zatwierdzenia transakcji rozproszonej. Natomiast druga faza stanowi faz˛e rzeczywistego zatwierdzania (ang. commit) i rozpoczyna si˛e w momencie, gdy każdy z uczestników transakcji rozproszonej wyraził gotowość do jej zatwierdzenia. Cały ten proces jest koordynowany przez zarzadc˛ ˛ e transakcji (ang. transaction manager), który może działać jako jeden z procesów systemu zarzadzania ˛ jednej z rozproszonych baz danych lub może być zewn˛etrznym modułem wbudowanym w serwer aplikacji. Protokół 2PC jest w wielu przypadkach protokołem blokujacym, ˛ ponieważ w wielu punktach wykonania tego protokołu procesy (sa˛ w stanie niepewności) oczekuja˛ na komunikaty, które moga˛ dotrzeć z dużym opóźnieniem lub nigdy, na skutek awarii lub innych okoliczności. W takich przypadkach procesy te moga˛ być czekać w nieskończoność, przez co sa˛ zablokowane. Na wypadek takich ewentualności stosuje si˛e w protokole 2PC mechanizm anulowania zadań po upływie przewidzianego czasu (ang. timeout). Pozwala to uniknać ˛ blokady procesów, gdyż oczekiwanie procesów jest przerywane przez po określonym czasie, po którym proces musi podjać ˛ pewna˛ akcj˛e (ang. timeout action). W przypadku protokołu 3PC mamy do czynienia z dodatkowa˛ faza˛ (pre-commit), w której koordynator, po wyrażeniu gotowości przez każdego z uczestników transakcji do jej zatwierdzenia, wysyła do nich komunikat informujacy ˛ o przygotowaniu si˛e do zatwierdzenia transakcji i tym samym opuszczaja˛ oni stan niepewności. Dopiero po otrzymaniu koordynatora potwierdzenia otrzymania tego komunikatu przez wszystkich uczestników transakcji, nast˛epuje jej rzeczywiste zatwierdzenie. Zapewnia to wi˛eksza˛ niezawodność protokołu i odporność na awarie koordynatora [1]. 4 Projekt i realizacja mechanizmów 2PC i 3PC Istnieje wiele architektur rozproszenia, które wspomagaja˛ przetwarzanie transakcyjne. Obecnie stosuje si˛e trójwarstwowa˛ architektur˛e rozproszona˛ oparta˛ na oprogramowaniu pośredniczacym ˛ (ang. middleware), w której poszczególne w˛ezły porozumiewaja˛ si˛e za pomoca˛ oprogramowania pośredniczacego, ˛ zakładajacy ˛ wspólny protokół komunikacyjny, przezroczysty dla użytkowników. W celu praktycznego porównania mechanizmy 2PC i 3PC zostały zrealizowane w postaci komponentów oprogramowania middleware na serwerze aplikacji, w oparciu o j˛ezyk Java i funkcjonalności sterownika JDBC [12]. Ponieważ technologie oprogramowania komponentowego, tworza˛ środowisko, które wymaga korzystania z ogólnie przyj˛etych modeli przetwarzania transakcyjnego, w niniejszej pracy aplikacja przetwarzajaca ˛ transakcje rozproszone zbudowana została w oparciu o model przetwarzania transakcji rozproszonych standardu X/Open (ang. Distributed Transaction Processing Model – DTP) [11]. Specyfikuje on m.in. komponenty, współpracujace ˛ ze soba˛ celem realizacji transakcji rozproszonej – program aplikacyjny, za- 3 rzadca ˛ transakcji, zarzadcy ˛ zasobów. Określa także rodzaj interfejsów, jakie musza˛ być dostarczone przez system transakcyjny w celu zapewnienia atomowego wykonania transakcji globalnej. Interfejsy pomi˛edzy komponentami programowymi, a zarzadc ˛ a˛ transakcji (określony w specyfikacji X/Open jako interfejs TX) oraz pomi˛edzy zarzadca ˛ transakcji, a zarzadc ˛ a˛ zasobów (zwany interfejsem XA). W niniejszej pracy funkcjonalność interfejsów TX i XA zastapiono ˛ omówionym poniżej interfejsami zawartymi w pakietach dtp, transactions oraz tests. Poniżej omówione zostały komponenty programowe udost˛epniajace ˛ te interfejsy zgodnie z modelem DTP. Komponent dtp.TransactionManager pełni funkcje zarzadcy ˛ transakcji, jest kluczowym elementem budowanej architektury. Dostarcza on przede wszystkim interfejsów niezb˛ednych do tworzenia transakcji, przypisania jej identyfikatora, rozpocz˛ecia i kontroli protokołów niepodzielnego zatwierdzania. • TID beginTransaction() – metoda pozwalajaca ˛ na rozpocz˛ecie transakcji rozproszonej oraz zwrócenie wynikowego identyfikatora transakcji. • boolean commitTransaction(Transaction t) – metoda wykonujaca ˛ operacj˛e zatwierdzenia transakcji rozproszonej t. W tym celu realizuje niepodzielny protokół zatwierdzania – ACP. Zwraca wartość TRUE, gdy transakcja globalna została zatwierdzona, w przeciwnym wypadku zwraca FALSE. • void rollbackTransaction(Transaction t) – metoda wykonujaca ˛ operacje zaniechania transakcji. • void joinResourceManager(ResourceManager participant) – dodanie nowego uczestnika (zarzadcy ˛ zasobów) transakcji rozproszonej (tzw. pozyskiwanie zasobów). Pozwala na zapami˛etanie w spisie uczestników identyfikatora serwera pełniacego ˛ rol˛e zarzadcy ˛ zasobów, który zarzadza ˛ zasobami wykorzystywanymi w danej transakcji globalnej t. Komponent dtp.ResorceManager, pełni rol˛e zarzadcy ˛ zasobów, który realizuje przydzielona˛ mu gałaź ˛ transakcji rozproszonej, bierze udział w protokole 2PC (3PC) celem niepodzielnego zatwierdzenia wszystkich gał˛ezi transakcji globalnej. Poniżej przestawione sa˛ interfejsy pozwalajace ˛ na uczestnictwo w protokole 2PC (3PC): • Boolean Prepare(TID tid) – metoda wywoływana w pierwszej fazie protokołu 2PC (3PC). Wszyscy uczestnicy transakcji globalnej sa˛ poproszeni przez koordynatora (poprzez wywołane tej metody) o głosowanie za zatwierdzeniem tej transakcji lub jej zaniechaniem. Metoda zwraca „głos” (ang. vote) uczestnika, czyli TRUE, jeżeli uczestnik głosował za zatwierdzeniem transakcji, w przeciwnym wypadku zwraca FALSE. • void Commit(TID tid) – metoda zlecajaca ˛ poszczególnym uczestnikom transakcji (określonej identyfikatorem tid) zatwierdzenie ich lokalnych cz˛eści tej transakcji. Jest wywoływana w drugiej fazie protokołu 2PC lub odpowiednio w ostatniej fazie protokołu 3PC, tylko w przypadku, gdy wszyscy uczestnicy transakcji głosowali za zatwierdzeniem transakcji globalnej. • void Abort(TID tid) – metoda zlecajaca ˛ poszczególnym uczestnikom transakcji (określonej identyfikatorem tid) zaniechanie ich lokalnych cz˛eści tej transakcji. 4 Wywoływana w drugiej fazie protokołu 2PC (3PC), w momencie, gdy chociaż jeden z uczestników głosował za zaniechaniem transakcji lub faza ta nie powiodła si˛e (ang. failed commit). W przypadku protokołu 3PC dodatkowo jest udost˛epniony interfejs: • boolean PreCommit(TID tid) – metoda wywoływana w drugiej fazie protokołu 3PC przez koordynatora po wykonaniu metody Prepare(). Jeżeli wszyscy uczestnicy głosowali YES, wysyła do nich komunikat PRE-COMMIT. Jest on informacja˛ dla każdego z uczestników, że pozostali głosowali YES i tym samym opuszcza on stan niepewności. Metoda zwraca potwierdzenie odebrania komunikatu, czyli TRUE, w przeciwnym wypadku zwraca FALSE. Każdy z omówionych wyżej komponentów zapewnia rejestracj˛e przebiegu transakcji rozproszonej w postaci wpisów w pliku rekonstrukcji znajdujacego ˛ si˛e w pami˛eci trwałej, co pozwala na przeprowadzenie procesu rekonstrukcji w przypadku awarii serwera. Komponent tests.Generator – klasa Java udost˛epniajaca ˛ interfejs, który realizuje funkcjonalność programu aplikacyjnego (ang. Application Program – AP) w modelu DTP. Definiuje on transakcj˛e, określa jej granice oraz uzyskuje dost˛ep do zasobów, w celu wykonania na nich operacji . 5 Porównanie protokołów 2PC i 3PC W tej cz˛eści przedstawione zostanie praktyczne porównanie protokołu 2PC z 3PC. Aby dokonać realnej oceny każdego z nich przeprowadzono odpowiednie testy wydajnościowe. W tym celu wyznaczono ich złożoność pod wzgl˛edem komunikatów oraz czasowa.˛ Omówione w poprzednim rozdziale protokoły 2PC i 3PC zostały zaimplementowane w celach przetestowania ich wydajności w rzeczywistym środowisku. Przeprowadzone eksperymenty pozwalaja˛ oszacować koszty ponoszone przy wykorzystaniu każdego z protokołów w aplikacjach trójwarstwowych (ang. three-tier applications). Obecnie najwi˛eksza wag˛e przy budowaniu aplikacji internetowych przykłada si˛e do wydajności, co cz˛esto jest decydujacym ˛ czynnikiem wpływajacym ˛ na utrzymaniu starych i pozyskiwaniu nowych klientów np. w systemach CRM. Dlatego też użyteczność protokołów 2PC oraz 3PC została określona na podstawie tego kryterium. Mechanizm 2PC (3PC) został zaimplementowany w technologi J2EE na serwerze aplikacji Apache Jakarta Tomcat 5.5.12 na maszynie z zainstalowana˛ maszyna˛ wirtualna˛ Java (JVM) w wersji 1.5.05. W celu przeprowadzenia testów pomini˛eto maszyny klientów oraz implementacj˛e interakcji pomi˛edzy klientem (np. przegladarka ˛ WWW), a użytkownikiem, ponieważ celem niniejszej pracy jest praktyczne porównanie obydwu protokołów, a nie ich pełna implementacja. Rol˛e komponentu aplikacyjnego pełni komponent JavaBean, który wykonuje operacje na zdalnych bazach danych poprzez oprogramowanie middleware. Działa on na tej samej maszynie, co serwer aplikacji. Funkcj˛e zdalnych baz danych pełnia˛ maszyny z zainstalowanym serwerem baz danych MySQLServer 5.0 oraz PostgreSQL 8.0. Komunikacja z warstwa˛ danych si˛e z nimi za pomoca˛ sterownika JDBC w wersji 2.0. Wszystkie maszyny sa˛ fizycznie rozmieszczone w sieci lokalnej połaczone ˛ siecia˛ Ethernet. W pierwszym eksperymencie dokonano symulacji wymiany komunikatów pomi˛edzy poszczególnymi procesami, bioracymi ˛ udział w protokole niepodzielnego zatwierdzania, 5 w celu porównania złożoności pod wzgl˛edem komunikatów protokołu 2PC z 3PC. Zakładamy, że złożoność pod wzgl˛edem komunikatów jest mierzona na podstawie liczby komunikatów użytych w protokole. W przeprowadzonym eksperymencie nie bierzemy pod uwag˛e długości tych komunikatów, ponieważ sa˛ one na tyle krótkie, że maja˛ wpływu na ta˛ złożoność. Przebieg eksperymentu był nast˛epujacy: ˛ wygenerowano zbiór żadań ˛ req do koordynatora o zatwierdzenie transakcji rozproszonej. Niech n oznacza liczb˛e uczestników transakcji rozproszonej, tak wi˛ec łaczna ˛ liczba procesów (z koordynatorem) wynosi (n + 1). Rozpocz˛eto symulacj˛e z parametrem n = 2. Dla każdego późniejszego pojedynczego wywołania procedury testujacej ˛ wartość parametru została zwi˛ekszana o 1. Podczas trwania eksperymentu komunikacja pomi˛edzy procesami przebiegała w nast˛epujacy ˛ sposób: klient składa żadanie ˛ do serwera aplikacji warstwy pośredniej. Nast˛epnie oprogramowanie warstwy pośredniej przetwarza to żadanie ˛ poprzez wykonanie transakcji na odpowiednim serwerze bazy danych. Rzeczywista manipulacja na zasobach udost˛epnionych przez rozproszona˛ baz˛e danych jest taka sama w obydwu przypadkach. Przy realizacji protokołu niepodzielnego zatwierdzania przez oprogramowanie warstwy pośredniej w przypadku protokołu 3PC wymagana jest wi˛eksza liczba komunikatów niezb˛ednych do zatwierdzenia transakcji rozproszonej. Po tym procesie, middleware zawraca wynik wykonania operacji SQL do klienta. Analizujac ˛ wyniki powyższego eksperymentu można wywnioskować, że w przypadku pojedynczego wykonania protokołu 2PC, w każdej rundzie jego wykonania, wysłane zostaje n komunikatów. Zatem przy braku awarii, protokół używa łacznie ˛ 3n komunikatów. Jest to nieduża liczba w porównaniu z protokołem 3PC, w przypadku którego przeprowadzone badania wykazały, że wymaga on łacznie ˛ około 5n komunikatów. Eksperyment wykazał, że koszt liczony w komunikatach jest wprost proporcjonalny do 3n dla protokołu 2PC, natomiast dla protokołu 3PC jest on wprost proporcjonalny do 5n. Dla pojedynczego wywołania jest to niewielka różnica, natomiast w przypadku dużej liczby żadań ˛ zatwierdzenia kolejnych transakcji rozproszonych wykonywanych na wielu serwerach, staje si˛e ona istotnym parametrem wpływajacym ˛ na wydajności każdego z protokołów. Celem zmierzenia złożoności czasowej protokołu 2PC i 3PC wyliczona została liczba obiegów wymiany komunikatów (ang. message exchange round) potrzebnych przez działajace ˛ serwery do podj˛ecia decyzji w najgorszym przypadku. Przez poj˛ecie obiegu rozumiemy maksymalny czas potrzebny komunikatowi na dotarcie do miejsca przeznaczenia [1]. W przeprowadzonych eksperymentach uwzgl˛edniono również czas potrzebny na przetworzenie komunikatów oraz czas pochłaniany przez dost˛ep do pami˛eci trwałej w celu zapisania, badź ˛ odczytania informacji zapisanych w plikach rekonstrukcji. Maksymalna liczba obiegów komunikatów (w protokole 2PC) potrzebna działajacym ˛ procesom do podj˛ecia decyzji wynosi trzy obiegi: (1) koordynator rozgłasza komunikat VOTE-REQs, (2) uczestnicy odpowiadaja˛ poprzez głosowanie, (3) koordynator rozgłasza decyzj˛e. Ma to miejsce podczas bezawaryjnego wykonania protokołu 2PC, w sytuacji, gdy transakcja globalna zostaje zatwierdzona. Poszczególne czasy opóźnienia dla protokołu 2PC przedstawiono w tabeli 1, gdzie: • tt – całkowity czas opóźnienia, na który jest suma˛ opóźnień spowodowanych przez obiegi, dost˛epy do pami˛eci trwałej oraz rozgłaszanie komunikatów: • tr – oznacza czas rozgłaszania komunikatu VOTE-REQs (1); 6 • tg – oznacza czas potrzebny na głosowanie (2). • td – czas potrzebny na rozgłoszenie decyzji (3). Tab. 1: Złożoność czasowa protokołu 2PC. n tr tg td tt 1 14 10 13 38 2 31 16 28 75 3 46 22 45 113 4 63 34 62 159 5 76 44 78 198 Złożoność czasowa protokołu 3PC w przypadku braku awarii sprowadza si˛e od co najwyżej pi˛eciu rund komunikatów: (1) rozgłoszenie VOTE-REQs, (2) dostarczenie głosów, (3) rozprowadzenie PRE-COMMITS, (4) potwierdzenie PRE-COMMIT, (5) rozprowadzenie COMMIT. Również ma to miejsce przy bezwaryjnym wykonaniu protokołu 3PC przy zatwierdzeniu transakcji globalnej. Poszczególne czasy opóźnienia dla protokołu 3PC przedstawiono w tabeli 2, gdzie: • tt – całkowity czas opóźnienia. • tr – oznacza czas rozgłaszania komunikatu VOTE-REQs (1); • tg – oznacza czas potrzebny na głosowanie (2). • t p – przeprowadzenie dodatkowej fazy pre-commit (3), (4). • td – czas potrzebny na rozgłoszenie decyzji (5). Tab. 2: Złożoność czasowa protokołu 3PC. n tr tg tp td tt 1 16 8 11 17 54 2 29 17 24 31 101 3 48 22 35 49 154 4 64 35 47 67 213 5 78 48 64 83 273 Porównujac ˛ wyniki eksperymentów z tabeli 1 z tabela˛ 2 łatwo wywnioskować, że każdy dodatkowy obieg komunikatów opóźnia proces zatwierdzania transakcji rozproszonej. W przypadku protokołu 3PC opóźnienie to jest spowodowane przez dwa dodatkowe obiegi komunikatów (3), (4). Im wi˛eksza liczba wezłów bioracych ˛ udział w transakcji, tym wi˛ekszy jest koszt wykonania dodatkowych obiegów komunikatów oraz dost˛epów do pami˛eci trwałej, co skutkuje znacznym opóźnieniem procesu przetwarzania transakcji. Dodatkowy czas musi zostać poświ˛econy na zapewnienie niepodzielności zatwierdzania transakcji rozproszonej. W przypadku protkołu 2PC czas ten waha si˛e od 38ms dla n = 1 do 198ms dla n = 5. Dla protokołu 3PC sa˛ to 54ms dla n = 1 do 273ms dla n = 5. Jak widać różnica w czasie opóźnienia spowodawanym przez protokół 3PC, w prównaniu z protokołem 2PC, zwi˛eksza si˛e wraz z liczba˛ uczestników. 7 6 Podsumowanie W pracy przedstawione wst˛epne wyniki porównania protokołu 2PC z 3PC. Przeprowadzone eksperymenty wykazały, że protokół 3PC powoduje wi˛eksze narzuty na wydajność przetwarzania transakcji rozproszonej niż protokół 2PC. W porównaniu z protokołem 2PC wymaga on wi˛ekszej liczby komunikatów do przeprowadzenia procesu zatwierdzania roszproszonego, która rośnie wraz z liczba˛ uczestników transakcji. Wraz ze wzrostem liczby komunikatów rośnie również czas potrzebny na ich rozsyłanie i przetworzenie. Nie należy również zapominać o czasie pochłanianym przez dost˛ep do informacji zapisanych w dziennikach transakcji w pami˛eci trwałej. Takie przymusowe dost˛epy w pami˛eci trwałej sa˛ dosyć czasochłonne. Koszty te moga˛ spowodować, że przetwarzanie zatwierdzania transakcji rozproszonej może przyczynić si˛e do wzrostu czasu przetwarzania całej transakcji. Ponieważ w protokołe 2PC liczba i złożoność komunikatów jest o mniejsza, jego wydajność jest wi˛eksza. Literatura [1] P.A. Bernstein, V. Hadzilacos, N. Goodman, Concurrency control and recovery in database systems, ADDISON-WESLEY PUBLISHING COMPANY, 1987. [2] L. Banachowski, K. Stencel, Bazy danych. Projektowanie aplikacji na serwerze, Wydawnictwo Exit , 2001. [3] G.Coulouris, J. Dollimore, T. Kindberg, Systemy rozproszone – podstawy i projektowanie, Wydawnictwo Naukowo–Techniczne, 1998. [4] H. Garcia-Molina, J.D. Ullman, J. Widom, Implementacja systemów baz danych, Wydawnictwo Naukowo–Techniczne, 2003. [5] R. Elmasri S.B. Navath, Wprowadzenie do systemów baz danych, Helion, 2005. [6] S. Allamaraju, Nuts and Bolts of Transaction Processing, 1999. [7] M. Stróżańki, Systemy rozproszone – Konsekwencje wyboru architektury systemu, 1999. [8] M. Wojciechowski, M. Zakrzewicz, Obsługa transakcji rozproszonych w j˛ezyku Java, 2003. [9] S. Frolund, S. R. Guerraoui, Exactly-Once Transactions, HP Software Technology Laboratory,1999. [10] R. Gupta, J. Harista, K. Ramamritham, Revisiting Commit Processing In Distributed Database Systems, University of Utah Mathematics Department Software, 1997. [11] Distributed Transaction Processing: The XA Specification, www.opengroup.org/, 1991. [12] JDBC Technology, http://java.sun.com/products/jdbc. 8