分布式锁与事务
注释:本地锁和分布式锁的区别
业务层面
锁从业务层面分为分布式锁和本地锁
1、 本地锁:只对当前节点的业务产生影响
2、 分布式锁:对所有使用该分布式锁的节点都产生影响
架构层面
1、 如果当前服务只部署一个服务节点,并且该服务节点操作的资源都是独有的,那么就可以使用本地锁解决资源争抢问题
2、 如果当前服务部署一个/多个服务节点,但是该服务节点操作的资源可以被其他服务节点操作,那么就需要使用分布式锁解决资源争抢的问题
资源层面
1、 本地锁只对当前节点的独有资源有效
2、 分布式锁对所有节点的资源都有效
1、接口幂等性
作用:幂等性防止接口重复提交
实现接口幂等性的方式:
方式一:通过令牌校验的方式
方式二:通过分布式锁的方式
2、分布式事务和分布式锁
当一个资源可能被争抢时,就需要使用分布式锁,防止超卖/重复提交现象发生
例如:假如支付接口,需要在钱包中扣钱;此时,支付接口所在的服务有两个节点,用户点击两次支付,两个接口都会执行支付操作;此时钱包就会被争抢,需要使用分布式锁,防止钱包金额变成负数
在购买完成后,订单表会自增加一条记录,商品表记录会减少商品数量,钱包会减少金额,此时就涉及到分布式事务
分布式事务和普通事务的原子性要求是一样的:要么全部成功,要么全部失败;此时当业务发生异常时,就需要全部回滚;
3、被争抢的资源如何分类
资源分为个人资源和公有资源
如果是用户个人的资源需要,先锁定预扣除
如果是公用的资源,需要先完成前置逻辑,再锁定扣除;如果先行逻辑执行完成,公用资源消耗完毕或者失败,需要补偿个人资源
首先指定一个场景
假设一个商城系统发起一个秒杀活动,活动中的商品是手表,共有100块,每块秒杀价50元
此时共有10000个用户发起秒杀,每个用户有1-100元范围的资产,有百分之90的用户资产低于50元
图一:此时所有的用户争抢分布式锁,但是只有一
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
Java全新整理八股文 + 场景题 + 算法 精心设计,面试命中率超过80% 专栏优势: 1、问题和答案已经整理到位,答案更专业,可以直接回答,不需要额外总结! 2、场景题讲解清晰,适用于大部分场景的项目,并且持续更新中 3、分享学习心得【知识点的广度和深度,算法有哪些坑,如何准备面试等等】