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

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

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

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

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

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

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

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

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

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

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

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

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

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

还有问题

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

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

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

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

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

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

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

小结

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

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

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

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

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

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

标签:
  • 热门焦点
  • Automa-通过连接块来自动化你的浏览器

    1、前言通过浏览器插件可实现自动化脚本的录制与编写,具有代表性的工具就是:Selenium IDE、Katalon Recorder,对于简单的业务来说可快速实现自动化的上手工作。Selenium IDEKat
  • 之家push系统迭代之路

    前言在这个信息爆炸的互联网时代,能够及时准确获取信息是当今社会要解决的关键问题之一。随着之家用户体量和内容规模的不断增大,传统的靠"主动拉"获取信息的方式已不能满足用
  • 本地生活这块肥肉,拼多多也想吃一口

    出品/壹览商业 作者/李彦编辑/木鱼拼多多也看上本地生活这块蛋糕了。近期,拼多多在App首页“充值中心”入口上线了本机生活界面。壹览商业发现,该界面目前主要
  • 腾讯盖楼,字节拆墙

    来源 | 光子星球撰文 | 吴坤谚编辑 | 吴先之“想重温暴刷深渊、30+技能搭配暴搓到爽的游戏体验吗?一起上晶核,即刻暴打!”曾凭借直播腾讯旗下代理格斗游戏《DNF》一
  • 华为Mate 60保护壳曝光:硕大后置相机模组 凸起程度有惊喜

    这段时间以来,关于华为新旗舰的爆料日渐密集。据此前多方爆料,今年华为将开始恢复一年双旗舰战略,除上半年推出的P60系列外,往年下半年的Mate系列也将
  • 机构称Q2国内智能手机销量同比下滑4% vivo份额重回第1

    7月29日消息,根据市场调查机构Counterpoint Research公布的最新报告,2023年第2季度中国智能手机销量同比下降4%,创新自2014年以来第2季度销量新低。报
  • 2纳米决战2025

    集微网报道 从三强争霸到四雄逐鹿,2nm的厮杀声已然隐约传来。无论是老牌劲旅台积电、三星,还是誓言重回先进制程领先地位的英特尔,甚至初成立不久的新
  • 超闭合精工铰链 彻底消灭缝隙 三星Galaxy Z Flip5与Galaxy Z Fold5发布

    2023年7月26日,三星电子正式发布了Galaxy Z Flip5与Galaxy Z Fold5。三星新一代折叠屏手机采用超闭合精工铰链,让折叠后的缝隙不再可见。同时,配合处
  • 回归OPPO两年,一加赢了销量,输了品牌

    成为OPPO旗下主打性能的先锋品牌后,一加屡创佳绩。今年618期间,一加手机全渠道销量同比增长362%,凭借一加 11、一加 Ace 2、一加 Ace 2V三款爆品,一加
Top