Sobes.tech
Back to questions
Middle — Middle+
52

Можете объяснить принцип работы и использование паттерна двухфазной фиксации (2PC)?

Answer from AI

sobes.tech AI

Паттерн двухфазной фиксации (Two-Phase Commit, 2PC) — это протокол, используемый для обеспечения атомарности распределённых транзакций, когда несколько ресурсов (например, базы данных) должны согласованно подтвердить изменения.

Принцип работы:

  1. Фаза подготовки (prepare phase):

    • Координатор транзакции отправляет всем участникам запрос подготовиться к фиксации (commit).
    • Каждый участник проверяет, может ли он выполнить транзакцию, и отвечает "готов" или "не готов".
  2. Фаза фиксации (commit phase):

    • Если все участники ответили "готов", координатор отправляет команду зафиксировать изменения (commit).
    • Если хотя бы один ответил "не готов", координатор отправляет команду откатить изменения (rollback).

Это гарантирует, что либо все участники зафиксируют изменения, либо никто не сделает этого, обеспечивая согласованность данных.

Пример упрощенной реализации на Python:

class Participant:
    def prepare(self):
        # Проверяем возможность фиксации
        return True  # или False
    def commit(self):
        print("Коммит выполнен")
    def rollback(self):
        print("Откат выполнен")

class Coordinator:
    def __init__(self, participants):
        self.participants = participants
    def two_phase_commit(self):
        if all(p.prepare() for p in self.participants):
            for p in self.participants:
                p.commit()
            print("Транзакция успешно зафиксирована")
        else:
            for p in self.participants:
                p.rollback()
            print("Транзакция откатена")

# Использование
participants = [Participant(), Participant()]
coord = Coordinator(participants)
coord.two_phase_commit()

2PC широко применяется в распределённых системах для обеспечения целостности данных, но имеет недостатки, например, блокировку ресурсов при сбоях.