Какие проблемы могут вызвать двухфазные фиксации?
Недавно я несколько раз читал, что двухфазные коммиты плохие, но всегда в качестве дополнительной информации. Так что хорошего объяснения никогда не было.
Например, в главе 5 CQRS Journey:
Во-вторых, мы стараемся избегать двухфазных коммитов, потому что они всегда вызывают проблемы в долгосрочной перспективе.
Или в разделе Реализация доменного дизайна на странице 563:
Второй ReadRecorts() используется инфраструктурой для репликации событий, для их публикации без необходимости двухфазной фиксации, ...
Я думал, что для обеспечения согласованности между несколькими серверами баз данных реализованы двухфазные коммиты.
Какие проблемы могут возникнуть при использовании двухфазных коммитов? Почему их лучше избегать?
1 ответ
Самая большая проблема - это масштабируемость из-за характера блокировки протокола двухфазной фиксации.
2PC требует тщательной координации между участвующими сторонами: в частности, каждая сторона должна признать этап подготовки и обязательство. Как только сторона подтверждает, что она готова к фиксации, она должна блокировать, пока координатор транзакций не отправит сообщение фиксации или отката. Если какая-либо из сторон находится в сети, задержка в сети вызывает узкое место для связи между узлами.
Кроме того, как только сторона признала, что она готова к фиксации, она должна фактически иметь возможность зафиксировать транзакцию впоследствии, даже если между ними произошел сбой. Это требует контрольной точки для постоянного хранения (даже если транзакция откатывается впоследствии), а также, возможно, ограничивает пропускную способность.