- 如何基于微服务Feign实现接口调用?
- 如何基于Nacos实现负载均衡?
- 如何实现客户端与服务端负载均衡?
- 如何掌握本地事务与分布式事务?
- 如何快速理解事务的隔离级别与传播行为?
- 如何快速理解BASE理论与Raft原理?
- 如何掌握两阶段提交2PC?
- 如何掌握事务补偿TCC?
- 如何掌握分布式事务Seata?
- Seata的生命周期与组成部分
- 全局事务模型讲解
- Seata全局事务落地
- 消息队列最终一致性落地
问题:分布式项目如何保证事务一致性?
低成本低一致性要求: 标记 + 补偿 (上上之选) 低成本最终一致性: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 的高可用集群
XA方案:阻塞,延迟,吞吐量。 瓶颈:数据库连接耗尽。
seata: AT 无感知, TCC 编程麻烦,性能好,控制力度强
SAGA:少一步骤,不用做 T
seata如何拆解分布式问题
角色:TC
Transaction Coordinator 协调者 协调全局事务的提交和回滚 ,记录事务状态 ,分支事务状态
角色:TM 管理者 分布式事务的起点 发起全局分布式事务,提交和回滚事务的决议
异常服务处理
角色:RM resource Manager
1.在TC中注册 2.和底层数据库打交道 3.报告分支事务的状态 4.TC指令的执行者
第一阶段:TM发起全局事务,TC下发XID
第二阶段:XID贯穿微服务链路,RM注册本地分支事务,提交业务数据 & undo log(一阶段提交)
undo log 回滚 一阶段本地事务提交前获取全局锁-commit阶段 某种死锁
seata:防止死锁,超时timeout解决。
第3阶段: TM负责全局事务的提交,二阶段提交
无感知,TC中间件,事务状态落库 全局事务,分支事务,undo-log
Seata Server (TC) 可以注册到 nacos上 1.4.0版本
global_table
branch_table
lock_table
微服务隔断增加一个表 undo_log