数据库的二阶段提交

之前看了林奇的Mysql 45讲,里面提到了二阶段提交,看的一头雾水,后来又再别的地方看到了解释,这里做下记录,方便理解。

 

1.字面意思,说白了就是提交分两阶段,准备阶段和真实提交阶段

由于一个事件或者说事务,需要多方联动配合,即保持(数据,业务,状态)一致性,个人理解应该就是CAP中的A吧,

可能进行到其中某个环节,由于网络,服务不稳定啊(CAP中的P体现?),等等原因,导致后续环节没有执行,而前面的环节已经执行了,前面的环节并不知道后续环节执行失败,会默认和自己一样成功,从而修改当前环境的状态,数据等,就会出现数据的不一致。

简单来说,分布式系统,会出现数据不一致的问题。这是原因。

哪么为了解决这个问题,就得知道后续环节是不是成功了,如果没成功,大家都要按照每成功了,不能我成功了,你没成功,大概就是事务的一致性体现吧。

所以,需要知道到你这环你能不能执行,这个事情,理论上我认为可以由上游操作,得到反馈,但是可能是为了抽离,专门会有一个协作者的角色,来进行判断和指挥(服务只负责提供功能,流程控制由协作者指导)。

所以,协作者需要判断各服务是否可用,各服务是否能执行成功,这就是下面说的第一阶段。

2.准备阶段

协作者作为组织者,需要判断各个参与者是否可用,参与者需反馈给协作者,协作者进行确认即可进行第二阶段。

这里的意思看起来有点无用,直接让各参与者直接按照环节进行就可以,何必浪费这一步。

看了下Mysql讲义中,这一步貌似是进行了 Undo信息和Redo信息写入日志,即流程记录。记录当前事务发生到了哪个阶段,

如果到时候,后续哪个环节炸了,可以按照记录,将参与者都回滚到最初的状态,说白了,个人理解:准备阶段就是一个判断and记录功能。

如果参与者无法提供功能,则直接提示全部失败

 

 

参考:

https://juejin.im/post/5d6c7821518825415d062509

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值