从头开始学分库分表-------二阶段提交协议
两阶段提交协议
为了解决分布式事务一致性,常见的方法之一就是2PC两阶段提交协议。
两阶段提交有两个角色,第一个角色是:【事务管理器】。第二个角色是:【数据库事务参与者】。
准备阶段(prepare):【事务管理器】在第一阶段发起消息,每个【数据库事务参与者】在本地执行事务,
但是这个时候事务没有提交。
提交阶段(commit): (1)如果【事务管理器】接收到了每个【数据库事务参与者】的返回了success的消息的时候
【事务管理器】会再发出消息,让所有【数据库事务参与者】提交事务。
(2)如果有任意【数据库事务参与者】返回了超时或者失败的消息给事务管理器的时候
【事务管理器】会对每个【数据库事务参与者】发出事务回滚的消息。
缺点
(1)如果有任意一个【数据库事务参与者】处于超时或者阻塞状态,那么其它所有【数据库事务参与者】必须阻塞。这个会导致整体数据库性能大大降低。
(2)如果【事务管理器】宕机或者崩溃,那么所有【数据库事务参与者】都很可能进入无限时等待的状态。
参考文章:两阶段提交(2PC)