Вопрос проверяет понимание распределённых транзакций и протокола двухфазной фиксации, что важно для обеспечения согласованности данных в микросервисной архитектуре.
Two-Phase Commit (2PC) — это распределённый протокол, который обеспечивает атомарность транзакций, затрагивающих несколько узлов или сервисов. Он гарантирует, что все участники транзакции либо успешно зафиксируют изменения, либо полностью откатят их, сохраняя согласованность данных.
Протокол состоит из двух фаз:
class Coordinator:
def two_phase_commit(self, participants):
# Фаза 1: голосование
for p in participants:
if not p.prepare():
self.abort(participants)
return False
# Фаза 2: фиксация
for p in participants:
p.commit()
return True
def abort(self, participants):
for p in participants:
p.rollback()Two-Phase Commit полезен в системах, где критична строгая согласованность данных, например, в финансовых транзакциях. Однако из-за блокировок и уязвимости к отказам его не рекомендуется использовать в высоконагруженных микросервисных архитектурах — там лучше применять саги или компенсирующие транзакции.