Паттерн 2PC (двухфазная фиксация)
2PC (Two-Phase Commit) – протокол для гарантии атомарности распределенных транзакций
Цель: все участники либо фиксируют изменения, либо откатывают их как единое целое, даже при сбоях.
Это критично для согласованности данных в распределенных системах.
- Атомарность – "Всё или ничего". Либо выполняются все операции транзакции, либо ни одна
Принцип работы: протокол выполняется в две фазы под управлением центрального Координатора.
Роли участников
-
Координатор (Coordinator): управляет процессом, принимает решение
- Цен тральный управляющий компонент
- Инициирует протокол 2PC
- Принимает решение (Commit/Abort) на основе голосования ресурсов
- Отвечает за уведомление ресурсов о решении и управление восстановлением при сбоях
Примеры:
- Транзакционные менеджеры (Atomikos, Narayana)
- СУБД-координатор (PostgreSQL XA, Oracle XA)
- Системные оркестраторы (Tuxedo, IBM CICS)
-
Ресурсы (Участники): выполняют локальные операции, голосуют
- Системы или сервисы, управляющие данными (например, БД)
- Выполняют локальную работу транзакции ("до" коммита)
- Голосуют "Да" (готов к коммиту) или "Нет" (не готов) на фазе Prepare
- Выполняют финальную команду (Commit/Abort) от координатора
Примеры:
- Базы данных (Oracle, MySQL, PostgreSQL)
- Очереди сообщений (IBM MQ, Apache ActiveMQ)
- Legacy-системы (банковские мейнфреймы, ERP SAP)
- Стандарт XA: для взаимодействия координатора и ресурсов в 2PC. Определяет API для prepare, commit, rollback