当前位置:首页 > 科技  > 软件

后端|一个分布式锁「失效」的案例分析

来源: 责编: 时间:2023-09-22 20:12:59 515观看
导读小猿最近很苦恼:明明加了分布式锁,为什么并发还是会出问题呢?故事从接到需求开始说起。接到需求小猿前一阵接到一个小任务,里面有一个功能对应的场景如下:封装一个对账户余额进行加减操作的方法;所属服务部署了多个实例;这个

小猿最近很苦恼:明明加了分布式锁,为什么并发还是会出问题呢?3G328资讯网——每日最新资讯28at.com

故事从接到需求开始说起。3G328资讯网——每日最新资讯28at.com

3G328资讯网——每日最新资讯28at.com

但实际的时序:3G328资讯网——每日最新资讯28at.com

3G328资讯网——每日最新资讯28at.com

也就是说期望是这样的执行顺序:3G328资讯网——每日最新资讯28at.com

3G328资讯网——每日最新资讯28at.com

但实际的执行顺序:3G328资讯网——每日最新资讯28at.com

3G328资讯网——每日最新资讯28at.com

分布式锁和事务,都是通过 AOP 来实现的,而 AOP 的执行顺序是根据切面的优先级来的,而小猿的分布式锁切面的优先级比事务切面的优先级低,所以就出现了上面的时序问题。3G328资讯网——每日最新资讯28at.com

于是通过给分布式锁的切面指定 Order 的方式,让它的优先级高于事务切面(注:Order 值越小,执行优先级越高),验证完没问题后,就又高高兴兴地更新完版本,修复好历史问题数据后回家了。3G328资讯网——每日最新资讯28at.com

还有问题

谁知道第二天一早,还是有极少量的用户反馈账户余额不对的问题。3G328资讯网——每日最新资讯28at.com

这次小猿就有点懵了,为什么还会出现这种情况呢?3G328资讯网——每日最新资讯28at.com

经过一番艰苦卓绝的排查,终于找到了问题所在:事务嵌套。3G328资讯网——每日最新资讯28at.com

从前文中的示例代码中可以看到,小猿的方法上加了事务注解 @Transactional(rollbackFor = Exception.class) 里,没有指定事务的传播行为,默认是 Propagation.REQUIRED,也就是说如果当前没有事务,就新建一个事务;如果当前有事务,就加入到当前事务中。3G328资讯网——每日最新资讯28at.com

小猿自己写的代码里没有在事务方法里嵌套调用这个方法的情况,但是同事写的代码里有,这样就会导致前文的时序问题再次发生。3G328资讯网——每日最新资讯28at.com

找到问题就好办了,小猿将自己的方法上的事务传播行为改成了 Propagation.REQUIRES_NEW,也就是说如果当前没有事务,就新建一个事务;如果当前有事务,就将当前事务挂起,新建一个事务。3G328资讯网——每日最新资讯28at.com

这次更新完版本后,小猿就再也没有收到用户反馈了,终于可以安心回家睡觉了。3G328资讯网——每日最新资讯28at.com

小结

在日常的开发过程中,如果涉及到并发和事务,一定要多留几个心眼,考虑周全,确认以下要点是否都正确实现:3G328资讯网——每日最新资讯28at.com

  • 是否做了必要的并发控制?
  • 事务的传播行为是否符合预期?
  • AOP 的执行顺序是否符合预期?
  • 对并发的场景是否做了充分的测试?
  • 对于比较关键的操作,是否打印了必要的日志?

本文链接:http://www.28at.com/showinfo-26-11218-0.html后端|一个分布式锁「失效」的案例分析

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 【Django入门】第一个Django项目

下一篇: 玩转Python属性和方法,成为高手不再难!

标签:
  • 热门焦点
  • MIX Fold3包装盒泄露 新机本月登场

    小米的全新折叠屏旗舰MIX Fold3将于本月发布,近日该机的真机包装盒在网上泄露。从图上来看,新的MIX Fold3包装盒在外观设计方面延续了之前的方案,变化不大,这也是目前小米旗舰
  • 2023年Q2用户偏好榜:12+256G版本成新主流

    3月份的性能榜、性价比榜和好评榜之后,就要轮到2023年的第二季度偏好榜了,上半年的新机潮已经过去,最明显的肯定就是大内存和存储的机型了,另外部分中端机也取消了屏幕塑料支架
  • 自动化在DevOps中的力量:简化软件开发和交付

    自动化在DevOps中扮演着重要角色,它提升了DevOps的效能。通过自动化工具和方法,DevOps团队可以实现以下目标:消除手动和重复性任务。简化流程。在整个软件开发生命周期中实现更
  • 一篇文章带你了解 CSS 属性选择器

    属性选择器对带有指定属性的 HTML 元素设置样式。可以为拥有指定属性的 HTML 元素设置样式,而不仅限于 class 和 id 属性。一、了解属性选择器CSS属性选择器提供了一种简单而
  • 从零到英雄:高并发与性能优化的神奇之旅

    作者 | 波哥审校 | 重楼作为公司的架构师或者程序员,你是否曾经为公司的系统在面对高并发和性能瓶颈时感到手足无措或者焦头烂额呢?笔者在出道那会为此是吃尽了苦头的,不过也得
  • 慕岩炮轰抖音,百合网今何在?

    来源:价值研究所 作者:Hernanderz“难道就因为自己的一个产品牛逼了,从客服到总裁,都不愿意正视自己产品和运营上的问题,选择逃避了吗?”这一番话,出自百合网联合创
  • 三星Galaxy Z Fold5官方渲染图曝光:13.4mm折叠厚度依旧感人

    据官方此前宣布,三星将于7月26日在韩国首尔举办Unpacked活动,届时将带来带来包括Galaxy Buds 3、Galaxy Watch 6、Galaxy Tab S9、Galaxy Z Flip 5、
  • Windows 11发布,微软一改往常对老机型开放的态度

    距离 Windows 11 发布已经过去一周,在过去一周里,很多数码爱好者围绕其对 Android 应用的支持、对老机型的升级问题展开了激烈讨论。与以往不同的是,在这次大
  • “买真退假” 这种“羊毛”不能薅

    □ 法治日报 记者 王春   □ 本报通讯员 胡佳丽  2020年初,还在上大学的小东加入了一个大学生兼职QQ群。群主“七王”在群里介绍一些刷单赚
Top