Systemy rozproszone Synchronizacja

Slides:



Advertisements
Podobne prezentacje
Bazy danych II Transakcje Piotr Górczyński 25/08/2001.
Advertisements

Przetwarzanie transakcyjne
Wprowadzenie do informatyki Wykład 6
Podstawowe pojęcia programowania współbieżnego
Mechanizmy pracy równoległej
Jarosław Kuchta Dokumentacja i Jakość Oprogramowania
Wykład nr 8: Zakleszczenia
Synchronizacja w systemach rozproszonych
SYSTEMY OPERACYJNE WSTĘP
Systemy rozproszone W. Bartkiewicz Wykład 11. Transakcje
Semafory Autorzy : Michał Winciorek Łukasz Jackowicz.
PROGRAMOWANIE STRUKTURALNE
PRZERZUTNIKI W aktualnie produkowanych przerzutnikach scalonych TTL wyróżnia się dwa podstawowe rodzaje wejść informacyjnych: - wejścia asynchroniczne,
zarządzanie produkcją
ZŁOŻONOŚĆ OBLICZENIOWA
Turbo pascal – instrukcje warunkowe, iteracyjne,…
Systemy operacyjne Copyright, 2000 © Jerzy R. Nawrocki Wprowadzenie do informatyki.
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.
Domeny kolizyjne i rozgłoszeniowe
Wykład 3 Wojciech Pieprzyca
Odkrywanie wzorców sekwencji
Zadanie 1.
Zarządzanie transakcjami
Rozproszone bazy danych
Projektowanie i programowanie obiektowe II - Wykład IV
Wstęp do interpretacji algorytmów
Wybrane protokoły aplikacyjne TCP/IP
Dr Anna Kwiatkowska Instytut Informatyki
ZARZĄDZANIE PROCESAMI
Programowanie współbieżne i rozproszone
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.
Modele baz danych - spojrzenie na poziom fizyczny
Algorytmy Marek Pudełko
Diagramy czynności.
Zarządzanie transakcjami Wykład S. Kozielski. Zarządzanie transakcjami Transakcja – jedna lub więcej operacji na bazie danych stanowiących pewną logiczną
Budowa algorytmów Algorytm: skończony ciąg operacji wraz z ściśle sprecyzowanym porządkowaniem ich wykonywania, które po realizacji dają rozwiązanie dowolnego.
Systemy Rozproszone Synchronizacja 2
Zasada działania komputera
1 Wykład 8 Podprogramy. 2 Pojęcie i istota stosowania dzielenie programu na części (logicznie spójne) - nazwane - niezależne od pozostałych części - z.
Automatyka i Robotyka Systemy czasu rzeczywistego Wykład 4.
Architektura komputerów
Problem sekcji krytycznej
Elżbieta Fiedziukiewicz
Model relacyjny.
SW – Algorytmy sterowania
Badanie kwartalne BO 2.3 SPO RZL Wybrane wyniki porównawcze edycji I- VII Badanie kwartalne Beneficjentów Ostatecznych Działania 2.3 SPO RZL – schemat.
dr Łukasz Murowaniecki T-109
Wykład 7 Synchronizacja procesów i wątków
W ą t e k (lekki proces) thread.
Zadanie 1.
Systemy operacyjne i sieci komputerowe
Systemy rozproszone  Rozdzielenie obliczeń między wiele fizycznych procesorów.  Systemy luźno powiązane – każdy procesor ma lokalną pamięć; procesory.
Algorytmika.
(c) 1999, Instytut Informatyki Politechniki Poznańskiej Rozdział 1: Wprowadzenie do baz danych.
Diagram aktywności (czynności)
Procesor, pamięć, przerwania, WE/WY, …
Slajd 1© J.Rumiński Jacek Rumiński  Bazy danych Kontakt: Katedra Inżynierii Biomedycznej, pk. 106, tel.: , fax: ,
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.
Wstęp do interpretacji algorytmów
Wstęp do programowania Wykład 7
Zarządzanie projektami
ASP.NET Dostęp do bazy danych z poziomu kodu Elżbieta Mrówka-Matejewska.
Przetwarzanie transakcyjne. Wprowadzenie (1) Baza danych – jest abstrakcyjnym odzwierciedleniem wybranego fragmentu rzeczywistości (ang. miniworld) mini.
Zarządzanie projektami
POJĘCIE ALGORYTMU Wstęp do informatyki Pojęcie algorytmu
Modele baz danych - spojrzenie na poziom fizyczny
Zapis prezentacji:

Systemy rozproszone Synchronizacja Synchronizacja zegarów Zegary logiczne Stan globalny Algorytmy elekcji Wzajemne wykluczanie

Synchronizacja zegarów Synchronizacja – ustalenie kolejności czasowej dla zbioru zdarzeń wygenerowanych przez współbieżne procesy. Gdy każda maszyna ma swój zegar, zdarzenie które wystąpiło po innym zdarzeniu może tym nie mniej mieć wcześniejszy znacznik czasowy

Zegary zegar, rejestry skojarzone z kryształem: licznik podtrzymujący rejestr, przerwanie wygenerowane gdy licznik dociera do 0, każde przerwanie nazywane jednym tyknięciem zegara, nie sposób zapewnić żeby dwa kryształy pracowały na tej samej częstotliwości, po wyjściu z synchronizacji, różnica wartości zegarów nazywana jest odchyleniem wskazań zegara (clock skew)

Średni dzień słoneczny Obliczenie średniego dnia słonecznego – okres obracania się ziemi nie jest stały.

Zegary fizyczne (1) Górowanie – moment gdy Słońce osiąga najwyższy punkt na nieboskłonie. Dzień słoneczny – odcinek czasu między dwoma kolejnymi górowaniami słońca. Sekunda słoneczna – 1/86400 część dnia słonecznego. Średnia sekunda słoneczna (300 mln lat temu rok miał ok. 400 dni)

Zegary fizyczne (2) Czasami potrzebujemy dokładny czas, a nie tylko uporządkowanie. Rozwiązanie : Universal Coordinated Time (UTC): na podstawie liczby przejść w ciągu sekundy w atomie cezu 133 (bardzo dokładne). w chwili obecnej, czas rzeczywisty jest przyjmowany jako średnia z około 50 cezowych-zegarów na całym świecie. wprowadza od czasu do czasu przestępną sekundę w celu poprawienia sytuacji że dni są coraz dłuższe. NIST zarządza krótkofalową stacją radiową o literach wywoławczych WWV z Fort Collins w Kolorado (krótki impuls na początku każdej sekundy UTC). UTC jest nadawany przez krótkie fale i satelity. Satelity mogą działać z dokładnością do ± 0,5 ms. Czy to rozwiąże wszystkie nasze problemy? Don't we now have some global timing mechanism? Czy nie mamy jakiegoś globalnego mechanizmu zegarowego? Ten typ mechanizmu pozostaje zbyt gruboziarnistym uporządkowania każdego zdarzenia.

Zegary fizyczne (3) Sekundy TAI mają stałą długość, w odróżnieniu od sekund słonecznych. Sekundy przestępne wprowadzane tylko wtedy, kiedy potrzebujemy się zsynchronizować z czasem słonecznym. TAI – Międzynarodowy czas atomowy (Temps Atomique International) 86400 sekund TAI są o ok. 3 ms krótsze od średniego dnia słonecznego, UTC – TAI z sekundami przestępnymi kiedy różnica między czasem TAI i czasem słonecznym wzrośnie do 800 ms.

Zegary fizyczne (4) Problem: Załóżmy, że mamy rozproszony system z UTC odbiornikiem gdzieś wewnątrz systemu, mamy zatem upowszechnić czas na każdy komputer. Podstawowa zasada: każda maszyna ma czasomierz, który generuje przerwanie H razy na sekundę. w maszynie p jest zegar tykający przy każdym przerwaniu czasomierza. Oznaczmy wartość tego zegara przez Cp (t), gdzie t jest czasem UTC. idealnie, mamy, że dla każdej maszyny p, Cp (t) = t, lub, innymi słowy, dC / dt = 1 Idealnie: dC / dt = 1 W praktyce: 1 -   dC / dt  1 +  w celu ochrony przed różnicą większą niż   jednostek czasu => zsynchronizować co najmniej raz na  / (2 ) sekund.

Algorytmy synchronizacji zegarów Relacja między czasem zegarowym i UTC gdy zegary chodzą w różnym tempie

Zasady synchronizacji zegarów Zasada I: Każda maszyna wysyła do serwera czasu pytanie o aktualny czas nie częściej niż co  / (2 ) sekund. jest potrzebna dokładna miara czasu obrócenia się komunikatu, włącznie z przetwarzaniem przerwania i nadchodzących komunikatów. Zasada II: Załóżmy, że serwer czasu może skanować okresowo wszystkie maszyny, obliczać średnią, oraz informować każdą maszynę jak należy dostroić czas adjust względem jej czasu bieżącego. jest prawdopodobne, że każda maszyna zostanie zsynchronizowana Fundamentalny problem: czas nie może płynąć wstecz, stąd zmiany trzeba wprowadzać stopniowo

Algorytmy synchronizacji zegarów Algorytm Cristian’a Algorytm Berkeley Algorytmy uśredniania

Uzyskiwanie aktualnego czasu od serwera czasu Algorytm Cristian‘a Uzyskiwanie aktualnego czasu od serwera czasu (T1 – T0) / 2 komunikaty z różnicą T1 – T0 powyżej progu są odrzucane jako ofiary obciążenia sieci, komunikat który wraca najszybciej ma najbardziej dokładny czas.

Algorytm Berkeley Demon czasu odpytuje wszystkie pozostałe maszyny nt. ich czasu Maszyny wysyłają odpowiedź Demon czasu instruuje wszystkie maszyny jak dostroić zegary

Algorytmy uśredniania dotychczasowe metody bardzo scentralizowane, zdecentralizowane algorytmy: dividing time into fixed-length resynchronization intervals podział czasu na odstępy o ustalonej długości resynchronizacji, T0 + (i + 1)R, gdzie R jest parametrem systemu, maszyny rozgłaszają swój aktualny czas, zgodnie z ich zegarami, inna opcja: poprawianie każdej wiadomości, uwzględniając czas propagacji od źródła, Internet: Network Time Protocol (NTP), dokładność w zakresie 1-50 ms.

Logical Clocks często, wystarczy, że wszystkie maszyny zgadzają się na ten sam czas, liczy się wewnętrzna spójność, a nie, czy są one bliskie czasowi rzeczywistemu, co więcej liczy się nie czy wszystkie procesy są zgodne co do aktualnego czasu, tylko raczej czy jest zgoda odnośnie porządku występowania zdarzeń, algorytm Lamporta, który synchronizuje zegary logiczne, rozszerzenie podejścia Lamporta, o nazwie znaczniki wektorowe

The Happened-Before Relationship Po pierwsze musimy wprowadzić pojęcie uporządkowania zanim zaczniemy porządkować. Relacja happened-before na zbiorze zdarzeń w systemie rozproszonym jest najmniejszą relacją spełniającą: jeśli a i b są dwoma zdarzeniami w tym samym procesie, i a występuje przed b, to a -> b. jeśli a wysyła komunikat, a b odbiera tenże komunikat, to a -> b. jeśli a -> b i b -> c, to a -> c. tym samym wprowadza się częściowe uporządkowania zdarzeń w systemie ze współbieżnymi procesami. zdarzenia współbieżne – nic nie można powiedzieć kiedy zdarzenia wystąpiły lub które zdarzenie wystąpiło jako pierwsze.

Zegary logiczne (1) Problem: Jak zapewnić globalne spojrzenie na zachowanie systemu, które jest zgodne z relacją happened-before? Rozwiązanie: dołączyć znacznik czasowy C(e) do każdego zdarzenia e, które spełniają następujące właściwości: P1: Jeśli A i B są dwa zdarzenia w tym samym procesie, a -> b, to żądamy, aby C (a) <C (b). P2: If a odpowiada wysłaniu komunikatu m, a b odbiorowi tegoż komunikatu, to też C(a) < C(b). Jak dołączyć znacznik czasu do zdarzenia, gdy nie ma globalnego zegara => zapewnić spójny zestawu logicznych zegarów, jeden na każdy proces.

Zegary logiczne (2) Każdy proces Pi utrzymuje lokalny licznik Ci i dostosowuje ten licznik zgodnie z następującymi zasadami : Dla dowolnych dwóch kolejnych zdarzeń, które odbywają się w ramach Pi , Ci jest zwiększany o 1. Za każdym razem, kiedy wiadomość m jest wysyłana przez proces Pi , wiadomość otrzymuje znacznik czasowy Tm = Ci . Gdy wiadomość m została odebrana przez proces Pj , Pj dostosowuje swój lokalny licznik Cj : Cj <- max{ Cj + 1, Tm + 1 }. własność P1 spełniona przez 1., własność P2 spełniona przez 2. i 3.

Zegary logiczne (3) Przykład algorytmu Lamporta

Globalne uporządkowanie z zegarami logicznymi Problem: może się zdarzyć że dwa zdarzenia zajdą w tym samym czasie. W tej sytuacji przydatne jest dołączenie numeru procesu do zdarzenia: Pi oznacza zdarzenie e przy pomocy Ci(e).i Wtedy: Ci(a).i wystąpiło przed Cj(b).j wtedy i tylko wtedy jeśli: Ci(a) < Cj(b) lub Ci(a) = Cj(b) oraz i < j

Przykład: Globalnie uporządkowane rozgłaszanie Aktualizacja zreplikowanej BD i pozostawienie jej w niespójnym stanie sytuacja ta wymaga całkowicie uporządkowanego rozgłaszania - do zrealizowania ze znacznikami czasowymi Lamporta, każda wiadomość zawiera zawsze znacznik czasowy z bieżącym czasem logicznym nadawcy, odebrana wiadomość umieszczona do lokalnej kolejki, uporządkowanej wg znaczników czasowych, odbiorca wysyła potwierdzenia do reszty, proces może dostarczyć zakolejkowane wiadomości do aplikacji która się wykonuje tylko wówczas, gdy wiadomość jest na czele kolejki i została potwierdzona przez każdy inny proces.

Znaczniki wektorowe (1) Uwaga: znaczniki czasu Lamporta nie gwarantują, że jeśli C (a) <C (b), że a rzeczywiście wydarzyło się przed b. Musimy użyć do tego znaczniki wektorowe. każdy proces Pi ma tablicę Vi[1..n], gdzie Vi[j] oznacza liczbę zdarzeń, o których proces Pi wie że miały miejsce w procesie Pj, gdy Pi wysyła komunikat m, dodaje 1 do Vi[i], i wysyła Vi wraz z m jako znacznik wektorowy vt(m). Po dotarciu każdy inny proces, zna znacznik czasowy Pi. znacznik czasowy vt w m mówi odbiorcy jak wiele zdarzeń w innych procesach poprzedzały m, i od których m może przyczynowo zależeć.

Znaczniki wektorowe (2) gdy proces Pj odbiera m od Pi z vt(m): uaktualnia Vj [k] do max{ Vj[k], V(m)[k] }, powiększa Vj [j] o 1. żeby zapewnić przyczynowo spójne dostarczenie komunikatów, zakładamy że assume nasza składowa powiększa się tylko podczas wysłania komunikatu. Wtedy, Pj odkłada dostarczenie m póki: vt(m)[i] = Vj[i] + 1. vt(m)[k]  Vj[k] for k i. Przykład: Bierzemy V3 = [0, 2, 2], vt(m) = [1, 3, 0]. Jaką informację ma P3 , i co zrobi przy odbiorze m (od P1)?

Stan globalny (1) Idea : Czasami chcemy zebrać aktualny stan obliczeń rozproszonych, zwany rozproszonym zdjęciem. Składa się z wszystkich stanów i lokalnych wiadomości przebywających w drodze. Rozproszone zdjęcia powinny odzwierciedlać spójny stan systemu.

Stan globalny (2) założenie: zbiór procesów związanych ze sobą poprzez jednokierunkowe kanały komunikacji punkt-punkt, każdy proces P może zainicjować rozproszone zdjęcie, P rozpoczyna nagrywanie własnego stanu lokalnego, P następnie wysyła znacznik wzdłuż każdego z wychodzących kanałów, gdy Q otrzyma znacznik przez kanał C, jego działanie zależy od tego, czy już odnotował swój stan lokalny : jeszcze nie zarejestrowane: zapisuje stan lokalny i wysyła znacznik każdym z wychodzących kanałów, już zarejestrowane: znacznik na C oznacza, że stan kanału należy zapisać: wszystkie wiadomości otrzymane od czasu gdy Q rejestrował własny stan, a przed tym, jak znacznik będzie rejestrowany jako stan kanału, Q jest skończony, kiedy otrzyma wskaźnik na każdym z kanałów wejściowych.

Organizacja procesu i kanałów dla rozproszonego zdjęcia Stan globalny (3) Organizacja procesu i kanałów dla rozproszonego zdjęcia

Stan globalny (4) Proces Q odbiera znacznik po raz pierwszy i rejestruje swój stan lokalny Q rejestruje wszystkie wchodzące wiadomości Q odbiera znacznik dla kanału wchodzącego i kończy rejestrację stanu wchodzącego kanału

Algorytmy elekcji Zasada: Algorytm wymaga, żeby jakiś proces działał jako koordynator. Powstaje pytanie, jak wybrać ten specjalny proces dynamicznie. w wielu systemach koordynator wybrany ręcznie (np. serwery plików). Prowadzi to do scentralizowanego rozwiązania => pojedynczego punktu awarii. jeśli koordynator wybierany jest dynamicznie, w jakim zakresie możemy mówić o rozwiązaniu scentralizowanym lub rozproszonym? Posiadanie centralnego koordynatora nie koniecznie powoduje, że algorytm jest nierozproszony jest w pełni rozproszone rozwiązanie, tzn. taki co bez koordynatora, czy zawsze bardziej niezawodny niż rozwiązanie scentralizowane lub skoordynowane? W pełni rozproszone rozwiązania niekoniecznie są lepsze (myślimy o odporności na uszkodzenia) Przykłady algorytmów : Algorytm tyrana, Algorytm pierścieniowy. :

Algorytm tyrana (1) Zasada: Każdy proces ma skojarzony priorytet (wagę). Proces z najwyższym priorytetem powinien być zawsze wybierany na koordynatora. Pytanie: Jak znaleźć najcięższy proces? każdy proces może rozpocząć wybory, wysyłając wiadomość o wyborach do wszystkich innych procesów (zakładając, że nie znamy wag itp.). jeśli proces Pheavy dostaje komunikat o wyborach od lżejszego procesu Plight, wysyła komunikat take-over to Plight. Plight odpada z wyścigu. jeśli proces Pheavy nie dostaje komunikatu o wyborach z powrotem, to wygrywa, i wysyła komunikat o zwycięstwie do pozostałych procesów

Algorytm tyrana (2) Algorytm wyborów tyrana Proces 4 rozpoczyna elekcję Procesy 5 i 6 odpowiadają mu „stop” Teraz 5 and 6 kontynuują elekcję

Algorytm tyrana (3) Proces 6 każe jej zaprzestać procesowi 5 Proces 6 powiadamia wszystkie procesy o swoim zwycięstwie

Algorytm pierścieniowy (1) Zasada: priorytet procesu uzyskuje się poprzez organizowanie procesów w (logiczny) pierścień. Proces o najwyższym priorytecie powinien zostać wybrany na koordynatora. każdy proces może rozpocząć wybory, wysyłając wiadomość o wyborach do swojego następcy. Jeżeli następca jest nieczynny, wiadomość zostanie przekazana do kolejnego następcy. jeśli wiadomość jest przekazana, nadawca dodaje siebie do listy. Gdyż lista wraca do inicjatora, każdy ma szansę, zaznaczyć swoją obecność. inicjator wysyła koordynatorowi przez pierścień komunikat zawierający listę wszystkich procesów żywych. Ten z najwyższym priorytetem jest wybrany na koordynatora.

Algorytm pierścieniowy (2) Algorytm wyborów z użyciem pierścienia

Wzajemne wykluczanie Problem: Szereg procesów w systemie rozproszonym domaga się wyłącznego dostępu do jakiegoś zasobu. Podstawowe rozwiązania: scentralizowany serwer, w pełni rozproszone, bez wyraźnej topologii, w pełni rozproszone, z użyciem (logicznego) pierścienia.

Wzajemne wykluczanie : algorytm scentralizowany Proces 1 prosi koordynatora o pozwolenie na wejście do obszaru krytycznego. Udziela się zgody Proces 2 pyta o pozwolenie na wejście do tego samego obszaru krytycznego. Koordynator nie odpowiada. Kiedy proces 1 opuszcza obszar krytyczny, to informuje o tym koordynatora, a tamten odpowiada 2

Wzajemne wykluczanie : Algorytm rozproszony (1) Algorytm Ricarta & Agrawali Ten sam co Lamporta z tą róznicą że potwierdzenia nie są wysyłane. Zamiast tego, odpowiedzi (tj. pozwolenia) udzielane są tylko wtedy kiedy: Proces-odbiorca nie jest zainteresowany w zasobie dzielonym lub Proces-odbiorca czeka na dzielony zasób, ale ma niższy priorytet (wynikający np. z porównania znaczników czasowych). w pozostałych przypadkach, udzielenie odpowiedzi jest odkładane, a są wykonywane jakieś lokalne działania.

Wzajemne wykluczanie : Algorytm rozproszony (2) Dwa procesy chcą wejść do tego samego obszaru krytycznego w tym samym momencie. Proces 0 ma najniższy znacznik czasowy, więc wygrywa. Kiedy proces 0 zrobił swoje, to wysyła również OK, więc 2 może teraz wejść do obszaru krytycznego.

Wzajemne wykluczanie : Algorytm Token Ring organize processes in a logical ring, and let a token be passed between them. Procesy organizuje się w logiczny pierścień, między nimi może być przekazywany żeton (token). Ten, który ma żeton, może wejść do obszaru krytycznego (jeżeli ma takie życzenie). Nieuporządkowana grupa procesów w sieci. Pierścień logiczny zorganizowany programowo.

Wzajemne wykluczanie : porównanie Algorithm # Komunikatów na wejście/wyjście Opóźnienie przed wejściem (mierzone liczbą komunikatów) Problemy Scentralizowany 3 2 Awaria koordynatora Rozproszony 2 ( n – 1 ) Awaria dowolnego procesu Token ring 1 to  0 to n – 1 Utrata żetonu, awaria procesu Porównanie trzech algorytmów wzajemnego wykluczania

Rozproszone transakcje Model transakcji Właściwości ACID Klasyfikacja transakcji płaskie transakcje, zagnieżdżone transakcje, rozproszone transakcje. Sterowanie współbieżnością serializowalność, techniki synchronizacji blokowanie dwu-fazowe, pesymistyczne porządkowanie wg znaczników czasowych, optymistyczne porządkowanie wg znaczników czasowych.

Aktualizowanie taśmy głównej toleruje awarie Model transakcji (1) Aktualizowanie taśmy głównej toleruje awarie

Przykłady operacji dla transakcji Model transakcji (2) Przykłady operacji dla transakcji Operacja Opis BEGIN_TRANSACTION Zaznaczenie początku transakcji END_TRANSACTION Zakończenie transakcji i próba jej zatwierdzenia ABORT_TRANSACTION Likwidacja transakcji, odtworzenie starych wartości READ Czytanie danych z pliku, tabeli, lub inaczej WRITE Zapisywanie danych do pliku, tabeli, lub inaczej

Model transakcji (3) Transakcja potwierdzonych rezerwacji trzech lotów BEGIN_TRANSACTION reserve WP -> JFK; reserve JFK -> Nairobi; reserve Nairobi -> Malindi; END_TRANSACTION (a) BEGIN_TRANSACTION reserve WP -> JFK; reserve JFK -> Nairobi; reserve Nairobi -> Malindi full => ABORT_TRANSACTION (b) Transakcja potwierdzonych rezerwacji trzech lotów Transakcja zaniechana wskutek niemożności zarezerwowania trzeciego lotu

Właściwości ACID Model: Transakcja - zbiór operacji na stanie obiektu (baza danych, złożony obiekt, itd), które spełnia następujące właściwości: Niepodzielność (Atomicity): Wszystkie operacje albo się udają, albo żadna z nich. Jeżeli transakcja się nie powiedzie, stan obiektu pozostanie bez wpływu ze strony transakcji. Spójność (Consistency): Transakcja realizuje ważne przejście stanu. Nie wyklucza to możliwości nieważnych, przejściowych stanów w trakcie realizacji transakcji. Izolacja (Isolation): Współbieżne transakcje nie koliduje ze sobą. Każdej transakcji T wydaje się, że inne transakcje występują albo przed T, albo po T, ale nigdy oba. Trwałość (Durability): Po realizacji transakcji, jej skutki są stałe: zmiany stanu przetrwają awarie.

Klasyfikacja transakcji Płaskie transakcje: Najbardziej znany typ: sekwencja operacji która spełnia właściwości ACID. Transakcje zagnieżdżone: Hierarchia transakcji, która pozwala (1) współbieżnie przetwarzać pod-transakcje, oraz (2) odtworzenie w ramach pod-transakcji. Rozproszone transakcje: (Płaska) transakcja wykonywana na rozproszonych danych => często implementowana jako dwupoziomowa zagnieżdżona transakcja z jedną pod-transakcją przypadającą na węzeł.

Płaskie transakcje - ograniczenia nie pozwalają na zatwierdzenie lub zaniechanie częściowych wyników, mocna strana właściwości niepodzielności płaskiej transakcji jest jednocześnie jej słabą stroną, rozwiązanie: użycie zagnieżdżonych transakcji, trudne scenariusze: pod-transakcja zatwierdzona ale nadrzędna transakcja zaniechana, jeśli pod-transakcja wnioskuje zatwierdzenie i rozpoczęła się nowa pod-transakcja, to druga powinna mieć wyniki pierwszej pod-transakcji.

Rozproszone transakcje zagnieżdżona transakcja logicznie jest dekomponowana na hierarchię pod-transakcji, rozproszona transakcja logicznie płaska, niepodzielna transakcja która operuje na rozproszonych danych. Osobne rozproszone algorytmy potrzebne do: zarządzania blokowaniem danych, zatwierdzania całej transakcji.

Implementacja transakcji Prywatna przestrzeń robocza użycie prywatnej przestrzeni roboczej, za której pośrednictwem klient dostaje własną kopię (części) bazy danych. Kiedy coś jest nie tak kopia jest likwidowana, w przeciwnym wypadku zatwierdza się zmiany w oryginale, optimalizacja poprzez nie pozyskiwanie wszystkiego. Rejestrowanie z wyprzedzeniem (writeahead log) mechanizm w którym zapisywane zmiany umożliwiają wycofanie (roll back) gdy coś dzieje się nie tak.

Implementacja transakcji: Prywatna przestrzeń robocza Indeks i bloki dyskowe trzy-blokowego pliku Sytuacja po zmodyfikowaniu przez transakcję bloku 0 i dodaniu bloku 3 Stan po zatwierdzeniu

Implementacja transakcji : rejestracja z wyprzedzeniem x = 0; y = 0; BEGIN_TRANSACTION; x = x + 1; y = y + 2 x = y * y; END_TRANSACTION; (a) Rejestr [x = 0 / 1] (b) [y = 0/2] (c) [x = 1/4] (d) a) Transakcja b) – d) Rejestr przed wykonaniem każdej instrukcji

Sterowanie współbieżnością (1) Organizacja zarządców obsługi transakcji

Sterowanie współbieżnością (2) Organizacja zarządców obsługi rozproszonych transakcji.

Serializowalność (1) a) – c) Trzy transakcje T1, T2, i T3 BEGIN_TRANSACTION x = 0; x = x + 1; END_TRANSACTION (a) BEGIN_TRANSACTION x = 0; x = x + 2; END_TRANSACTION (b) BEGIN_TRANSACTION x = 0; x = x + 3; END_TRANSACTION (c) Plan 1 x = 0; x = x + 1; x = 0; x = x + 2; x = 0; x = x + 3 Dopuszczalny Plan 2 x = 0; x = 0; x = x + 1; x = x + 2; x = 0; x = x + 3; Plan 3 x = 0; x = 0; x = x + 1; x = 0; x = x + 2; x = x + 3; Niedozwolony (d) a) – c) Trzy transakcje T1, T2, i T3 d) Możliwe plany

Serializowalność (2) Rozważmy zbiór E transakcji T1, ..., Tn. Celem jest przeprowadzenie serializowalnego wykonania E: transakcje w E są wykonywane ewentualnie współbieżnie zgodnie z jakimś planem S. plan S jest ekwiwalentem jakiegoś w pełni uporządkowanego wykonania T1, ..., Tn. Ponieważ nie wchodzimy w szczegóły obliczeń w ramach transakcji, transakcję można zamodelować jako zarejestrowane operacje read i write. Dwie operacje OPER( Ti, x) i OPER( Tj, x) mogą działać na tym samym elemencie danych x, i na poziomie zarządcy danych na podstawie zbioru rekordów można wywnioskować konflikt(y): konflikt read-write (rw): jedna operacja to read, a druga to write na x, Konflikt write-write (ww): obie operacje to write na x.

Techniki synchronizacji Dwufazowy zamek Przed czytaniem lub zapisem elementu danych, musi być uzyskany zamek. Po oddaniu zamka, transakcja nie może uzyskać innych żadnych zamków. Uporządkowanie wg znaczników czasowych Operacje w transakcji są wyposażone w znaczniki czasu, zarządcy danych są zmuszeni do obsługi operacji w kolejności znaczników czasowych. Optimistyczne sterowanie Don't prevent things from going wrong, but correct the situation if conflicts actually did happen. Basic assumption: you can pull it off in most cases. Nie wtrącamy się, jak coś jest nie tak, ale naprawiamy sytuację, jeżeli konflikty faktycznie miały miejsce. Podstawowe założenie: można odkładać synchronizację w większości przypadków.

Dwufazowe blokowanie (1) klienci wykonują w ramach transakcji tylko operacje READ i WRITE, zamki są przydzielane i zwalniane tylko przez planistę, celem polityki blokowania jest jest unikanie konfliktów między operacjami. gdy klient żąda wykonania OPER(Ti,x), planista sprawdza czy nie zachodzi konflikt z operacją OPER(Tj,x) od jakiegoś innego klienta. Jeśli konflikt nie grozi, to jest udzielany LOCK(Ti,x), w przeciwnym wypadku odkładamy wykonywanie OPER(Ti,x). konfliktujące operacje są wykonywane w tej samej kolejności w jakiej są udzielane zamki. jeśki LOCK(Ti,x) został udzielony, nie oddajemy zamka póki OPER(Ti,x) nie zostanie wykonana przez zarządcę danych. jeśli RELEASE(Ti,x) miało miejsce, Ti nie dostanie więcej zamków.

Dwufazowe blokowanie (2)

Dwufazowe blokowanie (3) Scentralizowane 2PL: Jedno stanowisko zarządza wszystkimi blokadami, 2PL z kopią podstawową: Dla każdej danej określamy jej kopię podstawową do obsługi jej zamków. Dane niekonieczne są replikowane, Rozproszone 2PL: Zakładamy że dane mogą być repikowane. Planiści dbają nie tylko o nakładanie i zdejmowanie zamków,, ale też o przekazywanie operacji lokalnym zarządcom danych. Problemy możliwe zakleszczenie - kolejność żądań, wykrywanie zakleszczeń, schemat timeout’u , kaskadowe zaniechania - ścisłe dwufazowe blokowanie.

Dwufazowe blokowanie (4) Ścisłe dwufazowe blokowanie

Pesymistyczne porządkowanie wg znaczników czasu (1) każda transakcja T posiada znacznik czasowy ts(T), znaczniki czasowe są unikatowe (algorytm Lamport‘a), każda operacja, stanowi część T, ze znacznikiem czasowym ts(T), każda dana x ma znacznik czasowy tsRD(x) operacji read oraz znacznik czasowy tsWR(x) operacji write jeśli operacje wchodzą w konflikt, zarządca danych przetwarza operację z najmniejszym znacznikiem czasowym, w porównaniu z blokowaniem: zaniechania są możliwe ale zakleszczenia są wyeliminowane. Przykład: a. – d. – T2 probuje zapisać daną, e. – f. – T2 próbuje odczytać daną.

Pesymistyczne porządkowanie wg znaczników czasu (2) Concurrency control using timestamps

Optymistyczne porządkowanie wg znaczników czasu konflikty są stosunkowo rzadkie, idziemy do przodu z realizacją działań, konflikty rozwiążemy później, rejestrujemy które elementy danych były czytane i zapisywane (prywatne obszary robocze, kopie), sprawdamy możliwe konflikty w momencie zatwierdzania, brak zakleszczeń przy maksymalnej równoległości, w warunkach dużego obciążenia, prawdopodobieństwo awarii (i zaniechania) znacznie wzrasta, głównie w systemach nierozproszonych, rzadko stosowane w systemach komercyjnych lub prototypowych.