Protokół zatwierdzania trójfazowego
W sieciach komputerowych i bazach danych protokół zatwierdzania trójfazowego ( 3PC ) jest rozproszonym algorytmem , który pozwala wszystkim węzłom w systemie rozproszonym zgodzić się na zatwierdzenie transakcji . Jest to bardziej odporne na awarie udoskonalenie protokołu zatwierdzania dwufazowego (2PC).
Motywacja
Protokół zatwierdzenia dwufazowego nie może niezawodnie odzyskać sprawności po awarii zarówno koordynatora, jak i członka kohorty podczas fazy zatwierdzenia . Gdyby tylko koordynator zawiódł i żaden członek kohorty nie otrzymał wiadomości o zatwierdzeniu, można by bezpiecznie wywnioskować, że żadne zatwierdzenie nie miało miejsca. Jeśli jednak zarówno koordynator, jak i członek kohorty zawiedli, możliwe jest, że członek kohorty, który przegrał, został powiadomiony jako pierwszy i faktycznie dokonał zatwierdzenia. Nawet jeśli zostanie wybrany nowy koordynator, nie może on bezpiecznie kontynuować operacji, dopóki nie otrzyma zgody wszystkich członków kohorty, a zatem musi blokować, dopóki wszyscy członkowie kohorty nie odpowiedzą.
Protokół zatwierdzania trójfazowego eliminuje ten problem, wprowadzając stan Przygotowano do zatwierdzenia. Jeśli koordynator zawiedzie przed wysłaniem komunikatów preCommit, kohorta jednogłośnie zgodzi się, że operacja została przerwana. Koordynator nie wyśle komunikatu doCommit, dopóki wszyscy członkowie kohorty nie potwierdzą , że są gotowi do zatwierdzenia . Eliminuje to możliwość, że którykolwiek członek kohorty faktycznie sfinalizował transakcję, zanim wszyscy członkowie kohorty byli świadomi decyzji, aby to zrobić (niejednoznaczność, która wymagała nieokreślonego blokowania w protokole zatwierdzania dwufazowego ) .
Rozwiązanie
Wprowadzona powyżej faza przed zatwierdzeniem pomaga systemowi odzyskać siły, gdy uczestnik lub zarówno koordynator, jak i uczestnik zawiedli podczas fazy zatwierdzenia. Gdy koordynator odzyskiwania przejmuje kontrolę po awarii koordynatora podczas fazy zatwierdzania dwufazowego zatwierdzania , nowy pre-commit jest przydatny w następujący sposób: podczas wysyłania zapytań do uczestników, jeśli dowie się, że niektóre węzły są w fazie zatwierdzania, zakłada, że poprzedni koordynator przed awarią podjął decyzję o zatwierdzeniu. W związku z tym może kierować protokołem do zatwierdzenia. Podobnie, jeśli uczestnik powie, że nie otrzymał komunikatu PrepareToCommit, nowy koordynator może założyć, że poprzedni koordynator zawiódł, nawet zanim zakończył fazę PreparationToCommit. W związku z tym można bezpiecznie założyć, że żaden uczestnik nie dokonał zmian, a tym samym bezpiecznie przerwać transakcję.
Rozszerzenia
Korzystając z oryginalnego protokołu zatwierdzania trójfazowego firmy Skeen, możliwe jest, że kworum zostanie połączone bez możliwości poczynienia postępów (nie jest to sytuacja zakleszczenia; system będzie nadal postępował, jeśli partycjonowanie sieci zostanie rozwiązane). E3PC Keidara i Doleva udoskonala protokół zatwierdzania trójfazowego Skeena i rozwiązuje ten problem w sposób, który *zawsze* umożliwia postęp kworum.
Niedogodności
Zatwierdzanie trójfazowe zakłada sieć z ograniczonym opóźnieniem i węzły z ograniczonym czasem odpowiedzi; W większości praktycznych systemów z nieograniczonymi opóźnieniami sieci i przerwami w procesach nie może to zagwarantować atomowości. Inną wadą protokołu jest to, że wymaga co najmniej trzech podróży w obie strony, co wymaga co najmniej trzech czasów podróży w obie strony (RTT). Jest to potencjalnie duże opóźnienie w realizacji każdej transakcji.