加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

抓虫记之四:超时的真相

发布时间:2020-12-17 01:16:25 所属栏目:安全 来源:网络整理
导读:? 世界真奇妙,虫虫天天笑;若只看表象,保你没头脑! 这次这个BUG,是帮助一位同事调试的。 同事来找我,说他遇到一个问题,就是在本地调试的时候,都没问题,但是一部署到服务器上,就执行超时。 经过我简单了解,原来这是这样的一个业务场景: 客户希望在
?

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

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

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

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

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

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

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

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读