分布式事务学习

前言:在事务中,log的重要性远大于数据
**
阿里开源的分布式事务框架 Seata,已有成熟框架,属于2PC。

事务四大特性

ACID A:原子性 C:一致性 I:隔离性 D:持久性, A:原子性和D:持久性 依靠log实现, C:一致性 I:隔离性依靠锁实现
在这里插入图片描述

分布式事务

分布式事务指事务的操作位于不同的节点上,需要保证事务的 AICD 特性。
例如在下单场景下,库存和订单如果不在同一个节点上,就涉及分布式事务。
示例

  1. 一个服务操作多个数据库
  2. 多个服务操作一个或多个数据库

目的:保证分布式系统中的数据一致性

解决方案:引入第三方协调者

XA规范

在这里插入图片描述

实现: 内部XA: 单机情况下,binlog担当TM角色。事务写入时,同时写入redolog日志和binlog日志,生产undo
log日志。事务提交时,同时写入redo log和binlog来保证两者一致。事务撤销时,根据undo log进行处理。
外部XA:分布式集群中,一般是引入代理层担当TM角色,实现对事物的支持。

二阶提交协议(2PC):主要保证分布式事务的原子性,即所有提交事务要么全做,要么全不做。
步骤
一。准备阶段:协调者向多个服务执行事务指令。若任一服务返回失败或返回时间超时,进入回滚阶段。
二。执行阶段:协调者向多个服务发送提交事务指令,并向协调者反馈执行结果。
三。回滚阶段:准备阶段 任一服务返回失败或返回时间超时,则进入回滚。
缺点:
单点故障:协调者出错会导致事务失败
阻塞资源:占用了数据库连接,效率低下
数据不一致:任一服务回滚或事物提交时都有可能失败,可能导致数据不一致。
三阶提交协议(3PC):相对于二阶段,解决了占用资源问题,稍微降低了数据不一致的可能性。优秀点在于思路可以避免服务雪崩(服务不会死等)。
一。can commit:检查sql,但不执行,不占用sql连接。解决2PC占用资源问题。
二。pre commit:执行sql,类似于2PC准备阶段。pre commit在超时未收到协调者指令会直接执行do commint。(有可能导致数据不一致)
三。do commit:
四。abort commit:
can commit 在出现1.有参与者返回no ,2.协调者等待超时。3.在需要执行pre commit时参与者没有收到协调指令。 会进入 abort commit阶段。

鸵鸟算法

在计算机科学中,鸵鸟算法是一个忽略潜在问题的一种算法策略,这种策略对计算机程序可能出现的问题采取无视态度(类似于鸵鸟在遇到危险时将头埋在地里,装作看不见)。鸵鸟算法的使用前提是,问题出现的概率很低。

TCC(Try Confirm Cancel):属于两阶段提交协议变种。
BASE理论:允许数据暂时不一致,但保证数据最终一致性。(高并发请求中非常重要)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值