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

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

Например, в CQRS Journey Chapter 5:

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

Или в разделе Реализация дизайна, ориентированного на предметную область на странице 563:

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

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

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


person Domysee    schedule 02.10.2015    source источник
comment
См. enterpriseintegrationpatterns.com/docs/.   -  person Matt    schedule 09.10.2015


Ответы (1)


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

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

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

person Alexander Langer    schedule 02.10.2015