2pc,3pc,paxos,zab
在分布式应用中,每个节点都知道自己的事务提交的结果是成功或者失败,但是无法直接获取其他分布式节点的结果。因此需要一个协调者,其他节点成为参与者。
一. 2pc
提交事务请求,执行事务提交。同步阻塞、单点故障、不一致。主要用于数据库领域内,解决了分布式事务的原子性问题
1.提交事务请求
首先向其他节点询问是否可以执行事务提交操作,并发送事务给各个节点。然后各个节点执行事务,并将操作写入本地事务日志。各个参与者向协调者发送反馈。
2.执行事务提交
1)若协调者受到所有参与者的ACK反馈
向所有的参与者发送commit消息。参与者收到commit消息后执行事务提交操作,并向协调者发送ACK反馈,然后释放事务资源。协调者收到反馈后完成事务。
2)若协调者收到某一个参与者的NO反馈,或者协调者等待超时之后
向所有参与者节点发送回滚请求,参与者收到后执行回滚请求,执行完成后向协调者发送ACK反馈,协调者接收到所有参与者的ACK反馈后完成事务终端。
二. 3pc
cancommit, precommit, docommit;单点故障,数据不一致,解决了同步阻塞问题(超时提交策略,第三阶段参与者等待超时后会提交事务)。preCommit解决了同步阻塞的问题。
1)cancommit
协调者向所有参与者发送包含事务内容在内的cancommit请求,并等待参与者的反馈。参与者收到cancommit请求后,若判断自己可以顺利执行事务,则向协调者发送ACK响应,否则反馈NO响应。
2)precommit
若协调者收到所有参与者的ACK响应,则向所有的参与者发送precommit请求。参与者收到后执行事务,并将操作写入本地事务日志,成功后向协调者发送ACK响应。若协调者在第一阶段的反馈中有no,或者协调者等待超时,则向所有的参与者发送中断请求。
3)docommit
如果协调者收到了第二阶段的所有参与者的ACK请求,则向参与者发送docommit请求,执行事务的提交。参与者收到docommit请求后,执行事务的提交,成功后释放事务资源。参与者事务提交后向docommit发送ACK反馈,协调者收到所有参与者反馈后,完成事务的提交。
若协调者等待超时,或者第二阶段有参与者发送no反馈,则向所有参与者发送中断请求,参与者收到后执行事务回滚,回滚结束后释放事务资源,并向协调者发送ACK响应,协调者收到所有的ACK响应后中断事务。
叙述你所知道的分布式一致性协议
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 一致性协议 在分布式系统中,每一个机器节点都能明确知道自己在进行事务操作中的结果是成功还是失败,但是无法直接获取到...