游戏电视苹果数码历史美丽
投稿投诉
美丽时装
彩妆资讯
历史明星
乐活安卓
数码常识
驾车健康
苹果问答
网络发型
电视车载
室内电影
游戏科学
音乐整形

记一次ThreadLocal引发的线上故障,年终奖没了,可能

  事情起因
  耗子逗猫没事找事
  前几天,在工作不太忙的时候,为了展示我在工作中积极主动,技术能力较强,并给领导留个好印象,我就去翻翻项目代码有没有可优化的空间。
  没想到,我真让我找着啦。
  祸端就此埋下了!
  有用户反馈查询订单列表接口有点慢,我就去打印每一步的耗时信息。发现查询订单之前,需要先根据用户ID查询用户信息,而查询用户信息接口需要调用用户团队提供的服务,有时候网络较慢的时候,耗时达到200毫秒。
  而查询订单接口层层调用的时候,调用了好几次查询用户信息的接口。当然可以改成再最上层查询一次,然后层层往下传递,这样一来改的地方比较多,也很麻烦。
  我琢磨着能不能加个本地缓存,把用户信息缓存起来,这样就不用每次去调用用户服务查询了。刚好就想到了使用ThreadLocal,听说高级程序员都用ThreadLocal,我也想用一下试试。
  ThreadLocal是线程私有的,调用结束后,线程销毁了,ThreadLocal里面数据也跟着没了。
  听着ThreadLocal是线程安全的,应该没什么问题。
  动手实践
  我先写一个ThreadLocal的工具类,用来存储和获取用户信息:author一灯apiNote本地缓存用户信息publicclassThreadLocalUtil{使用ThreadLocal存储用户信息privatestaticfinalThreadLocalUserthreadLocalnewThreadLocal();获取用户信息publicstaticUsergetUser(){如果ThreadLocal中没有用户信息,就从request请求解析出来放进去if(threadLocal。get()null){threadLocal。set(UserUtil。parseUserFromRequest());}returnthreadLocal。get();}}
  然后在查询订单接口里面,调用这个工具类的方法获取用户信息,最后根据用户信息查询订单信息,完美。获取订单列表方法publicListOrdergetOrderList(){1。从ThreadLocal缓存中获取用户信息UseruserThreadLocalUtil。getUser();2。根据用户信息,调用用户服务获取订单列表returnorderService。getOrderList(user);}
  自测、提测、验收、上线,接口访问速度嗖一下就上去了,一切看上去都是那么完美。
  我已经开始幻想,升职加薪,迎娶白富美,走上人生巅峰了。
  事与愿违
  上线一个小时后,值班群炸了。
  陆续开始有用户反馈自己刚下的订单不见了,其他用户也有反馈自己的订单列表莫名其妙多了一些订单。
  我一脸懵逼,没碰到过这种情况,逐渐反馈的用户越来越多,我已经不知所措了。
  领导当机立断,小灯,你小子搞什么飞机,赶紧回滚服务。
  半个小时后,回滚完毕,用户的情绪逐渐平复下来。
  故障复盘
  线上故障解决后,紧接着就开始排查问题产生的原因。
  经过无数次打日志、debug,终于定位到问题了。
  ThreadLocal确实是线程私有的,并且会在线程销毁后,ThreadLocal里面的数据也会被清理掉。
  但是问题就出在,无论我们服务端用的是Tomcat、Jetty、SpringBoot、Dubbo等,都不会来一个请求就创建一个线程,而是创建一个线程池,所有请求共享这这个线程池里的线程。
  一个线程处理完一个请求,并不会被销毁。可能导致多个用户请求共用一个线程,最后出现数据越权,看到了别的用户的订单。
  解决方案
  解决办法就是,在使用完ThreadLocal后,再调用remove方法清除ThreadLocal数据。author一灯apiNote本地缓存用户信息publicclassThreadLocalUtil{使用ThreadLocal存储用户信息privatestaticfinalThreadLocalUserthreadLocalnewThreadLocal();获取用户信息publicstaticUsergetUser(){如果ThreadLocal中没有用户信息,就从request请求解析出来放进去if(threadLocal。get()null){threadLocal。set(UserUtil。parseUserFromRequest());}returnthreadLocal。get();}删除用户信息publicstaticvoidremoveUser(){threadLocal。remove();}}
  使用trycatch包裹代码,然后在finally中清除ThreadLocal数据。获取订单列表publicListOrdergetOrderList(){1。从ThreadLocal缓存中获取用户信息UseruserThreadLocalUtil。getUser();2。根据用户信息,调用用户服务获取订单列表try{returnorderService。getOrderList(user);}catch(Exceptione){thrownewRuntimeException(e。getMessage());}finally{3。使用完ThreadLocal后,删除用户信息ThreadLocalUtil。removeUser();}returnnull;}
  故障定级
  影响用户超过10w,或者错误数据超过10w,或者资损大于50w,故障定级为P1,全年绩效C。
  本来想优化程序性能,提高访问速度,给领导一个好印象,显得自己技术能力强,工作积极主动。
  这下好了,不但年终奖没了,工作还可能保不住了。
  睡觉没盖屁股我是露大脸了!
  事故总结
  经过这次事故,我总结了以下几点教训:没事儿别瞎逞能。没有金刚钻,别揽瓷器活。不求有功,但求无过。灯子,重构优化的水太深,你把握不住。
  推荐阅读:《我爱背八股系列》为什么要用MQ?MQ的作用有哪些?
  高并发场景下,如何保证数据的一致性的?
  如何进行分库分表?分库分表后有哪些问题以及对应的解决方案。
  高并发下怎么生成订单ID?以及每种方案的优缺点。
  如何实现分布式锁?使用数据库、分布式数据库、分布式协调服务分别如何实现?
  MySQL索引为啥用B树?以及二叉树、红黑树、B树、B各自的优缺点。

一降温就反复感冒,鼻炎复发,三招教你健脾益肺,扶正气分享羊爸爸最近气温骤降,开始正式步入冬天,天气一冷,就开始发愁了。刚入冬就发烧了,从此,就进入了一个怪圈:感冒咳嗽流鼻涕调理吃药感冒好点咳嗽鼻涕停止,一周后,继续这……经典统计公式,玻色经典物理中的统计规律,每个粒子是可以区分的,是不同的。量子力学中,有一类是全同粒子,就是说,它们无法区分。这两种情况下,粒子的统计规律是不一样的。什么是统计规律?简……集福字买对联备年货在青岛,坐一趟地铁11号线可以打卡6个年集地铁11号线从青岛苗岭路站始发,一路向北穿过崂山、即墨鳌山卫和温泉。沿途除了优美的风光外,还有充满传统味道的大集。临近春节,许多市民坐着年集专列赶大集、购年货,感受浓浓的年味儿……优化升级数字基础设施数字基础设施是数字经济发展的基石。2022年国务院印发《十四五数字经济发展规划》明确提出,优化升级数字基础设施。加快建设信息网络基础设施,推进云网协同和算网融合发展,有序推进基……坦克世界这台美苏两国坦克合体的缝合怪会成为同级霸主吗?今天来说它各位车长老爷们大家好啊,这里是坦克零距离。今天国服每日精选卖的是CS52LIS,7000金币不限量,这个车的详细评测我放在了第二条文章中,还是比较推荐大家考虑一……美国科技企业大规模裁员,中国以外区域2023年会陷入经济衰退将1天作为观察点,什么也看不到。这无非是与历史上任何一天一样,没什么区别。虽然北美的通胀数据在持续降低恢复到接近正常值,但现实中科技企业今年在持续裁员,给市场带来一……呼和浩特哈素海首届冬捕节开幕这是土默特左旗哈素海首届冬捕节的活动现场(1月9日摄,无人机照片)。1月9日,内蒙古呼和浩特市土默特左旗哈素海首届冬捕节暨冰雪旅游季系列活动开幕。新华社记者刘磊摄1……小米推出米兔儿童电话手表奥特曼版,799元,支持微信QQIT之家10月23日消息,小米现推出了一款米兔儿童电话手表奥特曼版,首发799元,还送49元的小爱随身音箱,目前已有数百人参与预售。IT之家了解到,米兔儿童电话手表奥特曼……陕西农村流水席,包工带料20菜只要400块,乡村美食你会错过说到农村的流水席相信大家都不陌生了,如今生活条件变好,许多人都喜欢到高级的酒店去举办,似乎那些酒席更上档次,更有面子。不过,还是有好多人喜欢农村的酒席,看起来更富有人间烟……2022年11月3日国内油价最新消息国内成品油本轮最高零售限价今日油价预期简报:今日周四,本轮国内成品油最高零售限价调整周期第八个工作日,现有数据核算结果如下:本轮最高零售限价预期上调146元每吨,较……网曝知名男童星吸毒嫖娼,男女通吃,张一山已发文侧面回应头条创作挑战赛近日,网上出现了不少网友曝料,指某男艺人因为涉嫌留容他人吸毒聚众淫乱被抓进去了,该男星有早期经典的童年作品。曝料中还说,只要曝料的热度没有起来,该男星……时薪160元!苹果员工薪资待遇曝光上班一小时顶我干一天2月12日消息,彭博社报道称,苹果正在给许多美国零售店员工涨薪,幅度在210之间,销售人员、GeniusBar天才吧技术维修人员,以及一些高级小时工都有机会涨工资。据知情……
体视界丨姆巴佩莱万均反对!世界杯改制再引争议瞰体坛2021年进球榜莱万69球居首莱万(新华社)日前,欧足联统计了2021年包括俱乐部与国家队总进球数的TOP10,莱万多夫斯基打入69球排名第一,姆巴佩以……泉城济南,尽出美女!来自济南的8位女星,个个千娇百媚,一眼万济南是一座历史悠久的城市,这里文化底蕴浓厚,风流名士星河灿烂。同时拥有山泉河湖城的济南,向来有泉城的称誉,更有济南名士多的美誉。殊不知,济南也诞生过无数的才女佳人。……华为影像加持,全新华为nova10系列打造最强鸿蒙手机现在的年轻用户在购买手机时,对手机的要求非常多,很多品牌在满足年轻客户要求上用了不少心思,作为年轻人最钟爱的华为品牌不负众望,推出了华为nova10系列手机。该系列手机一上市就……美国弃婴箱开始重新出现,生了娃不想要,就可以放进去最近一段时间,美国部分州的消防局、医院外侧陆续出现了一些贴着标语的灰色箱子这些箱子虽然外表简陋,但并不是普通的储物箱,它们是为初生婴儿设立的婴儿箱。这些婴儿箱的用途……不同价位的烫发有什么区别,选对了不伤发一般美发店的烫发项目有几个价位,很多时候不知道如何选,便宜的怕伤害头发,贵的荷包承担不起。其实只要是合格产品贵的和便宜的都还行,更重要的是发型师的技术。我们花的那么多钱就是为技……胎梦所给的暗示,不能不信怀孕期间,大多数人都会做很多的梦,有的人,梦见蛇,有的人,梦见花,也有的人,梦见是男孩还是女孩。而我想说的是,这些怀孕期间的梦,多多少少都给了我们暗示,最后也都真真假假的变成了……湖南新一周阴雨相伴,最低温度降至5来源:【湖南日报】刚刚过去的这个周末短暂晴好,长沙人结伴而出,部分景区游客量接近上限新一周阴雨相伴,最低温度降至52月19日,橘子洲景区梅园,梅花竞相绽放,引……那些值得N刷的国外电影有哪些让你重刷多次的美剧值得分享1。《海蒂与爷爷》大家都笑我,因为我想写故事。那是因为大家知道的太少了,而看过更大的世界。如果,你觉得这个世界有些东西能让你快……做什么事情,可以提升你的幸福感这世上大部分的烦恼都来源于你的能力不足,想要的又太多。能力配不上野心,是所有烦扰的根源。没有在起风的时候跟上,直到后面在拼命追赶。茫茫大路上又怎知在何方呢?怎知少壮不努力……郭德纲,终于服软了突然发现,好久没有郭德纲的消息了。5月22日,德云社的郭德纲接受了凤凰卫视的专访,钢丝们才发现,郭老师已经好长时间没有出现在大众面前了。这一次郭德纲接受凤凰卫视专访……修身白色七分牛仔裤搭配白色T恤,时尚典雅,潇洒迷人披上牛仔自拍一张修身白色七分牛仔裤是美女们喜欢穿的一款,它的人气要高过其他版型,是休闲搭配中的新宠儿。特别适合精品女装,充斥着时尚潮流气场和休闲娱乐感,衣着简易而大气的美……中国强势夺冠!长沙伢子成最大惊喜北京时间11月3日凌晨在英国利物浦举行的2022体操世界锦标赛男子团体决赛中中国队以257。858分领先第二名日本队4。463分的绝对优势获得冠军……
友情链接:易事利快生活快传网聚热点七猫云快好知快百科中准网快好找文好找中准网快软网