记一次伪并发引起的bug

一次较典型的问题排查过程, 分享一下, 欢迎指正和交流.

相关背景

内网有两个应用A和B, 其中B提供两个服务化接口B1和B2, 外网有一个应用W提供两个HTTP接口W1和W2. 内网的A通过RPC与B通信、B通过HTTP与W通信. 画了个简图如下

应用A:A首先调用B1(设置了一定的超时时间), 若超时则调用B2. 应用B:B1调用W1(设置了一定的超时时间), 调用W1成功后写入记录供B2调用W2时需要.

问题表象

观察应用B的日志发现, 有少量的B2被调用的 “记录不存在的” 业务异常日志. 根据这些异常日志分析出可能的一种情况: B1与B2 “同时” 由A发起调用, B2先行到达被处理, 引起这个异常. 从日志中也确实发现了 “记录不存在的” 的异常日志与B1的被调用日志在同一秒钟被记录到. 真的是并发引起的么?

问题追踪

理论上来说, A发起调用B1与B2, 即使是同一秒钟, 也不大可能是同一时刻. 这是因为A的逻辑决定的, 在调用B1超时后才会调用B2, 至少也是相隔了个超时时间段. 而后与A的负责人沟通得知, 调用B1的超时时间是300ms, 且找了几条异常日志对应的B1调用记录发现, 都存在同一个共同点: 耗时较长超过了300ms. 从这里可以分析出来, B2的调用至少隔了300ms才会被调用. 再次观察对应的B1调用链发现: 耗在调用W1的时间基本都在300ms以上. 这样疑问就很清晰了: A发起调用B1(超时500ms), B1发起调用W1(超时300ms). W1响应时间超过约300ms后A认定超时继而发起调用B2, 而此时B还在等待W1的响应因而没有写入记录导致A调用B2引发 “记录不存在的” 业务异常日志.

解决方案

为避免外网系统对接的超时问题, 其实内部已经有了一套较为完善的隔离方案, 这个隔离方案简单来说就是在白名单内的走单独一套超时限制较宽松的系统. 因为上面说的案例比这个隔离方案出来的时间早且比较仓促, 没有设计隔离方案且一直没有进行接入. B2接口的实时性要求不高, 可以异步处理, 暂时把B2的逻辑处理延迟1s后处理.

欢迎留言交流~

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏网站设计制作、数字营销

做网站知识之域名解析易懂介绍

公司在做网站时,在购买了域名、主机空间、及网站源代码和数据库都做好了之后,如果网站备案通过了,就可以做域名解析,如果解析设置没有问题,10分钟之后网站就可正常打...

35140
来自专栏BeJavaGod

防CSRF攻击:一场由重复提交的问题引发的前端后端测试口水战

重复提交,这是一直以来都会存在的问题,当在网站某个接口调用缓慢的时候就会有可能引起表单重复提交的问题,不论form提交,还是ajax提交都会有这样的问题,最近在...

48660
来自专栏用户画像

TCP协议

TCP是在不可靠的IP层之上实现的可靠的数据传输协议,它主要解决传输的可靠、有序、无丢失和不重复的问题。TCP是TCP/IP体系中非常复杂的一个协议,主要特点有...

8910
来自专栏决胜机器学习

高性能网站架构方案(二)——优化网站响应时间

高性能网站架构方案(二)——优化网站响应时间 (原创内容,转载请注明来源,谢谢) 一、概述 优化网站响应时间是保证网站受用户关注的要点,主要方案有: 1、减...

32560
来自专栏小白安全

绕过Edge、Chrome和Safari的内容安全策略

概述 ---- Web应用中有许多基本的安全机制,其中一个是同源(same-origin)策略机制,该机制规定了应用程序代码可以访问的资源范围。同源策略的...

44470
来自专栏网站设计制作、数字营销

做网站知识之域名解析易懂介绍

公司在做网站时,在购买了域名、主机空间、及网站源代码和数据库都做好了之后,如果网站备案通过了,就可以做域名解析,如果解析设置没有问题,10分钟之后网站就可正常打...

21300
来自专栏程序人生 阅读快乐

Node即学即用(图灵程序设计丛书)

《Node即学即用》讲解如何用Node构建可扩展因特网应用,是全面的实用指南,除了详细介绍Node提供的API外,还用大量篇幅介绍了服务器事件驱动开发的重要概念...

8310
来自专栏用户画像

TCP协议

TCP是在不可靠的IP层之上实现的可靠的数据传输协议,它主要解决传输的可靠、有序、无丢失和不重复的问题。TCP是TCP/IP体系中非常复杂的一个协议,主要特点有...

7110
来自专栏重庆的技术分享区

域名解析后主机记录和记录值怎么填写?都是什么意思?

16.7K50
来自专栏java思维导图

【读书笔记】1.2、基于HTTP协议的RPC

1.2.1HTTP协议栈 HTTP协议 Hypertext Transfer Protocol的缩写(超文本传输协议) 属于应用层协议,构建在TCP与IP协议之...

36650

扫码关注云+社区

领取腾讯云代金券