分布式事务,是为了解决微服务架构下的数据一致性的问题
2PC: - prepare - commit 协调者有超时限制,参与者没有。
无法处理的异常:如果 coordinator 和 某一个participant 都失败时,若该participant已经收到commit消息其进行了提交,而其他participant还未收到commit消息,则会出现数据不一致。
3PC: - CanCommit - PreCommit - DoCommit 减少了2PC的数据不一致的可能性。 若发生coordinator 和一个 participant 都失败的情况,当coordinator恢复的时候,查询其他 participant 的状态,如果发现有 participant 在commit的阶段,则会推测上一个coordinator在crash前,做出了DoCommit操作,则它会继续引导完成该阶段。如果发现有 participant 还没收到PreCommit消息,则可以推测在完成 PreCommit之前就crash了,那么会废弃这次事务。
缺点: - 需要更长的时间(RTTs) - 理论假定有限的延迟,而实际情况延迟可能无限
TCC: - try - commit - cancel