2PC什么是2PC2PC是Two-Phase Commit的缩写,即二阶提交协议。它是将事务的提交过程分成两个阶段来处理的,分别是提交事务请求阶段和执行事务提交阶段;二阶提交协议常用于保证分布式系统的数据一致性。提交事务请求阶段1. 事务提交询问协调者向参与者发送事务内容,并询问是否可执行事务提交操作,等待参与者的应答结果。2. 事务执行参与者对询问的事务内容进行操作,并将Undo和Redo的信息记录到事务日志中。3. 各参与者给协调者反馈响应结果反馈结果包括可以执行事务或者不可以执行事务。二阶提交的第一阶段也可以称作“投票阶段”,即各参与者投票表明是否要继续执行事务提交操作。执行事务提交阶段协调者根据参与者的反馈结果决定是否可以进行事务提交操作,一般有以下两种情况:1. 正常执行事务提交发送事务提交请求协调者向参与者发送事务commit请求。执行事务提交参与者接受到commit请求后,正式执行事务,并在事务执行完成之后释放资源。反馈事务提交执行结果参与者完成事务提交后,向协调者发送ack消息。完成事务 协调者接收到所有参与者的ack消息后事务完成。2. 中断事务发送事务回滚请求协调者向所有参与者发出rollback请求。执行事务回滚参与者接受到rollback请求后,利用第一阶段记录的Undo信息执行事务回滚操,然后释放资源。反馈事务回滚结果参与者向协调者发送ack信息。事务中断完成协调者收到所有ack消息后表示完成事务中断。2PC的优缺点优点简单易于理解,容易实现。缺点同步阻塞为什么说是同步阻塞呢?因为在执行过程各参与者在等待其他参与者时,将无法执行其他操作。协调者单点协调者在整个二阶提交中起到了关键性作用,一旦协调者出现了问题,操作将无法执行下去。存在数据不一致的可能性在二阶提交的第二阶段中,即执行事务提交操作时,如果出现网络异常或导致部分参与者接受到了commit请求,部分参与者没有接收到commit请求,此时就会导致数据不一致。3PC什么是3PC3PC是Three-Phase Commit的缩写,即三阶提交,是对二阶提交的改进。canCommit阶段preCommit阶段doCommit阶段