Какие проблемы могут вызвать двухфазные коммиты?

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

например CQRS путешествие Глава 5:

во-вторых, мы пытаемся избежать двухфазных коммитов, потому что они всегда вызвать проблемы в долгосрочной перспективе.

или Реализация Доменного Дизайна на странице 563:

второй ReadRecorts () используется инфраструктурой для репликации события, чтобы опубликовать их без необходимости двухфазной фиксации ...

Я думал, что двухфазные коммиты реализованы для обеспечения согласованности между несколькими серверами баз данных.

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

1 ответов


самая большая проблема-масштабируемость из-за блокирующего характера протокола фиксации 2 фазы.

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

кроме того, как только сторона признала, что она готова совершить, она должна фактически иметь возможность совершить транзакцию впоследствии, даже если она разбилась между ними. Это требует checkpointing к хранению персистентности (даже когда транзакция откатывается после этого), а также, возможно, ограничивает пропускную способность.