Systemy rozproszone W. Bartkiewicz Wykład 11. Transakcje

Slides:



Advertisements
Podobne prezentacje
Przetwarzanie transakcyjne
Advertisements

Związki w UML.
Podstawowe pojęcia programowania współbieżnego
Jarosław Kuchta Dokumentacja i Jakość Oprogramowania
Wykład nr 8: Zakleszczenia
Wykład 6 Najkrótsza ścieżka w grafie z jednym źródłem
Semafory Autorzy : Michał Winciorek Łukasz Jackowicz.
Zrównoleglanie programu sekwencyjnego
Wycofywanie potwierdzonych transakcji
Systemy operacyjne Wykład nr 4: Procesy Piotr Bilski.
Wykład 11 Prowadzący: dr Paweł Drozda
Wykład 10 Prowadzący: dr Paweł Drozda
Synchronizacja Rozdział 5.
Systemy operacyjne.
Wykład 3 Wojciech Pieprzyca
Zarządzanie transakcjami
Projektowanie i programowanie obiektowe II - Wykład IV
Wstęp do interpretacji algorytmów
ZARZĄDZANIE PROCESAMI
Problem rozbieżności czasów jednym z wielu problemów pojawiających się w systemach rozproszonych jest rozbieżność wartości zegarów na poszczególnych węzłach-maszynach.
Muteksy Muteksy (mutex – MUTual EXclusion) są prostymi obiektami synchronizacyjnymi pełniącymi rolę semaforów binarnych dla wątków (chroniącymi sekcje.
Semafory według normy POSIX
9. KOORDYNACJA PROCESÓW WSPÓŁBIEŻNYCH PRZY UŻYCIU INTERPRETATORA
Modele baz danych - spojrzenie na poziom fizyczny
Zarządzanie transakcjami Wykład S. Kozielski. Zarządzanie transakcjami Transakcja – jedna lub więcej operacji na bazie danych stanowiących pewną logiczną
TRANSAKCJE TYLKO ODCZYT TYLKO ZAPIS
SIEĆ P2P 1. Definicja sieci równouprawnionej. To taka sieć, która składa się z komputerów o takim samym priorytecie ważności, a każdy z nich może pełnić.
Inżynieria Oprogramowania
Podstawy programowania
Podstawy programowania II
Systemy Rozproszone Synchronizacja 2
Instrukcja USOS Rejestracja na zajęcia obieralne wersja by Marek Opacki.
Systemy operacyjne.
SYSTEMY OPERACYJNE I SIECI KOMPUTEROWE
Automatyka i Robotyka Systemy czasu rzeczywistego Wykład 4.
Prezentacja i szkolenie
Wykonywanie kopii bezpieczeństwa danych
Dziedziczenie Maciek Mięczakowski
Problem sekcji krytycznej
Koncepcja procesu Zadanie i proces. Definicja procesu Process – to program w trakcie wykonywania; wykonanie procesu musi przebiegać w sposób sekwencyjny.
POŚREDNIK Jak reprezentowana jest informacja w komputerze? liczby – komputer został wymyślony jako zaawansowane urządzenie służące do wykonywania.
Defragmentacja dysku Jednym z kluczowych czynników wydajności operacji wejścia/wyjścia jest poziom fragmentacji plików. Fragmentacja oznacza zapisywanie.
Wybrane zagadnienia relacyjnych baz danych
ZWIĄZKI MIĘDZY KLASAMI KLASY ABSTRAKCYJNE OGRANICZENIA INTERFEJSY SZABLONY safa Michał Telus.
dr Łukasz Murowaniecki T-109
Spis treści W świecie algortmów -Budowa algorytmu
Wykład 7 Synchronizacja procesów i wątków
W ą t e k (lekki proces) thread.
Bariery synchronizacyjne Bariery są obiektami synchronizacyjnymi pakietu pthread służącymi do wyrównywania czasów pracy wątków wykonujących wspólne zadanie.
Systemy rozproszone  Rozdzielenie obliczeń między wiele fizycznych procesorów.  Systemy luźno powiązane – każdy procesor ma lokalną pamięć; procesory.
(c) 1999, Instytut Informatyki Politechniki Poznańskiej Rozdział 1: Wprowadzenie do baz danych.
ALGORYTMY Co to jest algorytm ? Cechy algorytmu Budowa algorytmów
Diagram aktywności (czynności)
System plików.
1 Zarządzanie transakcjami Przygotował Lech Banachowski na podstawie: 1.Raghu Ramakrishnan, Johannes Gehrke, Database Management Systems, McGrawHill, 2000.
Slajd 1© J.Rumiński Jacek Rumiński  Bazy danych Kontakt: Katedra Inżynierii Biomedycznej, pk. 106, tel.: , fax: ,
Uprawnienia w Windows Server
Procesy, wątki Program a proces Proces: Przestrzeń adresowa, kod, dane, stos (część pamięci do przechowania zmiennych lokalnych i niektórych adresów) Otwarte.
Projektowanie obiektowe. Przykład: Punktem wyjścia w obiektowym tworzeniu systemu informacyjnego jest zawsze pewien model biznesowy. Przykład: Diagram.
STEROWANIE WSPÓŁBIEŻNOŚCIĄ Prowadzący: mgr inż. Leszek Siwik Autorzy: Andrzej Mazur Jacek Roman Michał Pawłowski.
Wstęp do interpretacji algorytmów
Model warstwowy ISO-OSI
Tryby adresowania i formaty rozkazów mikroprocesora
Wstęp do programowania Wykład 7
Algorytmy, sposoby ich zapisu.1 Algorytm to uporządkowany opis postępowania przy rozwiązywaniu problemu z uwzględnieniem opisu danych oraz opisu kolejnych.
Przetwarzanie transakcyjne. Wprowadzenie (1) Baza danych – jest abstrakcyjnym odzwierciedleniem wybranego fragmentu rzeczywistości (ang. miniworld) mini.
Komponentowe systemy rozproszone
Wątki, programowanie współbieżne
Projekt modułu BANK INTERNETOWY Moduł funkcji banku
Modele baz danych - spojrzenie na poziom fizyczny
Zapis prezentacji:

Systemy rozproszone W. Bartkiewicz Wykład 11. Transakcje Uniwersytet Łódzki Katedra Informatyki W. Bartkiewicz Systemy rozproszone Wykład 11. Transakcje

Współbieżność w systemach rozproszonych Katedra Informatyki Współbieżność w systemach rozproszonych Synchronizacja współbieżnych procesów w systemach rozproszonych stwarza szereg dodatkowych problemów. Najważniejsze z nich to: Problem czasu w aplikacji rozproszonej. Brak centralnej pamięci, dostępnej dla współbieżnych składników aplikacji, w której umieścić można mechanizmy synchronizacyjne. Czas w aplikacji rozproszonej: Co to znaczy, że dwa zdarzenia w aplikacji rozproszonej zachodzą współbieżnie? Kiedy możemy powiedzieć, że jedno zdarzenie poprzedza drugie? Brak centralnej pamięci: W dotychczas rozważanych zagadnieniach synchronizacyjnych istniała wspólna pamięć, dostępna dla wątków (procesów) aplikacji, w której znajdowały się mechanizmy synchronizacyjne. Zmienne globalne (wątki tego samego procesu), jądro systemu (wątki różnych procesów. Gdy procesy pracują na różnych maszynach, takiej pamięci nie ma. Synchronizacja musi odbywać się więc poprzez operacje komunikacyjne.

Pojęcie i własności transakcji Katedra Informatyki Z koncepcją wzajemnego wykluczania ściśle wiąże się pojęcie transakcji. Przez transakcję rozumiemy grupę operacji, które muszą być wykonane przez serwer wspólnie. Transakcja przelewu wymaga wypłaty z jednego konta i wpłaty na drugie konto. Transakcje pozwalają w prosty sposób grupować zadania i zapewniają wykonanie ich z odpowiednimi gwarancjami. Transakcja określa m.in. kolejność w jakiej wykonywane są operacje. Ważną cechą transakcji jest ochrona dzielonych zasobów przed jednoczesnym dostępem współbieżnych procesów. Dają one również możliwość wykonywania pewnych operacji w sposób niepodzielny, mimo że tak naprawdę może to być grupa wielu mniejszych operacji na różnych danych. Poza tym jeśli taka transakcja jest wycofywana z pewnych powodów, stan systemu może być przywrócony do momentu sprzed rozpoczęcia jej wykonywania.

Pojęcie i własności transakcji Katedra Informatyki Transakcje były wykorzystywane głównie do tej pory w systemach bazodanowych, jednakże coraz szerzej stosowane są w systemach operacyjnych (również rozproszonych). Wszystkie transakcje charakteryzuje zbiór pewnych podstawowych właściwości. Są nimi: niepodzielność lub atomowość (ang. atomicity), spójność (ang. consistency), izolacja (ang. isolation), trwałość (ang. durability). Zestaw tych czterech własności oznaczany jest skrótem ACID od pierwszych liter ich nazw.: Niepodzielność (Atomicity) – transakcja musi działać na zasadzie „wszystko albo nic”, a więc albo dobiega ona końca i jest realizowana w całości, albo nie jest ona realizowana w ogóle. Jest to przy tym jedna, niepodzielna operacja. W trakcie jej wykonywania inne procesy (wątki) nie mogą mieć wglądu w żaden z jej stanów pośrednich (niezależnie od tego, czy są one powiązane z transakcjami, czy nie). Transakcja ma charakter niepodzielny nawet w przypadku awarii serwera.

Pojęcie i własności transakcji Katedra Informatyki Spójność (Consistency) – transakcja przeprowadza system z jednego stanu spójnego w drugi. Jeśli w systemie istnieją pewne niezmienniki, które powinny być zawsze zachowane, to jeśli były spełnione przed transakcją, muszą być spełnione również i po niej. Naruszenia niezmienników, w sposób naturalny pojawiające się podczas realizacji transakcji, nie są widoczne na zewnątrz transakcji. Izolacja (Isolation) – Każda transakcja musi być wykonywana w sposób nie kolidujący z innymi transakcjami. Jeśli dwie lub więcej transakcji przebiega jednocześnie, to dla każdej z nich wynik końcowy jest taki, jakby wszystkie transakcje wykonywano po kolei, według pewnego (zależnego od systemu) porządku. Trwałość (Durability) – Cokolwiek by się działo po zatwierdzeniu transakcji, jej wyniki są nieodwołalne. Żadna awaria wydarzająca się po zatwierdzeniu nie może cofnąć wyników, ani spowodować ich utraty.

Organizacja usług transakcyjnych Katedra Informatyki Standardowy interfejs usług transakcyjnych obejmuje obok operacji merytorycznych, trzy podstawowe operacje organizujące transakcję: Otwórz transakcję – rozpoczyna nową transakcję i zwraca jednoznaczny identyfikator transakcji. Zamknij transakcję – kończy transakcję, próbując ją zatwierdzić lub zaniechać. Zaniechaj transakcji – powoduje zaniechanie transakcji. W normalnych warunkach usługi transakcyjne odnotowują początek każdej transakcji i wykonują zamówienia klienta aż do otrzymania żądania zamknięcia transakcji. Jeśli transakcja przebiegła normalnie, to serwer przesyła komunikat o tym, że transakcja została zatwierdzona (committed). Stanowi to dla klienta poręczenie, że wszystkie zmiany wymagane w transakcji zostały trwale zapisane i wszystkie przyszłe transakcje sięgające po te same dane będą miały do czynienia ze skutkami wszystkich zmian wykonanych podczas transakcji.

Organizacja usług transakcyjnych Katedra Informatyki Transakcja może też być także zaniechana (aborted) z powodów związanych z jej własną naturą, wskutek konfliktów z innymi transakcjami bądź z powodu awarii procesów lub sprzętu. W przypadku zaniechania transakcji usługi transakcyjne muszą zapewnić, że żadne jej skutki nie będą widoczne dla przyszłych transakcji – ani w obiektach danych, ani w ich kopiach w pamięci trwałej. Transakcja może zostać również zaniechana przez klienta, poprzez skierowanie do serwera żądania zaniechania transakcji.

Typy transakcji Katedra Informatyki Ciąg operacji o własnościach ACID nazywamy transakcją płaską (flat transaction). Jest to najprostszy i najczęściej wykorzystywany typ transakcji. Brak możliwości częściowego zatwierdzania lub wycofania wyników transakcji w przypadku, gdy np.: trzeba długo czekać na część wyników, część transakcji się nie powiodła, ale mimo wszystko chcemy zatwierdzić dotychczasowy częściowy wynik.

Typy transakcji Katedra Informatyki Czasami z charakteru transakcji oryginalnej wynika jej logiczny podział na szereg podtransakcji. Transakcję tego typu nazywamy transakcją zagnieżdżoną (nested transaction). Transakcje zagnieżdżone mogą tworzyć bardziej rozbudowane, kilkupoziomowe hierarchie. Transakcje zagnieżdżone przydatne są z dwu podstawowych powodów: Podtransakcje zagnieżdżone na jednym poziomie zazwyczaj mogą przebiegać współbieżnie z innymi transakcjami zagnieżdżonymi na tym samym poziomie hierarchii. Transakcje zagnieżdżone można zatwierdzać lub wycofywać niezależnie. Są one bardziej odporne, ponieważ zaniechanie podtransakcji niekoniecznie musi oznaczać zaniechania jej transakcji rodzicielskiej. Może ona zamiast tego podjąć pewne działania zastępcze. Zaniechanie transakcji rodzicielskiej jednakże zawsze oznacza konieczność zaniechania wszystkich podtransakcji, nawet jeśli zostały one już zakończone. Własność trwałości w przypadku transakcji zagnieżdżonej rozumiemy więc jako trwałość transakcji szczytowej.

Typy transakcji Katedra Informatyki W przypadku gdy transakcja działa na danych rozproszonych na różnych maszynach, mówimy o transakcji rozproszonej (distributed transaction). Transakcje zagnieżdżone niekoniecznie są transakcjami rozproszonymi. Dla uwypuklenia głównej różnicy: transakcje zagnieżdżone stosuje się ze względu na logikę ich pracy, natomiast transakcje rozproszone ze względu na rozproszenie danych, na których operują. Głównym problemem transakcji rozproszonych jest konieczność używania oddzielnych algorytmów do blokowania danych i zatwierdzania całej transakcji.

Implementacja transakcji Prywatna przestrzeń robocza Katedra Informatyki Dwie podstawowe metody implementacji transakcji: Prywatna przestrzeń robocza oraz rejestrowanie z wyprzedzeniem. Pierwsze podejście polega na stworzeniu w momencie uruchomienia transakcji, prywatnej przestrzeni roboczej, w której umieszcza się wszystkie dane, do których transakcja ma dostęp. W trakcie działania transakcja operuje więc tylko na swojej prywatnej przestrzeni, a nie bezpośrednio na oryginalnych danych. Nie ma potrzeby tworzenia kopii danych, które są tylko odczytywane przez transakcję. Można tu wykorzystać oryginalne dane. Transakcja kopiuje do swojej przestrzeni roboczej tylko tablicę odnośników do bloków potrzebnych plików z danymi. Podczas odczytu odczytywane są po prostu oryginalne dane. Przy zapisie tworzona jest kopia modyfikowanego bloku (tzw. cień bloku – ang. shadow block) do którego zapisywane są nowe dane. Po zatwierdzeniu transakcji odnośniki do zmodyfikowanych bloków zastępują oryginalne bloki.

Implementacja transakcji Prywatna przestrzeń robocza Katedra Informatyki Przykład realizacji transakcji w systemie plików. Na potrzeby transakcji zapamiętywane są w jej przestrzeni roboczej indeksy bloków pliku, na których działa. Gdy transakcja modyfikuje blok 1, zostaje on skopiowany i powstaje cień bloku, 1’. Dodatkowo transakcja dodała nowy blok, do którego indeks pamiętany jest w prywatnej przestrzeni adresowej do czasu zatwierdzenia transakcji.

Implementacja transakcji Rejestrowanie z wyprzedzeniem Katedra Informatyki Rejestrowanie z wyprzedzeniem (ang. writeahead log) jest metodą realizacji transakcji, która pozwala na modyfikowanie oryginalnych plików, z których korzysta transakcja. Zanim jednak następuje sama operacja zapisu, fakt ten odnotowywany jest w specjalnym rejestrze w postaci rekordu z informacjami o transakcji, modyfikowanym przez nią pliku i bloku oraz nową i starą wartością bloku. W momencie gdy transakcja zostaje zatwierdzona, do wspomnianego rejestru wpisywany jest tylko fakt samego zatwierdzania, gdyż dane zostały już wcześniej zaktualizowane. Kiedy jednak transakcja zostaje anulowana, przydatny okazuje się rejestr, który służy do przywrócenia stanu sprzed transakcji. Operacja przywracania polega w skrócie na odczytaniu od końca rekordów rejestru i wycofaniu (ang. rollback) zapisanych w nim zmian.

Implementacja transakcji Rejestrowanie z wyprzedzeniem Katedra Informatyki

Transakcje Współbieżność wykonywania Katedra Informatyki Serwer usług transakcyjnych musi synchronizować współbieżnie wykonywane operacje, w stopniu wystarczającym dla zapewnienia właściwości ACID transakcji. Oczywistym sposobem realizacji tego zadania jest sekwencyjne wykonywanie transakcji – jedna za drugą, po jednej w danej chwili, w pewnym dowolnym porządku. Rozwiązanie to jest jednak oczywiście nie do przyjęcia dla serwerów, których zasoby są interakcyjnie dzielone między wielu użytkowników. Celem każdego serwera usług transakcyjnych jest maksymalizacja stopnia współbieżności. Dlatego dozwala się na współbieżne wykonywanie operacji różnych transakcji, jeśli tylko ich skutki będą takie same jak wówczas, gdyby wykonywano je po kolei, tzn. tak by były one równoważne szeregowo (serially equivalent).

Transakcje Menedżer (zarządca) transakcji Katedra Informatyki Usługi transakcyjne realizowane są zazwyczaj w formie menedżera (zarządcy) transakcji (transaction manager). Menedżer transakcji zarządza całością transakcji, zapewniając jej niepodzielność trwałość, obsługując podtransakcje, itp. Rzeczywiste operacje na danych wykonywane są przez menedżera (zarządcę) danych (data manager). Wykonuje on elementarne operacje czytania i zapisu, nie wiedząc nic o transakcjach, które je inicjują. Za właściwe sterowanie współbieżnością odpowiada planista (scheduler). Zapewnia on izolację i spójność transakcji, planując operacje czytania i pisania, aby określić, która transakcja i kiedy może przekazać je menedżerowi danych. Planista obok typowych problemów wzajemnego wykluczania na pojedynczym obiekcie danych, takich jak konflikty pisanie-pisanie lub czytanie-pisanie musi rozwiązać szereg zagadnień powstających na poziomie całej transakcji. Menedżer transakcji Planista Menedżer danych Transakcje

Transakcje Problem utraconej aktualizacji Katedra Informatyki Stany kont: A=100, B=200, C=300 Transakcja T: Wypłata(A, 40) Wpłata(B, 40) Transakcja U: Wypłata(C, 50) Wpłata(B, 50) StanKonta1 = A.Czytaj() A.Pisz(StanKonta1 - 40) StanKonta1 = B.Czytaj() B.Pisz(StanKonta1 + 40) 100 60 200 240 StanKonta2 = C.Czytaj() C.Pisz(StanKonta2 - 50) StanKonta2 = B.Czytaj() B.Pisz(StanKonta2 + 50) 300 250 Problem utraconej aktualizacji pojawia się wtedy, gdy dwie transakcje aktualizujące odczytają starą wartość zmiennej, a następnie używają jej do obliczenia nowej wartości.

Transakcje Problem utraconej aktualizacji Katedra Informatyki Stany kont: A=100, B=200, C=300 Transakcja T: Wypłata(A, 40) Wpłata(B, 40) Transakcja U: Wypłata(C, 50) Wpłata(B, 50) StanKonta1 = A.Czytaj() A.Pisz(StanKonta1 - 40) StanKonta1 = B.Czytaj() B.Pisz(StanKonta1 + 40) 100 60 200 240 StanKonta2 = C.Czytaj() C.Pisz(StanKonta2 - 50) StanKonta2 = B.Czytaj() B.Pisz(StanKonta2 + 50) 300 250 290

Transakcje Problem niespójnego odzyskania Katedra Informatyki Stany kont: A=100, B=200, C=300 Transakcja T: Wypłata(A, 50) Wpłata(B, 50) Transakcja U: StanOddziału() StanKonta1 = A.Czytaj() A.Pisz(StanKonta1 - 50) StanKonta1 = B.Czytaj() B.Pisz(StanKonta1 + 50) 100 50 200 250 StanKonta2 = A.Czytaj() StanKonta2 += B.Czytaj() StanKonta2 += C.Czytaj() . . . 550 Problem niespójnych odzyskań może pojawić się wtedy, gdy transakcja odzyskująca działa współbieżnie z aktualizującą.

Transakcje Problem niespójnego odzyskania Katedra Informatyki Stany kont: A=100, B=200, C=300 Transakcja T: Wypłata(A, 50) Wpłata(B, 50) Transakcja U: StanOddziału() StanKonta1 = A.Czytaj() A.Pisz(StanKonta1 - 50) StanKonta1 = B.Czytaj() B.Pisz(StanKonta1 + 50) 100 50 200 250 StanKonta2 = A.Czytaj() StanKonta2 += B.Czytaj() StanKonta2 += C.Czytaj() . . . 550

Transakcje Współbieżność a rekonstruowalność Katedra Informatyki Plan transakcji równoważny szeregowo (szeregowalny) wymaga więc aby wszystkie dostępy transakcji do określonego obiektu danych były uporządkowane ze względu na dostępy innych transakcji. Wszystkie kolidujące pary działań dwu transakcji powinny być wykonywane w tym samym porządku. Dodatkowe problemy pojawiają się w związku z rekonstruowalnością transakcji. Usługi transakcyjne muszą zapamiętywać wyniki wszystkich zatwierdzonych transakcji i usuwać ślady wszystkich transakcji zaniechanych. Usługi transakcyjne muszą więc brać pod uwagę ewentualne zaniechania transakcji, zapobiegając ich oddziaływaniu na inne transakcje współbieżne.

Transakcje Problem zabrudzonego czytania Katedra Informatyki Stany kont: A=100, B=200, C=300 Transakcja T: Wypłata(A, 40) Wpłata(B, 40) Transakcja U: Wypłata(A, 50) StanKonta1 = A.Czytaj() A.Pisz(StanKonta1 - 40) StanKonta1 = B.Czytaj() B.Pisz(StanKonta1 + 40) 100 60 200 240 StanKonta2 = A.Czytaj() A.Pisz(StanKonta2 – 50) 10 Problem wynika z interakcji między operacją czytania jednej transakcji, a wcześniejszą operacją pisania innej transakcji, odnoszących się do tego samego obiektu danych. Mówimy, że transakcja taka wykonała zabrudzone czytanie (dirty read). Gdy dojdzie do wycofania wcześniejszej transakcji (T), transakcja realizowana później (U) wykonana zostanie nieprawidłowo.

Transakcje Problem zabrudzonego czytania Katedra Informatyki Stany kont: A=100, B=200, C=300 Transakcja T: Wypłata(A, 40) Wpłata(B, 40) Transakcja U: Wypłata(A, 50) StanKonta1 = A.Czytaj() A.Pisz(StanKonta1 - 40) StanKonta1 = B.Czytaj() B.Pisz(StanKonta1 + 40) 100 60 200 240 StanKonta2 = A.Czytaj() A.Pisz(StanKonta2 – 50) 10 Aby rozwiązać problem, każda transakcja, której grozi zabrudzone czytanie (w naszym przypadku U), jest wycofywana, z chwilą wycofania transakcji pierwszej (transakcja T). Jeśli transakcja U zakończyłaby się przed zakończeniem T, to opóźnia ona swoje zatwierdzenie (lub wycofanie), do chwili zatwierdzenia (lub wycofania) T.

Transakcje Problem zabrudzonego czytania Katedra Informatyki Generalnie jeśli jakieś transakcje korzystają z wyników działania innej transakcji, to w razie jej zaniechania muszą również zostać zaniechane. Z kolei ich zaniechanie może pociągać za sobą konieczność zaniechania coraz to dalszych transakcji. Sytuację taką nazywa się zaniechaniem kaskadowym (cascaded abort). Aby uniknąć zaniechań kaskadowych, transakcjom pozwala się na czytanie tylko takich obiektów danych, które zapisano za pomocą transakcji zatwierdzonych. Aby to zapewnić każda operacja czytania na obiekcie musi być opóźniana do czasu, gdy transakcje zapisujące ten sam obiekt zostaną zatwierdzone lub zaniechane.

Transakcje Problem przedwczesnego zapisu Katedra Informatyki Stan konta: A=100 Transakcja T: Ustaw(A, 300) Transakcja U: Ustaw(A, 200) A.Pisz(300) 300 A.Pisz(200) 200 Problem wynika z interakcji między operacjami pisania, odnoszącymi się do tego samego obiektu danych. Gdy dojdzie do wycofania wcześniejszej transakcji (T), po zatwierdzeniu transakcji realizowanej później (U) to przywrócony zostanie stan początkowy 100 sprzed obydwu transakcji. Aby zagwarantować poprawne wyniki, operacje pisania muszą zostać opóźnione aż do czasu zatwierdzenia lub zaniechania wcześniejszych transakcji aktualizujących te same obiekty danych.

Transakcje Współbieżność wykonywania Katedra Informatyki W praktyce stosuje się trzy podstawowe podejścia do sterowania współbieżnością: Blokowanie (locking). Każdy obiekt danych zostaje zablokowany (zajęty) przez pierwszą sięgającą po niego transakcję, wskutek czego żadna inna transakcja nie może z niego skorzystać, dopóty, dopóki pierwsza transakcja nie zostanie zatwierdzona lub zaniechana. Optymistyczne sterowanie współbieżnością. Pokłada się tu nadzieję, że nie wystąpią żadne konflikty w dostępie do danych. Jeśli dojdzie do konfliktu z innymi współbieżnymi transakcjami, to nastąpi zaniechanie transakcji i trzeba będzie powtórzyć ją od nowa. Sterowanie z wykorzystaniem znaczników czasu. W tym podejściu każda transakcja ma znacznik czasu, a obiekty danych otrzymują znaczniki czasu przy każdym kontakcie. Zaniechanie i wznowienie transakcji następuje w sytuacji, gdy jest ona spóźniona, aby wykonać operację na danym obiekcie.

Transakcje Blokowanie dwufazowe Katedra Informatyki Jedną z najpopularniejszych metod sterowania współbieżnością jest tzw. algorytm blokowania dwufazowego (ang. two-phase locking – 2PL) Algorytm blokowania dwufazowego składa się z dwóch faz: fazy wzrostu (ang. growing phase) oraz fazy zmniejszania (ang. shrinking phase). W pierwszej fazie transakcja może blokować zasoby, ale nie wolno jej zwalniać zasobów, które wcześniej już zablokowała. W drugiej fazie transakcja może zwalniać zasoby, lecz nie wolno jej blokować żadnych nowych zasobów. Jeżeli wszystkie transakcje działają według tego schematu, to plany utworzone na skutek ich przeplotu są uszeregowane. Wszystkie kolidujące pary operacji muszą być wykonywane w tym samym porządku, ponieważ transakcji nie pozwala się na zakładanie nowych blokad po zwolnieniu którejś z nich. Rozwiązuje to problem utraconych aktualizacji i niespójnych odzyskań.

Transakcje Blokowanie dwufazowe Katedra Informatyki Wraz z upływem czasu rośnie liczba założonych blokad. Gdy zostaną założone wszystkie blokady, następuje tzw. punkt blokady i może rozpocząć się przetwarzanie odpowiednich danych. Po zakończeniu operacji blokady są zwalniane, co ilustruje faza zmniejszania na wykresie.

Transakcje Ścisłe blokowanie dwufazowe Katedra Informatyki Ścisłe blokowanie dwufazowe (ang. strict two-phase locking) jest realizowane w systemach, gdzie faza zmniejszania nie występuje dopóki transakcja nie zostanie zakończona. Tak więc transakcja, która chce czytać lub zapisywać obiekt danych, musi będzie opóźniana do czasu aż inne transakcje, które zapisały ten sam obiekt danych zostaną zatwierdzone lub zaniechane. Atutem takiego rozwiązania jest to, że transakcja zawsze czyta wartości zapisane tylko przez zatwierdzone transakcje. Wartości czytane w transakcji są zawsze zapisane przez transakcję zatwierdzoną, dzięki czemu nie trzeba anulować transakcji z powodu wykorzystania w obliczeniach danej, której nie powinna oglądać. Rozwiązuje to problem zabrudzonych czytań i niespójnych odzyskań, bez konieczności występowania zaniechań kaskadowych.

Transakcje Zakładanie blokad Katedra Informatyki W praktyce serwery usług transakcyjnych nie stosują prostych blokad w trybie wyłączności (exclusive lock), ale blokady do czytania (read lock) oraz do pisania (write lock). Umożliwia to zwiększenie współbieżności poprzez współdzielone blokowanie (shared locking) do czytania. Reguły powstawania konfliktów są prostym rozszerzeniem charakteryzowanego wcześniej problemu czytelników-pisarzy. Jeśli na określony obiekt danych nie ma założonych żadnych blokad, transakcja może założyć zarówno blokadę do czytania jak i zapisu. Jeśli operację czytania określonego obiektu danych wykonała już pewna transakcja T, blokując go do czytania, to współbieżna transakcja U nie może zamówić blokady tego obiektu do pisania, dopóki transakcja T nie zostanie zatwierdzona lub anulowana. Transakcja U może natomiast założyć kolejna blokadę do czytania. Jeżeli transakcja T zablokowała obiekt danych do pisania, to żadna inna transakcja współbieżna U nie może otrzymać blokady zarówno do pisania jak i do czytania tego obiektu.

Transakcje Zakładanie blokad Katedra Informatyki Przez rozszerzanie blokady (lock promotion) rozumiemy zamianę jednej blokady na inna, silniejszą, tj. taką, która wymusza większe wykluczanie działań. Transakcja dzieląca blokadę do czytania z inną transakcją nie może jej rozszerzyć na blokadę do pisania. Taka transakcja musi po zamówieniu blokady do pisania poczekać aż inne transakcje pozwalniają obiekty zablokowane do czytania. Degradowanie blokady utrzymywanej w transakcji przed jej zatwierdzeniem (lub wejściem w fazę zmniejszania) w jest niebezpieczne z punktu widzenia szeregowalności, tak więc jest sprzeczne z zasadami protokołu dwufazowego blokowania.

Transakcje Blokady – zakleszczenia Katedra Informatyki Należy zwrócić uwagę na jeden istotny fakt, że algorytm blokowania dwufazowego nie uwalnia nas od problemu zakleszczenia, w wypadku gdy dwie transakcje ubiegają się o te same zasoby tylko w odwrotnej kolejności. Zakleszczenie transakcji jest stanem w którym każdy członek pewnej grupy transakcji oczekuje na zwolnienie zasobu zajmowanego (blokowanego) przez innego członka grupy. Zależności między blokowanymi transakcjami mogą mieć również charakter pośredni.

Transakcje Blokady – zakleszczenia Katedra Informatyki Można tutaj wykorzystać pewien z góry ustalony porządek przydzielania zasobów. Transakcja może np. z góry próbować założyć blokady na wszystkie niezbędne dla niej obiekty danych. Jeśli będzie to niemożliwe, zostaje wycofana. Transakcja taka nie może wejść w stan zakleszczenia z innymi transakcjami, lecz zbytecznie ogranicza dostęp do dzielonych zasobów. Ponadto nie zawsze możliwe jest określenie na początku transakcji, które obiekty danych będą w użyciu. Zakleszczeniom można zapobiegać poprzez strategie blokowania danych w innych określonych porządkach, ale niemal zawsze powoduje to przedwczesne zajmowanie zasobów i ograniczanie współbieżności.

Transakcje Blokady – zakleszczenia Katedra Informatyki Inna metodą jest tworzenie i przechowywanie grafu procesów, które posiadają blokady. Graf taki nazywamy grafem oczekiwania (wait-for graph). Wierzchołki grafu reprezentują transakcje (czy też raczej współbieżne wątki (procesy) realizujące transakcje). Krawędzie oznaczają relacje oczekiwania jednych transakcji na inne. Z zakleszczeniem mamy do czynienia, gdy w grafie występują cykle. Serwer może znajdując cykle w grafie, wykrywać zakleszczenia. Po wykryciu cyklu wybiera się transakcję do zaniechania, aby przerwać cykl. Wybór transakcji do zaniechania nie jest rzeczą prostą. Do czynników, które można wziąć pod uwagę należą wiek transakcji oraz liczba cykli w których występuje.

Transakcje Blokady – zakleszczenia Katedra Informatyki Jeszcze inne podejście bazuje, na znanym maksymalnym czasie przez jaki może być założona blokada, tak że po wykryciu blokady przez inny proces może on stwierdzić po pewnym czasie, że wystąpiło zakleszczenie. Limity czasu trwania blokady (lock timeouts) są powszechnie stosowaną metodą rozwiązywania problemu zakleszczeń. Transakcja której przerwano blokadę zazwyczaj zostaje zaniechana. Kilka problemów: Transakcje zostają niekiedy zaniechane wskutek uwrażliwienia się ich blokad, choć w rzeczywistości nie było żadnego zakleszczenia. Określenie właściwej długości limitu czasu może być bardzo trudne w przypadku transakcji długotrwałych, a zwłaszcza interaktywnych. Serwer nie może wybrać transakcji do zaniechania, tak więc nie może optymalizować tego procesu poprzez jednoczesne usunięcie wielu zakleszczeń.

Transakcje Pesymistyczne porządkowanie według znaczników czasu Katedra Informatyki Kolejny algorytm to pesymistyczne porządkowanie według znaczników czasu (ang. pessimistic timestamp ordering). Każda transakcja T jest opisywana znacznikiem czasowym t(T). K Każda zmienna x również opatrywana jest dwoma znacznikami czasowymi: znacznikiem czasu zapisu tz(x), znacznikiem czasu odczytu tc(x). Wartość tz(x) jest równa znacznikowi transakcji, która jako ostatnio pisała do zmiennej x, analogicznie jest z wartością tc(x), z tym że operacja dotyczy oczywiście odczytu. Algorytm wymaga, aby znaczniki czasu były unikalne. W tym celu można zastosować np. algorytm Lamporta. W wypadku wystąpienia konfliktu między operacjami, w pierwszej kolejności obsługiwana jest ta, która ma mniejszy znacznik czasowy.

Transakcje Pesymistyczne porządkowanie według znaczników czasu Katedra Informatyki Zobaczmy teraz co się dzieje w przypadku, kiedy planista otrzyma od transakcji T zlecenie na operację odczytu lub zapisu zmiennej x. Jeżeli transakcja zleca odczyt, planista porównuje wartości znacznika t transakcji z wartością tz(x). Jeżeli wystąpił zapis na zmiennej x w momencie, kiedy transakcja T była już wykonywana, czyli gdy t < tz(x), T musi zostać zaniechana. W przeciwnym wypadku T wykonuje operację, a wartość tc(x) zostaje ustawiona na max[t, tc(x)]. Podobna sytuacja występuje dla operacji zapisu. Po nadejściu zlecenia zapisu, porównujemy wartości t oraz tc(x). Jeśli t < tc(x), transakcja zostaje zaniechana, gdyż zmienna x została w tym przypadku odczytana po rozpoczęciu transakcji T. Gdy zachodzi natomiast sytuacja odwrotna operacja może być wykonana, a wartość tz(x) odpowiednio ustawiona na max[t, tz(x)].

Transakcje Pesymistyczne porządkowanie według znaczników czasu Katedra Informatyki Porównując ten algorytm do algorytmu blokowania dwufazowego, można zauważyć, że przeploty operacji, które są akceptowalne dla jednego algorytmu, niekoniecznie są akceptowalne dla drugiego i odwrotnie. Zaletą tego algorytmu jest to, że uwalnia nas od problemu zakleszczania. Rozważmy przykład trzech transakcji T0, T1 oraz T2. Dodatkowo zakładamy, że transakcja T0 wykonywała się jako pierwsza przed rozpoczęciem pozostałych transakcji i korzystała z wszystkich danych, na których operują transakcje T1 oraz T2. Oznacza to, że operacje zapisu i odczytu dla zmiennych są oznaczone na początku znacznikiem czasu transakcji T0. Ponadto niech t(T1) < t(T2), czyli transakcja T1 rozpoczęła się przed transakcją T2.

Transakcje Pesymistyczne porządkowanie według znaczników czasu Katedra Informatyki Na początku rozpatrzmy odczyt zmiennej x przez transakcję T1 dla scenariusza przedstawionego w przykładzie 1. Transakcja T0, która działała od dłuższego czasu wykonała zapis. Po tej operacji zapisu widzimy, że rozpoczęła się transakcja T1 i na tym kończy się sekwencja operacji. Nie występuje dalej żadna operacja zapisu na zmiennej x, która mogłaby powodować konflikt z operacją odczytu x. W związku z tym odczyt zmiennej x może być wykonany

Transakcje Pesymistyczne porządkowanie według znaczników czasu Katedra Informatyki Zajmijmy się teraz przykładem 2., gdzie transakcja T1 żąda zapisu zmiennej x. Są tu dwie kolejne operacje zapisu i odczytu x wykonane przez transakcję T0. Po nich rozpoczyna się transakcja T1, która chce następnie pisać do zmiennej x. Ponieważ transakcja T1 nie została jeszcze zatwierdzona, zapis wykonywany jest tymczasowo do momentu zatwierdzenia transakcji.

Transakcje Pesymistyczne porządkowanie według znaczników czasu Katedra Informatyki W ostatnim przykładzie: Transakcja T1 również żąda zapisu x, ale w trakcie jej trwania, a przed żądanym przez nią zapisem, wystąpił zapis wykonany przez inną transakcję T2. Transakcja T1 musi zostać zaniechana.

Transakcje Optymistyczne porządkowanie według znaczników czasu Katedra Informatyki Ostatni algorytm to optymistyczne porządkowanie według znaczników czasu (ang. optimistic timestamp ordering). Optymistyczne sterowanie współbieżnością transakcji jest kolejnym podejściem do jednoczesnego wykonywania kilku transakcji. Ogólna idea polega na tym, że transakcja jest wykonywana nawet w przypadku, kiedy występują konflikty. Ich rozwiązanie jest odkładane do czasu ewentualnego zatwierdzania. Jeżeli okaże się, że jakaś inna transakcja T1 zmieniła dane od czasu rozpoczęcia naszej transakcji T2, to T2 zostaje zaniechana. W przeciwnym razie T2 zostaje zatwierdzona. Zwróćmy uwagę, że wraz z zastosowaniem takiego podejścia do sterowania współbieżnością, można wykorzystać w transakcjach prywatną przestrzeń roboczą. W ten sposób każda transakcja może działać lokalnie bez przejmowania się innymi transakcjami. Brak zakleszczeń, gdyż transakcje w trakcie działania nie zajmują się konfliktami i działają dalej.

Transakcje Zatwierdzanie transakcji rozproszonych Katedra Informatyki Menedżer transakcji rozproszonych musi zarządzać ich wykonaniem na różnych serwerach. Niepodzielność transakcji wymaga zaniechania całości transakcji na wszystkich serwerach, w przypadku gdy choćby jeden z nich zakomunikuje o zaniechaniu swojej części transakcji. Wymaga to zastosowania tzw. dwufazowego protokołu zatwierdzenia transakcji rozproszonej (two-phase commitment protocol): W pierwszej fazie każdy serwer głosuje za zatwierdzeniem lub zaniechaniem transakcji. Z chwilą zagłosowania za zatwierdzeniem transakcji, serwer nie może już zaniechać swojej części, tak więc musi być pewny, że będzie w stanie wykonać swoje operacje, nawet jeśli w międzyczasie uległby awarii i podjął pracę od nowa. W drugiej fazie każdy serwer uczestniczący w transakcji realizuje wspólną decyzję. Jeśli którykolwiek z nich głosował za zaniechaniem, to wszystkie serwery zaniechają transakcji. Jeśli wszystkie serwery głosowały za zatwierdzeniem podejmowana jest decyzja o zatwierdzeniu całej transakcji.