超时控制
超时控制
一、前言
最近线上服务器出现了一个BUG,出现了数据不一致的情况。最后排查下来发现是A服务请求B服务超时,但B服务还是会继续请求C服务。导致最终A服务认为超时失败,但实际B服务继续请求C进行了操作,导致最终数据出现了不一致的情况。排查了之后发现是A-B的超时时间是10秒,B和C的超时时间是15秒,(真的是接手了个烂摊子)。后来第一想法就是增加A的超时设置给他设置到20秒。结果后面还是有问题,排查得知A->B的路径因为网络抖动就花了15秒以上。
二、解决过程
一开始最直观的想法是增大超时响应时间,让上游服务A 的超时时间可以覆盖下游B的超时时间,但后来发现只是简单的增加超时时间并不行。这里必须得有个标记在上下服务之间传递,后来通过增加一个时间戳的参数来解决了这个问题。
三、理论
当上游服务已经超时返回 504,但下游服务仍然在执行,会导致浪费资源做无用功。需要进行超时传递,超时传递指的是把当前服务的剩余 Quota 传递到下游服务中,继承超时策略,控制请求级别的全局超时控制。
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!