1)2pc 二阶段提交
第一阶段:提交事务请求:事务没有真正提交,只是请求过去执行。
第二阶段:真正提交,或者中断事务。
中断事务:1、发回滚请求
2、参与者节点回滚
3、参与者反馈结果给协调者
4、协调者接受参与者ack(完整无误后)后回滚
问题:存在同步阻塞(参与者节点在提交处于同步阻塞状态,无法做其他操作,卡)、单点问题(协调者节点出故障,会破坏事务一致性)、脑裂导致数据不一致(服务宕机或阻塞时)等问题
2)3pc 三阶段提交
将提交事务请求分为了两步走,三个阶段分别是CanCommit、PreCommit、DoCommit;在参与者提交事务请求给协调者上做判断,引入超时时间概念,在一定时间内,如果参与者事务请求发送过去没有得到响应,则发生参与者消息,让其他参与者事务不在等待,不响应参与者不进行处理,并回滚协调者中关于无响应参与者部分的问题。
解决了同步阻塞、单点问题,但是没有解决脑裂导致数据不一致问题(网络分区问题)。
引入paxos算法,(该算法是一种分布式系统容错性的一致性算法),来解决3pc中网络分区问题。
paxos算法,“过半原则”概念,少数服从多数。
zk就是基于fast paxos的。
保证事务ACID特性
最新推荐文章于 2022-08-09 16:10:04 发布