抓虫记之四:超时的真相

 

世界真奇妙,虫虫天天笑;若只看表象,保你没头脑!

这次这个BUG,是帮助一位同事调试的。

同事来找我,说他遇到一个问题,就是在本地调试的时候,都没问题,但是一部署到服务器上,就执行超时。

经过我简单了解,原来这是这样的一个业务场景:

客户希望在A系统中更新某记录的时候,同时更新B系统的一条数据。由于A系统是一个商业系统,没有源代码,而且界面的二次开发接口也没有,所以只能考虑对数据库字段增加Trigger,通过Trigger调用本地的一个EXE,去执行一个WebService,更新另外一个数据库数据。

这个设计本身没有什么问题。可问题出在他的实现细节上。更新的过程,显然是要把A系统的数据传递给B系统,而不是简单的通知。同事在实现的时候,为了传递数据,就把当前记录的ID传递过去,在WebService中,再读取数据库,取得实际所要用的所有数据。这样需要多少数据,都不需要修改接口。

可是,大家可能也发现了,在这个过程中,A系统当前记录的Trigger还在Update中,如果数据库连接过来访问这条记录,是被锁死的,只能等待。陷入了一个死循环。这就会导致最后的超时表现。

好了,知道了原理,修改起来就简单了。只要吧该传递的参数,在调研Webservice之前,就通过参数的形式传递过去,就不会出现这种调用了。

这个案例同时也告诉我们,系统独立(不依赖)设计的重要性。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值