Я читал 3-фазный протокол фиксации в википедии (http://en.wikipedia.org/wiki/Three-phase_commit_protocol), и вот сценарий, который пришел мне на ум, когда 3PC не удастся:3-фазный протокол фиксации
Предположим, что есть два участника A и B и координатор C:
1) C отправил сообщение precommit в A и до того, как он отправит сообщение precommit в B, оба A и C симулируют сбой. 2) Сделка теперь перезапускается, и B заканчивает ее прерывание, потому что нет ответа от A. 3) A совершает транзакцию, потому что она уже получила сообщение precommit.
Не было ли это также оригинальной проблемой в 2PC, которую должен был адресовать 3PC? Как 3PC решает проблему? Что мне не хватает. Благодарю.
Извините, я немного не понимаю эту часть протокола. Разве участники не фиксируют, пока они не получат сообщение doCommit от координатора? –
Я предполагаю, что, возможно, так будет, если координатор и все участники, зная состояние системы, потерпят неудачу, транзакция прекратится после выбора нового координатора (я думаю, в соответствии с тем, что вы сказали). И если координатор выходит из строя после отправки сообщения precommit и по меньшей мере одного из участников, имеющих сообщение precommit, остальные в системе могут просто идти вперед и совершать, так как они уже знают состояние в системе. Поэтому ни в коем случае система не находится в неопределенном состоянии –
@AbdulRahman см. Мои обновления – xvatar