知识点整理20201116

复盘 更新中

1.分布式事务 a-b-c 支付失败需要回滚怎么处理的

第一种方案常用分布式事务框架 atomikos

XA/JTA规范: 两阶段提交协议(2PC)
使用举例:

单体多库的例子
UserTransaction userTransaction=new UserTransactionImp();

try{
//开启全局事务
  userTransaction.begin();
xxxx
xxx
xxx
//1阶段提交
ps1.executeUpdate();
xxx
xxx
ps2.executeUpdate();
//全局事务提交 2阶段提交
userTransaction.commit();
}

cap理论
base理论

tcc try-confirm-cancle 两阶段补偿方案解决微服务分布式事务

第二种方案Seata AT模式 阿里首推 对应商用版本GTS

个人觉得 AT模式本质上和tcc类似 只不过实现方式不同 使用更为方便

1RM(ResourceManager 资源管理者)理解为 我们的一个一个的微服务 也叫做事
务的参与者.
2TM(TranactionManager 事务管理者) 也是我们的一个微服务,但是该微服务是
一个带头大哥,充当全局事务的发起者(决定了全局事务的开启,回滚,提交等)
***凡是我们的微服务中标注了@GlobalTransactional ,那么该微服务就会被看出
一个TM。我们业务场景中订单微服务就是一个事务发起者,同时也是一个RM
3TC(全局事务的协调者):这里就是我们的Seata-server,用来保存全局事务,分支
事务,全局锁等记录,然后会通知各个RM进行回滚或者提交.

整体机制 通过前置快照后置快照构造方向sql:
一阶段 查询前置快照—》 执行业务SQL -----》 查询后置快照
二阶段提交 分支插入待删除队列—》异步删除UndoLog
二阶段回滚 根据配置项选择是否校验脏数据—》构造反向SQL — 》 删除UndoLog

了解不够,有时间会继续补充。

关于分布式事务的想法:

分布式事务无法达到100%的解决,属于技术难题,而TCC AT等模式个人感觉属于同一类解决方案没有本质突破,不过AT方案的前置镜像后置镜像操作能否通过数据库来实现,比如mysql的触发器这种,我对此不够了解只是提出了个想法。
而且多阶段提交给人感觉有点类似三次握手,是否可以借鉴相关思想进行优化。

参考资料:

腾讯课堂图灵学院
分布式事务的4种模式
分布式事务理不清?先来了解两阶段提交吧
分布式事务Seata——AT模式解析
springcloud+eureka整合阿里seata-saga模式
面试必问:分布式事务六种解决方案
分布式事务的四种解决方案

消息积压
消息丢失
redis集群 区间槽
mysql引擎
b+树叶子节点有啥用
联合索引 覆盖索引区别
分库分表举例
分库路由规则
并发处理

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值