分布式事务的落地与疑问

4,457 阅读2分钟
  1. 如何基于微服务Feign实现接口调用?
  2. 如何基于Nacos实现负载均衡?
  3. 如何实现客户端与服务端负载均衡?
  4. 如何掌握本地事务与分布式事务?
  5. 如何快速理解事务的隔离级别与传播行为?
  6. 如何快速理解BASE理论与Raft原理?
  7. 如何掌握两阶段提交2PC?
  8. 如何掌握事务补偿TCC?
  9. 如何掌握分布式事务Seata?
  10. Seata的生命周期与组成部分
  11. 全局事务模型讲解
  12. Seata全局事务落地
  13. 消息队列最终一致性落地

问题:分布式项目如何保证事务一致性?

低成本低一致性要求: 标记 + 补偿 (上上之选) 低成本最终一致性:AT (没有对写代码的入侵)--性能 落地性能损耗不多

高成本+ 高并发 + 强定制能力: TCC ,尽量不用 try commit cancel 三个方法

不能容忍的非一致性:XA 银行

问题:分布式事务原理?

全局事务 -》 分支事务 seata 定制了一个全局的分布式事务分支
三个角色 : tc rc rm 来全局控制分布式事务 是 回滚还是 提交。

AT -- undo log TCC -- 执行一段cancel 回滚代码

自学作业:

1.尝试使用RPC框架集成TCC -- Dubbo nacos + dubbo 2.自学落地 Saga 方案 XA 方案 3.Seata-server 的高可用集群

image.png

XA方案:阻塞,延迟,吞吐量。 瓶颈:数据库连接耗尽。

seata: AT 无感知, TCC 编程麻烦,性能好,控制力度强

SAGA:少一步骤,不用做 T

seata如何拆解分布式问题

image.png

角色:TC

Transaction Coordinator 协调者 协调全局事务的提交和回滚 ,记录事务状态 ,分支事务状态

image.png

角色:TM 管理者 分布式事务的起点 发起全局分布式事务,提交和回滚事务的决议

异常服务处理

image.png

角色:RM resource Manager

1.在TC中注册 2.和底层数据库打交道 3.报告分支事务的状态 4.TC指令的执行者

image.png

image.png

第一阶段:TM发起全局事务,TC下发XID

image.png

第二阶段:XID贯穿微服务链路,RM注册本地分支事务,提交业务数据 & undo log(一阶段提交)

undo log 回滚 一阶段本地事务提交前获取全局锁-commit阶段 某种死锁

seata:防止死锁,超时timeout解决。

image.png

第3阶段: TM负责全局事务的提交,二阶段提交

image.png

image.png

无感知,TC中间件,事务状态落库 全局事务,分支事务,undo-log

Seata Server (TC) 可以注册到 nacos上 1.4.0版本

global_table

image.png

branch_table

image.png

lock_table

image.png

微服务隔断增加一个表 undo_log

image.png

seata 数据源的代理

image.png