Распределённые транзакции: двухфазный коммит и сага
Коротко: Когда действие затрагивает несколько баз данных или служб, нужны процедуры, при которых все подтверждают или все откатывают: двухфазный коммит (строгий, блокирующий) или сага (свободная, с компенсирующими действиями).
Подробнее: В 2PC координатор спрашивает всех участников, готовы ли они (prepare), а затем даёт команду на фиксацию (commit). Если координатор отказывает после фазы подготовки, участники блокируются. Сага разбивает действие на локальные транзакции; если шаг не удаётся, выполняются компенсации для предыдущих шагов.
Подробности
- 2PC: атомарно, но блокирует и медленно; блокировки…
См. также: шардирование и партиционирование, event sourcing и CQRS