前言:在事务中,log的重要性远大于数据
**
阿里开源的分布式事务框架 Seata,已有成熟框架,属于2PC。
事务四大特性
ACID A:原子性 C:一致性 I:隔离性 D:持久性, A:原子性和D:持久性 依靠log实现, C:一致性 I:隔离性依靠锁实现
分布式事务
分布式事务指事务的操作位于不同的节点上,需要保证事务的 AICD 特性。
例如在下单场景下,库存和订单如果不在同一个节点上,就涉及分布式事务。
示例:
- 一个服务操作多个数据库
- 多个服务操作一个或多个数据库
目的:保证分布式系统中的数据一致性
解决方案:引入第三方协调者
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理论:允许数据暂时不一致,但保证数据最终一致性。(高并发请求中非常重要)