Кіріспе
Таратылған алгоритм
Компьютерлік желілер мен деректер базаларында үш кезеңді міндеттеме протоколы (3PC) – бұл таратылған жүйедегі барлық түйіндерге транзакцияны орындауға келісуге мүмкіндік беретін таратылған алгоритм. Ол екі кезеңді міндеттеме протоколынан (2PC) гөрі қателерге төзімдірек жақсартылған нұсқасы болып табылады.
In computer networking and databases, the three phase commit protocol (3PC) is a distributed algorithm which lets all nodes in a distributed system agree to commit a transaction. It is a more failure resilient refinement of the two phase commit protocol (2PC).
Мотивация
Екі кезеңді келісім протоколы келісім кезеңінде үйлестірушінің және топ мүшесінің қатарынан істен шығуынан сенімді түрде қалпына келе алмайды. Егер тек үйлестіруші істен шықса және топ мүшелерінің ешқайсысы келісім туралы хабарлама алмаса, онда келісім болмағанын сенімді түрде тұжырымдауға болады. Алайда, егер үйлестіруші де, топ мүшесі де істен шықса, істен шыққан топ мүшесі бірінші болып хабарланған және шын мәнінде келісімді орындаған болуы мүмкін. Жаңа үйлестіруші таңдалған жағдайда да, ол барлық топ мүшелерінен келісім алғанша операцияны сенімді түрде жалғастыра алмайды, демек, барлық топ мүшелері жауап бергенше күтуге мәжбүр. Үш кезеңді келісім протоколы "келісімге дайын" күйін енгізу арқылы осы мәселені шешеді. Егер үйлестіруші preCommit хабарламаларын жібермей тұрып істен шықса, топ операция тоқтатылды дегенге бірауыздан келіседі. Үйлестіруші барлық топ мүшелері келісімге дайын екенін растағанға дейін doCommit хабарламасын жібермейді. Бұл кез келген топ мүшесінің барлық топ мүшелері шешімді білгенге дейін транзакцияны аяқтауы мүмкін емес етеді (екі кезеңді келісім протоколында шешілмейтін күдік тудырып, белгісіз күтуге себеп болатын жағдай).
Шешім
Жоғарыда сипатталған міндеттеме алды кезеңі жүйеге қатысушының, немесе координатордың және қатысушының екеуінің де міндеттеме кезеңінде сәтсіздікке ұшыраған жағдайда қалпына келтіруге көмектеседі. Екі фазалы міндеттеменің міндеттеме фазасында координатор сәтсіздікке ұшырағаннан кейін, қалпына келтіру координаторы басқаруды қабылдағанда, жаңа міндеттеме алды кезеңі келесідей тиімді болады: Қатысушылардан сауал салғанда, егер кейбір түйіндер міндеттеме фазасында екенін білдірсе, онда ол бұрынғы координатор құлаудан бұрын міндеттеме жасау туралы шешім қабылдады деп есептейді. Осылайша ол протоколды міндеттемеге жеткізе алады. Сол сияқты, егер қатысушы PrepareToCommit хабарын алмағанын айтса, жаңа координатор бұрынғы координатордың PrepareToCommit фазасын аяқтамай тұрып-ақ сәтсіздікке ұшырағанын болжай алады. Сондықтан ол ешбір қатысушы өзгерістерді міндеттемеге жібермегенін сенімді түрде болжай алады, демек транзакцияны қауіпсіз тоқтатуға болады.
Ұзартулар
Skeen-нің бастапқы үш фазалық келісім протоколын қолдану арқылы, кворум байланысқа түсіп, прогресске жете алмай қалуы мүмкін (бұл тікелей тоқтап қалу емес; егер желілік бөлініс шешілсе, жүйе әлі де ілгерілей береді). Кейдар және Долевтің E3PC протоколы Skeen-нің үш фазалық келісім протоколын жетілдіріп, осы мәселені кворумның әрқашан ілгерілеуіне мүмкіндік беретін тәсілмен шешеді.
Кемшіліктер
Үш фазалы коммит шектелген кешігуі және шектелген жауап уақыты бар түйіндерден тұратын желіні қарастырады; бірақ, шексіз желілік кешігуі мен процестердің тоқтауы бар нақты жүйелерде ол атомарлықты кепілдей алмайды. Протоколдың тағы бір кемшілігі – оны аяқтау үшін кем дегенде үш рет байланыс қажет, яғни кем дегенде үш рет саяхат уақыты (RTT) талап етіледі. Бұл әрбір транзакцияны аяқтау үшін тым ұзақ уақытты білдіруі мүмкін.