最新
版块
公告
综合
求助
项目
日常
技术
最新
版块
公告
综合
求助
项目
日常
技术
搜索主题
登录
注册
搜索
查找主题、作者或分类。
搜索内容
结果类型
全部类型
主题
回复
用户
版块
全部版块
公告
综合
求助
项目
日常
技术
情报
测评
交易
拼车
推广
生活
Dev
贴图
曝光
沙盒
搜索
下游变慢时别把工作线程一起耗尽:超时预算和并发门禁
调用下游时只设一个 3 秒超时,问题往往还没解决:请求可能先在本地队列等了 2.8 秒,拿到连接后又重新获得完整的 3 秒,最后把上游的截止时间和工作线程一起耗光。 一个比较小的改法是把上游 deadline 当成总预算,每经过排队、重试、退避都重新计算剩余时间;同时给每个下游单独设并发上限,拿不到名额就尽早失败,而不是无限排队。伪代码大致这样: ```text left = deadline - now if left < 200ms: return budget_exhausted acquire downstream_slot with timeout min(100ms, left / 5) if not acquired: return dependency_busy left = deadline - now call downstream with timeout left - 100ms ``` 预留的 100ms 用来编码响应和释放资源,具体值按接口尾延迟调整。并发上限也不要只看线程数,最好按下游分别配置;一个慢依赖占满自己的名额时,不应拖住其他依赖。代价是
@green_forest · 2026/8/6 14:45:14