系统架构设计师 · 高频练习

用户只愿等待2秒,下游服务还能各自再等2秒吗?

高级 单选题 第 1064 题 较难 系统架构设计师Deadline传播超时预算调用链取消传播
题目

客户端要求订单请求在2秒内返回。网关处理已耗时300毫秒,订单服务又耗时400毫秒,随后准备调用库存服务。为了避免下游完成时结果已对客户端无用,较合理的做法是()。

A 库存服务重新获得完整2秒,与上游已耗时无关
B 传播原请求Deadline或剩余预算,扣除已耗时和必要安全余量后设置下游超时
C 所有服务都不设置超时,直到操作自然结束
D 客户端超时后,下游仍必须无限继续计算
题目类型:原创高频练习题 用途:用于帮助理解系统架构设计师相关考点和答案解析,不等同于官方真题。
正确答案
B
答案解析

端到端预算只有2秒,已消耗700毫秒后不能让每一跳重新计时。传播Deadline或剩余时间能让下游判断工作是否仍有价值,并在预算耗尽时取消后续处理。

选项分析

A

错误。每跳重置超时会让端到端延迟超过用户预算。

B

正确。传播并扣减剩余预算,可协调下游超时、取消和资源释放。

C

错误。无超时请求会长期占用线程、连接和队列资源。

D

错误。结果已无消费者时继续昂贵计算通常会浪费资源,应根据业务语义处理取消。

本题为什么容易错

最常见误区是把“服务超时”当作彼此独立的参数。用户感受到的是整条链的总时间,不会因为调用跨了三个服务就多给三份等待。

先看结论

简短答案

用户只愿等待2秒,下游服务还能各自再等2秒吗,正确答案是 B(传播原请求Deadline或剩余预算,扣除已耗时和必要安全余量后设置下游超时)。端到端预算只有2秒,已消耗700毫秒后不能让每一跳重新计时。传播Deadline或剩余时间能让下游判断工作是否仍有价值,并在预算耗尽时取消后续处理。

解析

易混淆概念对比表

概念本题判断区别要点记忆提示
库存服务重新获得完整2秒,与上游已耗时无关 本题干扰项 错误。每跳重置超时会让端到端延迟超过用户预算。 看到该词不要急着选,先判断是否真正解决题干问题
传播原请求Deadline或剩余预算,扣除已耗时和必要安全余量后设置下游超时 本题正确答案 正确。传播并扣减剩余预算,可协调下游超时、取消和资源释放。 看到题干核心场景时优先联想到它
所有服务都不设置超时,直到操作自然结束 本题干扰项 错误。无超时请求会长期占用线程、连接和队列资源。 看到该词不要急着选,先判断是否真正解决题干问题
客户端超时后,下游仍必须无限继续计算 本题干扰项 错误。结果已无消费者时继续昂贵计算通常会浪费资源,应根据业务语义处理取消。 看到该词不要急着选,先判断是否真正解决题干问题
本题易混淆选项怎么区分
  • 库存服务重新获得完整2秒,与上游已耗时无关:错误。每跳重置超时会让端到端延迟超过用户预算。
  • 所有服务都不设置超时,直到操作自然结束:错误。无超时请求会长期占用线程、连接和队列资源。
  • 客户端超时后,下游仍必须无限继续计算:错误。结果已无消费者时继续昂贵计算通常会浪费资源,应根据业务语义处理取消。
复习

知识点详解

Deadline表示请求最晚仍有价值的时间点,timeout表示从当前时刻可等待的时长。跨服务调用时,应将原Deadline或扣除已耗时后的剩余预算向下游传播,并在预算不足时快速失败或降级。服务还应响应取消信号,停止不再需要的工作。预算设置需结合延迟分布、网络开销、重试和业务后果。

备考速记

整条链共用一只钟:上游花掉的时间,下游不能重新领取。

Deadline传播 在取消传播场景中的作用

本题剩余理论预算为1300毫秒。若预留200毫秒给响应返回和订单服务收尾,库存调用的实际超时上限可控制在约1100毫秒,而不是机械使用2秒。

拓展

同类题怎么考

  • 计算串行调用剩余超时预算。
  • 识别每一跳重新设置完整超时造成的尾延迟和资源浪费。
Deadline传播 在系统架构设计师软考中的考法

看到多层串行调用和端到端时限,先做减法。选项若让每一跳重新获得完整预算,通常会突破用户Deadline。

解题思路

直接算账:总预算2000毫秒,前两段用了700毫秒,只剩1300毫秒;还要给网络返回和上游收尾留一点余量。库存服务若再拿完整2秒,即使成功,客户端也早已放弃。B 的思路是让整条链共用一只倒计时钟。

考点定位

每一层都配置2秒并不等于端到端2秒。串行调用会累加等待,重试和排队还会继续消耗预算。

易错提醒

  • 只传播超时值,不扣除排队和上游已消耗时间。
  • 客户端取消后,中间服务没有把取消信号传给下游。
  • 重试没有占用独立预算,一次请求在多层重复放大。

备考提示

  • 画时间轴并写出总预算减去每段耗时。
  • 把超时、Deadline、取消传播和重试预算放在一组复习。

你可能还想了解

  • 微服务每一层都设置2秒超时有什么问题?
  • Deadline和timeout有什么区别?
  • 客户端取消后下游是否应该停止?

本文小结

端到端2秒预算应扣除网关和订单服务已耗时,再把剩余Deadline传播给库存服务,不能让每一跳重新获得完整2秒。