Seate简介
Seate是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式服务
- 常见的分布式事务解决方案
- seata
- 消息队列
- saga
- XA
他们都有一个共同特点,都是两阶段提交。
- 两阶段提交
- prepare:准备阶段
- commit:提交阶段
流程图如下

- 事务提交阶段
- 事务正常提交
- commit 请求: 协调者向所有参与者发送commit请求
- 事务提交: 参与者收到commit请求后,执行事务提交,提交完成后释放事务执行器占用的资源
- 反馈结果:参与者执行事务提交后向协调者发送ack响应
- 完成事务: 接收到所有参与者的ack响应后,完成事务提交

- 中断事务
- rollback请求:协调者向所有参与者发送rollback请求
- 事务回滚:参与者收到rollback后,使用prepare阶段的undo 日志执行事务回滚,完成后释放事务执行器占用的所有资源
- 反馈结果:参与者执行事务回滚后向协调者发送ack响应
- 中断事务:接收所有参与者的ack响应后,完成事务中断

- 事务模式
- AT模式:auto transcation,是一种无侵入的分布式解决方案。在AT模式下,用户只需要关注自己的业务sql,seata框架会自动生成事务的二阶段提交和回滚操作
+ 一阶段: Seate会拦截业务sql,解析sql语义,找到业务sql要更新的业务数据,在业务更新前,将要被更新的数据保存为before image,最后生成行锁。以上操作全部在一个数据库事务内完成。保证第一阶段的原子性

+ 二阶段: 二阶段如果是提交的话。因为业务sql在一阶段已经提交,所以seata框架只需要将一阶段保存的快照数据和行锁删掉,完成事务

+ 二阶段回滚: 如果是回滚,seata就需要回滚第一阶段的sql。还原业务数据,回滚方式就是用before image还原业务数据。但是首先要校验脏写,对比数据库当前数据和after image数据,如果一致就是没有脏写,如果不一致就需要转人工处理

- TCC 模式
TCC模式需要业务自己实现事务控制逻辑,侵入性强。try(),confirm(),cancel() 方法
优点:没有锁的概念,性能更强
- AT模式:auto transcation,是一种无侵入的分布式解决方案。在AT模式下,用户只需要关注自己的业务sql,seata框架会自动生成事务的二阶段提交和回滚操作
Seata原理:
- 第一阶段

- 第二阶段- 提交事务

- 第二阶段-回滚事务

优点:- 应用层基于sql解析实现了自动补偿,降低业务侵入性
- 将分布式事务中TC(事务协调者)独立部署,负责事务的注册、回滚
- 通过全局锁实现了写隔离和读隔离
缺点:性能较差

1044

被折叠的 条评论
为什么被折叠?



