分布式事务解决方案
1 分布式事务在面试中如何理解?
2 两阶段提交协议?三阶段提交协议?
3 什么是TCC (Try Confirm Cancel) 解决方案?
4 如何利用本地事务表来实现分布式事务?
5 最大努力通知方案是什么?
1 分布式事务是指会涉及到操作多个数据库(服务)的事务
其实就是将同一数据库(服务) 事务的概念扩大到对多个数据库(服务)的事务
目的是为了保证分布式系统中的数据唯一性
分布式事务处理的关键是必须有一种方法可以知道事务在任何地方所做的所有动作
提交或回滚事务的决定必须产生统一的结果 (全部提交或全部回滚)
分布式集群的情况下 一般加代理层来充当TM的角色 实现对事务的支持
2 两阶段提交协议简称2PC 2PC 就相当于西式婚礼一样 男女表示 及最终决定是否原因与对方结婚 P准备阶段 C提交阶段
两阶段中的缺点 如下图所示
单点故障 : TM 如果挂掉了 整个事务就处理不了了 解决方法 : TM 做集群去处理它
阻塞资源 : 占用着数据库的连接 是为了后面事务提交或者回滚的方便 解决方法 : 就是采用一个image表 将提交前和提交后的记录下来 如果回滚就分别回滚记录image 记录
数据不一致 :第二阶段时候 第二个事务被打断了 导致了二阶段的数据不一致 此时采用人工补偿 :例如 : 订单和库存表中的数据变化不一样 本应该是1变2 a 变为 b 此时只有1变为2 a
没有变为B 此时人工应该将2 变为1 或者b 变为a
三阶段协议是指 can commit pre commit do commit 但是3PC 也不能保证数据的一致性 只能保证数据一致的概率 和减少2阶段的资源浪费 can commit 就是提前预检查能够减少错误的概率
3 TCC 解决方案全称就是 Try Confirm Cancel 它使用还是2PC 协议 后面的Confirm 和 Cancel 是or 关系 是第二阶段
4 消息队列 + 本地事务表 + 定时任务
这种方案能够满足BASE 理论 可以实现数据的一致性 可以减少系统的响应时间 提高业务的吞吐量
这里俩个服务 每个服务里都含有单独的本地事务 都来保证全局的事务
消息丢失 可以重发 数据重复 可以采用幂等来解决 (增加唯一的ID 到数据库表中)
此解决方案的应用场景是 微信上春晚抢红包的活动 微信只第一时间告诉你抢到了红包 没告诉你抢到了多少钱 后端设计的是俩个服务 后一个服务知道前一个服务 就是你先抢到红包
5 最大努力通知方案里面 含有俩种机制 : 重复通知机制 以及 消息校对机制
此解决方案的应用场景 比如: 我们有个卖东西的app 采用的是微信支付 当用户下单之后 我们是怎么知道并且啥时候开始发货呢 ? 一种就是微信给我们重复通知 说用户已支付 这时我们可以给用户发货了
另外一种就是我们可以通过消息校对的机制来自查微信 如果已收到货款 就可以确认给用户发货了
标签:事务,解决方案,回滚,阶段,提交,分布式 From: https://www.cnblogs.com/pxzbky/p/16983846.html