二阶段提交
二阶段提交(英语:Two-phase Commit)是指,为了使基于分布式系统架构下的所有节点在进行事务提交时保持一致性而设计的一种算法(Algorithm)。
二阶段过程
在两阶段提交过程中,主要分为了两种角色协调者(coordinator)和参与者(participants),协调者既可以作为库嵌套到应用程序中,也可以作为一个单独的服务。
2PC(Two Phase Commit)协议通常分为两个阶段进行,提交请求阶段(Commit Request Phase)或称投票阶段(Voting phase)、与提交阶段(Commit Phase);
1.提交请求阶段(Commit Request Phase),协调者发送请求给参与者,通知参与者提交或取消事务,参与者进入投票过程,每个参与者回复给协调者自己的投票:同意(事务在本地执行成功)或取消(事务本地执行失败)。
2.提交阶段(Commit Phase),协调者对上一阶段参与者的投票结果进行表决,当所有投票为“同意”时提交提交事务,否者中止事务,并通知参与者,参与者接到通知后执行相应的操作。
二阶段提交的缺点
- 同步阻塞:在执行过程中,所有节点都是事务阻塞的,第三方资源都处于阻塞状态。
- 单点故障:一旦协调者出现故障,参与者会一直阻塞下去。
- 数据不一致:但协调者发出commit请求之后,部分参与者发生故障,这会导致只有部分参与者接收到commit请求,其他故障参与者未接收到请求,于是整个分布式便出现数据不一致的现象。
二阶段无法解决的问题
当协调者出错,同时参与者也出错时,两阶段无法保证事务执行的完整性。