Back to questions
Middle — Middle+
52
Можете объяснить принцип работы и использование паттерна двухфазной фиксации (2PC)?
Answer from AI
sobes.tech AI
Паттерн двухфазной фиксации (Two-Phase Commit, 2PC) — это протокол, используемый для обеспечения атомарности распределённых транзакций, когда несколько ресурсов (например, базы данных) должны согласованно подтвердить изменения.
Принцип работы:
-
Фаза подготовки (prepare phase):
- Координатор транзакции отправляет всем участникам запрос подготовиться к фиксации (commit).
- Каждый участник проверяет, может ли он выполнить транзакцию, и отвечает "готов" или "не готов".
-
Фаза фиксации (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 широко применяется в распределённых системах для обеспечения целостности данных, но имеет недостатки, например, блокировку ресурсов при сбоях.