已采纳
回答正文
回复
讨论正文
该问题的正文与回答。
背景
Java 17 + Spring Boot,订单履约链路是 4 跳纯串行:网关(800ms SLO) → 订单服务 → 库存服务 → 风控服务 → 结算服务(最后一跳落 MySQL,一条事务内含 3 条 DML + 1 条查询,P50 约 45ms、P99 约 90ms)。deadline 已经在链路里逐级传递:每跳用 max(1ms, 0.6 × remaining) 给下游算单跳超时,自己留 40% 做本地计算和序列化。前 3 跳 P99 都在 80ms 以内,平时没问题。
现象 上周风控服务一次 GC 抖到 400ms(持续约 6s),期间大量请求到达结算服务时 remaining 只剩 30~50ms——低于结算服务自己的 P50(45ms)。结果是:
已尝试的排查与结果
期望得到的答案形态
参考:站内已有 deadline 逐层传递的讨论(id=1013,各层留余量导致总超时超 SLA)和超时预算切分问题(id=1501),但都没深入到「剩余额度低于自身 P50 时怎么办」这一层,所以单独问这一卡点。