Polski

Szczegółowe omówienie transakcji rozproszonych i protokołu dwufazowego zatwierdzania (2PC). Poznaj jego architekturę, zalety, wady i praktyczne zastosowania w systemach globalnych.

Transakcje rozproszone: Dogłębne spojrzenie na dwufazowe zatwierdzanie (2PC)

W coraz bardziej połączonym świecie aplikacje często muszą wchodzić w interakcje z danymi przechowywanymi w wielu niezależnych systemach. Rodzi to koncepcję transakcji rozproszonych, w których pojedyncza operacja logiczna wymaga wprowadzenia zmian w wielu bazach danych lub usługach. Zapewnienie spójności danych w takich scenariuszach jest kluczowe, a jednym z najbardziej znanych protokołów do osiągnięcia tego celu jest dwufazowe zatwierdzanie (2PC).

Czym jest transakcja rozproszona?

Transakcja rozproszona to seria operacji wykonywanych na wielu, geograficznie rozproszonych systemach, traktowana jako pojedyncza, atomowa jednostka. Oznacza to, że albo wszystkie operacje w ramach transakcji muszą zakończyć się sukcesem (zatwierdzenie), albo żadna nie powinna (wycofanie). Ta zasada „wszystko albo nic” zapewnia integralność danych w całym systemie rozproszonym.

Rozważ scenariusz, w którym klient w Tokio rezerwuje lot z Tokio do Londynu w jednym systemie linii lotniczych, a jednocześnie rezerwuje pokój hotelowy w Londynie w innym systemie rezerwacji hotelowych. Te dwie operacje (rezerwacja lotu i rezerwacja hotelu) powinny być traktowane jako pojedyncza transakcja. Jeśli rezerwacja lotu zakończy się sukcesem, ale rezerwacja hotelu się nie powiedzie, system powinien anulować rezerwację lotu, aby klient nie został w Londynie bez zakwaterowania. Takie skoordynowane działanie jest istotą transakcji rozproszonej.

Przedstawienie protokołu dwufazowego zatwierdzania (2PC)

Protokół dwufazowego zatwierdzania (2PC) to algorytm rozproszony zapewniający atomowość w wielu menedżerach zasobów (np. bazach danych). Obejmuje on centralnego koordynatora i wielu uczestników, z których każdy jest odpowiedzialny za zarządzanie określonym zasobem. Protokół działa w dwóch odrębnych fazach:

Faza 1: Faza przygotowania

W tej fazie koordynator inicjuje transakcję i prosi każdego uczestnika o przygotowanie się do zatwierdzenia lub wycofania transakcji. Zaangażowane kroki są następujące:

  1. Koordynator wysyła żądanie przygotowania: Koordynator wysyła komunikat „przygotuj” do wszystkich uczestników. Ten komunikat sygnalizuje, że koordynator jest gotowy do zatwierdzenia transakcji i prosi każdego uczestnika o przygotowanie się do tego.
  2. Uczestnicy przygotowują się i odpowiadają: Każdy uczestnik otrzymuje żądanie przygotowania i wykonuje następujące czynności:
    • Podejmuje niezbędne kroki, aby zapewnić, że może zatwierdzić lub wycofać transakcję (np. zapisuje logi ponownego wykonania/cofnięcia).
    • Odpowiada koordynatorowi „głosem”, wskazując albo „przygotowany do zatwierdzenia” (głos „tak”), albo „nie można zatwierdzić” (głos „nie”). Głos „nie” może być spowodowany ograniczeniami zasobów, błędami walidacji danych lub innymi problemami.

Kluczowe jest, aby uczestnicy gwarantowali, że mogą zatwierdzić lub wycofać zmiany po oddaniu głosu „tak”. Zazwyczaj wiąże się to z utrwaleniem zmian w pamięci trwałej (np. na dysku).

Faza 2: Faza zatwierdzania lub wycofywania

Ta faza jest inicjowana przez koordynatora na podstawie głosów otrzymanych od uczestników w fazie przygotowania. Istnieją dwa możliwe wyniki:

Wynik 1: Zatwierdzenie

Jeśli koordynator otrzyma głosy „tak” od wszystkich uczestników, przystępuje do zatwierdzenia transakcji.

  1. Koordynator wysyła żądanie zatwierdzenia: Koordynator wysyła komunikat „zatwierdź” do wszystkich uczestników.
  2. Uczestnicy zatwierdzają: Każdy uczestnik otrzymuje żądanie zatwierdzenia i trwale stosuje zmiany związane z transakcją do swojego zasobu.
  3. Uczestnicy potwierdzają: Każdy uczestnik wysyła komunikat potwierdzenia zwrotny do koordynatora, potwierdzając pomyślne wykonanie operacji zatwierdzenia.
  4. Koordynator kończy: Po otrzymaniu potwierdzeń od wszystkich uczestników, koordynator oznacza transakcję jako zakończoną.

Wynik 2: Wycofanie

Jeśli koordynator otrzyma choćby jeden głos „nie” od któregokolwiek z uczestników lub jeśli przekroczy czas oczekiwania na odpowiedź od uczestnika, decyduje o wycofaniu transakcji.

  1. Koordynator wysyła żądanie wycofania: Koordynator wysyła komunikat „wycofaj” do wszystkich uczestników.
  2. Uczestnicy wycofują: Każdy uczestnik otrzymuje żądanie wycofania i cofa wszelkie zmiany wprowadzone w ramach przygotowania do transakcji.
  3. Uczestnicy potwierdzają: Każdy uczestnik wysyła komunikat potwierdzenia zwrotny do koordynatora, potwierdzając pomyślne wykonanie operacji wycofania.
  4. Koordynator kończy: Po otrzymaniu potwierdzeń od wszystkich uczestników, koordynator oznacza transakcję jako zakończoną.

Ilustracyjny przykład: Przetwarzanie zamówień w e-commerce

Rozważ system e-commerce, w którym zamówienie obejmuje aktualizację bazy danych zapasów i przetwarzanie płatności za pośrednictwem oddzielnej bramki płatniczej. Są to dwa oddzielne systemy, które muszą uczestniczyć w transakcji rozproszonej.

  1. Faza przygotowania:
    • System e-commerce (koordynator) wysyła żądanie przygotowania do bazy danych zapasów i bramki płatniczej.
    • Baza danych zapasów sprawdza, czy zamówione produkty są w magazynie i rezerwuje je. Następnie głosuje „tak”, jeśli się powiedzie, lub „nie”, jeśli produktów brakuje.
    • Bramka płatnicza wstępnie autoryzuje płatność. Następnie głosuje „tak”, jeśli się powiedzie, lub „nie”, jeśli autoryzacja się nie powiedzie (np. z powodu niewystarczających środków).
  2. Faza zatwierdzania/wycofywania:
    • Scenariusz zatwierdzenia: Jeśli zarówno baza danych zapasów, jak i bramka płatnicza zagłosują „tak”, koordynator wysyła do obu żądanie zatwierdzenia. Baza danych zapasów trwale zmniejsza stan magazynowy, a bramka płatnicza pobiera płatność.
    • Scenariusz wycofania: Jeśli baza danych zapasów lub bramka płatnicza zagłosuje „nie”, koordynator wysyła do obu żądanie wycofania. Baza danych zapasów zwalnia zarezerwowane produkty, a bramka płatnicza unieważnia wstępną autoryzację.

Zalety dwufazowego zatwierdzania

Wady dwufazowego zatwierdzania

Alternatywy dla dwufazowego zatwierdzania

Ze względu na ograniczenia 2PC, pojawiło się kilka alternatywnych podejść do zarządzania transakcjami rozproszonymi. Obejmują one:

Praktyczne zastosowania dwufazowego zatwierdzania

Pomimo swoich ograniczeń, 2PC jest nadal stosowane w różnych scenariuszach, gdzie silna spójność jest kluczowym wymogiem. Niektóre przykłady obejmują:

Implementacja dwufazowego zatwierdzania

Implementacja 2PC wymaga starannego rozważenia różnych czynników, w tym:

Globalne aspekty transakcji rozproszonych

Przy projektowaniu i wdrażaniu transakcji rozproszonych w środowisku globalnym należy wziąć pod uwagę kilka dodatkowych czynników:

Wniosek

Transakcje rozproszone i protokół dwufazowego zatwierdzania (2PC) są kluczowymi koncepcjami przy budowaniu solidnych i spójnych systemów rozproszonych. Chociaż 2PC stanowi proste i szeroko stosowane rozwiązanie zapewniające atomowość, jego ograniczenia, szczególnie w zakresie blokowania i pojedynczego punktu awarii, wymagają starannego rozważenia alternatywnych podejść, takich jak Sagi i ostateczna spójność. Zrozumienie kompromisów między silną spójnością, dostępnością i wydajnością jest kluczowe przy wyborze odpowiedniego podejścia do potrzeb konkretnej aplikacji. Ponadto, podczas działania w środowisku globalnym, dodatkowe kwestie dotyczące opóźnień sieciowych, stref czasowych, lokalizacji danych i zgodności z przepisami muszą zostać uwzględnione, aby zapewnić sukces transakcji rozproszonych.

Transakcje rozproszone: Dogłębne spojrzenie na dwufazowe zatwierdzanie (2PC) | MLOG