Files
digital-garden/dev/fundamental/Two-Phase Commit.md
2025-01-17 15:29:17 +03:00

6.9 KiB
Raw Blame History

aliases, tags, date
aliases tags date
2PC
двухфазный-коммит
двухфазный коммит
maturity/🌱
2025-01-13

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

Преимущества двухфазного коммита

  • Гарантия согласованности. Все участники либо фиксируют изменения, либо откатываются к исходному состоянию.
  • Атомарная операция. Транзакция выполняется полностью или не выполняется вообще.

Недостатки двухфазного коммита

  • Производительность.
    • Протокол увеличивает задержки из-за необходимости согласования между участниками.
    • Блокировка ресурсов (например, записей в базе данных) может привести к снижению пропускной способности системы.
  • Риск блокировок (Blocking). Если координатор выходит из строя, участники могут остаться в подвешенном состоянии, ожидая дальнейших команд.
  • Сложность реализации. Настройка двухфазного коммита в распределённых системах требует глубокого понимания протокола и особенностей инфраструктуры.
  • Проблемы масштабирования. Протокол плохо работает в системах с большим количеством участников из-за увеличения числа сообщений и времени согласования.

Протокол состоит из двух этапов:

  • Фаза подготовки (Prepare Phase):
    • Координатор транзакции отправляет запрос всем участникам (например, базам данных или брокерам сообщений) с просьбой подготовиться к выполнению операции.
    • Участники проверяют возможность выполнения операции и сообщают координатору о своём статусе:
      • “Готов” (Vote Yes), если операция может быть выполнена.
      • “Не готов” (Vote No), если операция невозможна. Если хотя бы один участник возвращает “Не готов”, координатор инициирует откат транзакции.
  • Фаза фиксации (Commit Phase):
    • Если все участники подтвердили готовность, координатор отправляет команду зафиксировать изменения (Commit).
    • Участники фиксируют изменения и подтверждают выполнение операции.
    • Если хотя бы один участник не может выполнить фиксацию, координатор отправляет команду отката (Rollback) всем участникам.

Двухфазный коммит применим, если:

  • Критически важно обеспечить ../architecture/Согласованность данных.
  • Количество участников в транзакции относительно небольшое.
  • Высокая задержка или снижение производительности являются допустимыми.

Применение двухфазного коммита.

  • Банковские транзакции. Обеспечение согласованности при переводе средств между счетами.
  • Обновление нескольких баз данных. Когда данные в разных базах должны быть изменены синхронно.
  • Интеграция с брокерами сообщений. Обеспечение атомарности при отправке сообщений и обновлении базы данных.

Однако, в большинстве современных распределённых систем предпочитают альтернативные подходы из-за их большей гибкости и масштабируемости.

Альтернативы двухфазному коммиту


Мета информация

Область:: ../../meta/zero/00 Разработка Родитель:: Источник:: Создана:: 2025-01-13 Автор::

Дополнительные материалы

Дочерние заметки