TGViewer
Женя Янченко Женя Янченко @jane_yanchenko · 5.51K subscribers
Post #130 2.51K
Двухфазный коммит (2 Phase Commit)

Продолжим разбирать девятую главу кабанчика? Сегодня кратко про двухфазный коммит.

Двухфазный коммит — это механизм, который используется для атомарной фиксации транзакций на нескольких узлах. Он гарантирует, что все узлы либо закоммитили транзакцию, либо откатили ее.
На картинке к посту изображена схема двухфазного коммита.

В 2PC используется новый компонент, которого нет в обычных одноузловых транзакциях: координатор (или менеджер транзакций).

🔽🔼Алгоритм двухфазного коммита:

1️⃣ Приложение запрашивает
у координатора ID распределенной транзакции.

2️⃣ Приложение выполняет нужные операции (чтение, запись) в нескольких узлах БД.

3️⃣ Когда приложение готово к фиксации, координатор отправляет каждому узлу запрос готовности коммита, помеченный глобальным ID транзакции. Это начало фазы 1.

4️⃣ Узлы-участники отвечают, готовы ли они коммитить транзакцию (да/нет). Координатор отслеживает ответ.

5️⃣ 🙂 Если все узлы-участники ответили «да», то координатор записывает решение в журнал и отправляет участникам запрос коммита. Это начало фазы 2.

☹️ Если один из участников ответил «нет», то в фазе 2 координатор отправляет всем узлам запрос на роллбэк.

6️⃣ Узлы-участники выполняют коммит или роллбэк.
‰
Клепманн пишет, что процесс двухфазного коммита похож на церемонию бракосочетания: регистратор сначала спрашивает отдельно невесту и жениха, хочет ли каждый из них вступить в брак, и обычно получает от обоих ответ «да». Получив подтверждения от обоих, он объявляет их мужем и женой: транзакция зафиксирована. Если же невеста или жених не скажет «да», то церемония прерывается.

☄️ Отказы в фазе 1 и 2

✅Если один из запросов готовности к коммиту не сработает или же его время истечет, то координатор прервет транзакцию.

✅Если не сработает один из запросов коммита или роллбэка транзакции, то координатор будет повторять их в течение неопределенного времени.

💥 Отказ координатора

Если сбой координатора случится перед отправкой запроса готовности, то участники могут отменить транзакцию.

Но как только участник получил запрос готовности и ответил «да», он больше не может отменить транз­акцию сам — ему нужно дождаться ответа координатора о том, была ли транзакция подтверждена или прервана. Если в этот момент координатор выйдет из строя или случится сбой в сети, то участнику остается только ждать.

Транзакция узла-участника в таком состоянии называется сомнительной или неопределенной.

В принципе, узлы-участники могли бы пообщаться между собой и прийти к какому-то соглашению, но это не является частью протокола 2PC.

Единственный способ, предусмотренный протоколом 2PC — ожидать восстановления координатора.

Поэтому координатор должен записывать свое решение о фиксации или отмене транзакции в журнал транзакций на диске, прежде чем отправлять соотвествующие запросы участникам. Когда координатор восстановится, он определит статус всех сомнительных транзакций, прочитав свой журнал.

Если координатор не реплицируется, а работает на одной машине, то он является точкой отказа всей системы.

🤔 На практике

Распределенные транзакции, особенно реализованные с двухфазным коммитом, имеют смешанную репутацию.
С одной стороны, таких гарантий атомарности трудно добиться другими средствами.
С другой стороны, они сильно замедляют работу.

Поэтому многие сервисы предпочитают обойтись без распределенных транзакций.

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

#кабанчик #сисдиз
  • ❤ 10
  • 👍 8
  • 🔥 2
More from @jane_yanchenko
  1. Sep 25, 2026В прошлой жизни, когда я была менеджером проектов, одним из первых мест работы у меня был…
  2. Sep 23, 2026Куда пропало обращение - развязка В прошлом посте у нас загадочно пропало обращение 58122.…
  3. Sep 23, 2026Куда пропало обращение Однажды от руководителя техподдержки пришло письмо, суть которого с…
  4. Sep 21, 2026🔗 Подборка постов про Кафку Как обещала на стриме, собрала посты про Кафку в удобное огла…
  5. Sep 21, 2026🎞 Готова запись стрима про Кафку: https://youtu.be/2aRKsD-MWDA Большое спасибо всем, кто…
  6. Sep 16, 2026Сегодня стрим по Кафке в 19:00 Планируем не в формате доклада, а в формате вопрос-ответ, ч…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →