本地事务
- 同一数据库和服务器下
分布式事务
- 在分布式系统中
- 事务的参与者、支持事务的服务器、资源服务器以及事务管理器分别位于不同的分布式系统的不同节点之上,且属于不同的应用
- 分布式事务需要保证这些小操作要么全部成功,要么全部失败
- 保证数据一致性
解决方案(Seata)
AT模式
1.在一阶段中,Seata先拦截业务SQL,首先解析SQL语义,找到要更新的业务数据,在数据被更新前,保存下来undo,然后执行业务SQL更新数据,更新之后再次保存数据redo,最后生成行锁,这些操作都在本地数据库事务内完成,这样保证了一阶段的原子性
2.二阶段负责整体的回滚和提交,回滚用到的就是一阶段记录的undo LogTCC模式
Try-Confirm-Cancel,即资源预留(Try)、确认操作(Confirm)、取消操作(Cancel)
- Try:对业务资源的检查并预留;
- Confirm:对业务处理进行提交,即 commit 操作,只要 Try 成功,那么该步骤一定成功;
- Cancel:对业务处理进行取消,即回滚操作,该步骤回对 Try 预留的资源进行释放。
TCC和AT区别
AT 模式基于支持本地 ACID 事务的关系型数据库:
一阶段 prepare 行为:在本地事务中,一并提交业务数据更新和相应回滚日志记录。
二阶段 commit 行为:马上成功结束,自动异步批量清理回滚日志。
二阶段 rollback 行为:通过回滚日志,自动生成补偿操作,完成数据回滚。
相应的,TCC 模式,不依赖于底层数据资源的事务支持:(手动)
一阶段 prepare 行为:调用 自定义 的 prepare 逻辑。
二阶段 commit 行为:调用 自定义 的 commit 逻辑。
二阶段 rollback 行为:调用 自定义 的 rollback 逻辑。XA模式
执行阶段:
可回滚:业务 SQL 操作放在 XA 分支中进行,由资源对 XA 协议的支持来保证 可回滚
持久化:XA 分支完成后,执行 XA prepare,同样,由资源对 XA 协议的支持来保证 持久化(即,之后任何意外都不会造成无法回滚的情况)
完成阶段:
分支提交:执行 XA 分支的 commit
分支回滚:执行 XA 分支的 rollback
微服务限流策略
- Nginx的限流策略 漏桶算法
1.限制访问频率
2.限制并发连接数 - sentinel限流
未完