当前位置:首页 > 短网址资讯 > 正文内容

高效排查短网址系统故障:高并发引起的系统设计“踩坑”案例

www.ft12.com6年前 (2018-09-10)短网址资讯2742

短网址的判定逻辑十分复杂,一方面是各种类型的网址,有正常的短链接,另外是短网址保证用户的使用,特别是商家的影响面非常广,任何一个小故障都可能引发一些社会问题,所以FT12短网址对产品的质量,对服务的连续性有严格的要求。FT12短网址的技术人员在日常的研发运维过程中,积累了丰富的实战经验。今天,为大家分享一个关于故障,排查,分析和改进的真实案例。他山之石可以攻玉,希望对广大开发和运维工程师带来帮助。



背景说明

某日,做产品X的开发接到客户公司电话,说是对账出了1分钱的差错,无法处理。本着“客户第一”的宗旨,开发立马上线查看情况。查完发现,按照产品X当日的年化收益率,正常情况下用户在转入57元后一共收益3分钱,合计是57.03元。但是该客户当日却有一笔消费57.04元,导致客户公司系统对多出的1分钱处理不了。再进一步分析,发现用户收益结转时多了1分钱的收益,并且已消费……

也就是说,本来用户只有3分钱收益,结果多发了1分钱给他,也就给公司造成1分钱的损失!用户在产品X里当天收益本应该是0.03元,怎么会变成0.04元呢?多出的1分钱收益从哪里来的呢?

短网址数据库记录分析

带着上面的一系列疑问,开发人员首先排查了产品X收益的数据库记录。通过查询数据库发现,该用户收益结转在同一天内存在2笔交易记录。交易记录1创建时间为8:00:23,记录2创建时间为8:00:29,交易记录12的最后修改时间均为8:00:29,如图4-1所示。

正常情况下产品X收益每天只会结转一次,而这个用户当日有两笔收益结转记录。开发人员怀疑,很可能是出现了并发问题。

继续跟踪第一笔“TXID a”的记录,开发确认线上日志存在超时情况,失败原因是数据库链接数已满,线程等待提交。

分布式锁超时时间是5s,第一笔记录从创建到修改提交经历了6s,由此可见是在分布式锁失效之后,获得了数据库链接,进行提交成功。

有了以上三个排查思路后,我们可以开始逆推整个过程。

反向查询短网址对应的真实网址

根据数据库记录逆推当时的运行情况,如图4-2所示。

1)由于数据库连接数被占满,流水1创建的事务处于等待提交状态。

2)系统A发现交易失败,重试次数不满8次的,立即发起重试,触发生成流水2的请求。

35s以内数据均被分布式锁拦截,无法提交。

4)经过5s后,系统B的分布式锁失效,此时事务仍在等待未提交。

56s时,流水2成功越过数据库查询幂等校验发起事务,此时流水1拿到数据库连接,流水12两个事务同时提交。

6)由于数据库未做唯一索引,且支付受理模块打穿下层幂等原则,生成2TXID,导致两事务同时提交成功。

7)收益结转重复记账,用户多了一笔收入。

图4-2  数据库分布式锁超时并发控制失效

深入分析

完成了整个问题的过程逆推后,开发人员进一步分析,发现问题真正的原因还是在系统设计上。如图4-3所示,系统A的事务允许一定时间的等待,而上层业务的重试时间又比这个等待的时间要短。这就存在一个问题:系统A的事务还在等待中,业务就又发起了重试。如果是在这个应用场景下(可能业务上对重试要求更高一些),那么对幂等控制的要求就更高了。而仅仅通过一个分布式锁来控制,如果分布式锁的超时时间设置的比事务允许等待的时间短,那么在锁失效之后就一定会同时提交两笔请求。

继续对整个过程抽象化,开发人员得出一个结论:分布式锁在以下条件同时满足的情况下并发控制会被打穿。

1)上层业务系统层面有重试机制。

2)业务请求存在一定时间之后提交成功的情况,例如本例中第一次请求在事务等待6s后获得了数据库链接,提交数据库成功。

3)下游系统缺乏其他有效的幂等控制手段。

思考

了解了问题的来龙去脉后,接下来要怎么解决这类问题呢?我们想了以下几个方案。

1)调整B系统上的tr和分布式锁超时时间,tr超时调整为10s,分布式锁超时调整为30s短链接的高并发可以被有效的释放。

2)防止做收益结转产生并发控制幂等,调整了收益结转流水号的生成规则:前8位取X收益结转传入的交易号的前8位,第10位系统版本设置为“9”,最后8seq取交易号的最后8位,降低问题出现几率。

方案一:调整超时时间

调整超时时间后,业务重试时间与分布式锁有效时间的分布时间轴如图4-4所示,即在事务允许等待后提交成功的时间之外,再进行重试,另外分布式锁在整个阶段均有效,防止提交。

图4-4  分布式锁超时并发控制时间轴

方案一验证有效。

方案二:增加幂等控制(推荐)

如图4-5所示,单纯靠分布式锁不是控制并发幂等的方式,最稳妥的方式还是在提交记录的时候通过数据库严格控制幂等。确保不论如何设置超时时间,都不会出现幂等控制的问题。

图4-5  分布式锁超时并发控制时间轴

方案二验证有效。

小结

短网址用户的使用体验是我们努力的重中之重,而幂等控制又是短网址安全机制的最主要原理。回顾本文案例,从问题分析定位,到整个逻辑的梳理清洗,其中涉及了三个时间轴的相互作用,再加上事务、分布式锁、重试等,整个问题发生的逻辑还是比较复杂的。因此,在系统并发幂等控制设计中,单纯的分布式锁并不具备严格控制并发幂等的作用,建议在系统设计时,将第三方唯一性的幂等控制作为幂等控制的兜底方案,控制好这道幂等防线,这样不论业务如何设计,就万变不离其宗了。

扫描二维码推送至手机访问。

版权声明:本文由短链接发布,如需转载请注明出处。

本文链接:https://www.ft12.com/article_538.html

分享给朋友:

相关文章

娃娃机和迷你KTV“躺着挣钱” 解密孤独消费的逻辑

周末,三里屯某商场,正是午饭之后的时间,一楼产品区购物者三三两两、若有寂静,但摆在商场入口的 4 个迷你KTV“包间”,却座无虚席。透过玻璃可以看到, 4 个包间里分别坐着情侣、一对女生、带着孩子的年轻爸爸妈妈,还有一位背影看起来有些寂寥的...

准备将天津港保税区打造成跨境电商产业聚集地

记者23日从中国北方最大保税区天津港保税区获悉,在自贸区及跨境电商试点城市多重方针利好下,该区加速打造跨境电商工业聚集地。到本年4月底,跨境电商事务已累计完结61.7万单,交易额1.33亿元,会聚各类跨境电商试点公司77家。天津港保税区是天...

Linux 系统开机启动项清理

Linux 系统开机启动项清理

一般情况下,常规用途的 Linux 发行版在开机启动时拉起各种相关服务进程,包括许多你可能无需使用的服务。-- David Both本文导航? 查看开机启动项09%? 哪些服务能够禁止?37%? 系统启动时发生...

FT12短网址丨前汽车之家总裁康雁离职当日内部告别信:复盘这一年

FT12短网址丨前汽车之家总裁康雁离职当日内部告别信:复盘这一年

[ FT12短网址 ] 9月28日,康雁、王俊朗正式辞去了汽车之家总裁、首席财务官职务,同时也辞去了董事职务。当日,有消息称,除该两人辞职之外,还有两位VP也已经离职。在平安入主15个月后,汽车之家再一次发生人事大变动。在平安入主...

FT12短网址教你如何通过今日头条引精准流量,现学现用

FT12短网址教你如何通过今日头条引精准流量,现学现用

我发现许多人都对今天头条引流对比感兴趣,每天都有人在微信上问我做今天头条引流的玩法,我也多多少少的答复了他们。可是,头条规则改动太快,许多当时有效的玩法,没过多久就失效了。这儿说的玩法,是指文章或视频上留微信号的办法。由于只要留了微信号,才...

跳水女王陈若琳创业 放下5块金牌做起护眼灯

【亿邦动力网讯】台封王,参加三届奥运会拿了5块金牌,成功实现跳水"大满贯"的陈若琳,金牌数目更超越师姐伏明霞。去年,24岁的她发了条微博,淡然宣布退役。退役后的陈若琳需要一个新的开始新的方向。陈若琳找到了同样热爱公益的迟...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。