一 . 2PC 二阶段提交协议算法(分为两阶段)
-
一个阶段是请求阶段(表决)
请求阶段: 协调作者通知参与者准备对事务进行提交或者取消事务, 这时参与者开始执行本地策略,写redo和undo日志,但是不进行提交,此时参与者将告诉协调者自己的决策:成功(参与者执行本地方法成功)或取消(执行本地方法故障) -
一个阶段是提交阶段(执行)
提交阶段:跟据二阶段提交算法第一阶段的结果,成功或取消(如果参与者全部同意提交事务,则协调者通知参与者进行事物的提交,如果有参与者失败,则协调者通知参与者去取消事务的提交)参与者在接收到协调者发来的消息后才会执行相应的操作 -
二阶段提交算法的缺点:
(1). 同步阻塞问题:执行过程中,所有参与节点都处于事务阻塞的(事务阻塞是指程序在等待调用结果时的状态,阻塞是指程序在没有得到调用结果之前都是处于线程被挂起状态,得到结果才返回,非阻塞是指不过有没有得到结果都不会阻塞当前线程)
(2). 单点故障问题:由于协调者的重要性,一旦协调者发生故障,参与者就会一直阻塞下去,那么所有参与者都会处于锁定事务资源的状态中,无法继续完成事务操作.(如果协调者挂掉,可以重新选举出一个协调者,但是无法解决参与者处于阻塞状态的问题)
(3). 数据不一致问题:在二阶段提交的第二阶段中,在协调者向参与者发送commit后,由于存在网络波动或者网络异常,一部分参与者接收到commit后会执行事务操作,但是没有接收到或者接收commit延迟的参与者就会处于无法完成事务操作的状态,从而会引起事务操作引起的数据不一致现象.
-
二阶段提交算法无法解决的问题:
当协调者出错,同时参与者也出错时,两阶段提交就无法保证事务执行