分布式事务

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


一、分布式事务是什么?

由于项目业务模块多,利用微服务架构将项目进行模块拆分,部署到不同机器节点中。由于在这个过程中数据库也进行了拆分,就会涉及到跨数据库的数据一致性问题,我们就需要分布式事务来解决。

二、CPA原则

一致性

当一个节点写数据库时,其他节点立刻能获取到最新状态的数据。

可用性

任何时刻,用户都可以获取正常的请求响应,而不会出现浏览器错误等情况。

分区容错性

当某个模块间的网络通信出现问题时,不会影响其他模块的正常工作,允许错误发生,但系统不会崩溃,仍然能继续运行。


三、常用方法

1、两阶段提交

(1)准备阶段:事务协调器向各个参与者发送准备信息,收到消息后参与者试着执行事务,如果遇到权限验证失败等问题直接返回失败;如果没有遇到错误,则在本地执行事务,写redo和undo log文件,但不提交。
(2)提交阶段;如果事务提交者收到了参与者的失败信息,则向所有参与者发送回滚信息;否则,发送提交信息。参与者根据收到的信息执行相应操作,完毕后释放执行事务期间占有的所有锁资源。

2、三阶段提交

(1)can commit:协调者向参与者发送commit请求,参与者判断自身是否能顺利地完成事务,将判断结果反馈给协调者。
(2)准备提交阶段pre commit:如果有参与者判断结果为no时,协调者就向各参与者发送中断事务信息;
否则,协调者向各参与者发送准备提交信息,各事务开始执行事务,写redo log和undo log文件,如果执行成功,向协调者发送ack响应。
(3)执行提交阶段:当协调者收到所有参与者的ack响应时,就向各参与者发送提交事务信息,参与者提交事务后,向协调者发送ack,至此事务执行完成;
当有参与者没有向协调者发送ack响应时,协调者就会向各参与者发送回滚信息,执行回滚操作。

3、2pc和3pc的不同

3pc添加了一个预准备阶段,可以使协调者更早地意识到系统中存在地问题,减少阻塞时间。(参与者首先会检查自己本地的资源状态,包括数据库、文件系统等。它会确认是否有足够的资源和权限来执行该事务。如果发现资源不足或者权限不符合要求,参与者会拒绝执行事务。)

  • 6
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值