2PC两段提交的方案
解决的问题:为了保障数据强一致性的问题。
角色:协调者(可以是leader),事务参与者(follow)
步骤如下:
首先分成两个阶段:
准备阶段:
协调者要向所有的参与者发送事务内容,询问是否可以提交事务,并等待所有的事务参与者的一个回应,然后各个的参与者会执行事务的操作。会将undo,redo信息写入事务日志(MySQL)当中缓冲区临时的数据,但是不提交事务,如果重启服务器的话,日志会丢失,因为没有提交,上面的过程只要有一个出现问题,就全部回滚
提交阶段:
当协调者收到所有参与者的yes,这时协调者会发送commit命令。如果执行失败,就给所有的参与者发送no。
注意:阶段一,只要有一个参与者返回了一个No,然后协调者在阶段二向所有的参与者发送全部回滚rollback的命令-事务中断。
总结:2pc方案实现起来很简单,但是实际项目中用的很少
1、性能问题:在提交阶段所有的事务参与者都在协调者发送命令者处于同步阻塞状态。阻塞最占用系统资源的。
2、可靠性问题:如果协调者宕机,所有的参与者就一直阻塞状态,就有单点故障的问题。
3、数据的一致性问题:在阶段2处于局域网的状态,部分事务参与者收到了commit消息,另一部分参与者没有收到commit消息,导致节点之间的数据 不一致的问题。