微服务依赖治理面试题:强弱依赖、隔离、降级与容量
本页只放面试标准回答和原理跳转。完整依赖图、资源隔离、代码 Demo、商业场景和 Runbook 见微服务依赖治理。
高频问题
| 问题 | 标准回答 | 原理页 |
|---|---|---|
| 微服务依赖治理解决什么问题 | 它解决一个服务依赖多个下游时,怎样识别强弱依赖、限制每个依赖占用资源、设计超时熔断降级,并避免弱依赖拖垮核心链路。不是加几个注解,而是依赖图、故障域、资源预算和业务语义的组合治理。 | 依赖图、故障域 |
| 强依赖和弱依赖怎么区分 | 强依赖不成功就不能兑现当前业务承诺,例如库存冻结、支付确认;弱依赖失败只影响体验或辅助信息,例如推荐、头像、营销标签。强依赖失败要明确失败或待确认,弱依赖应快速降级。 | 依赖类型 |
| 弱依赖为什么也能拖垮核心链路 | 如果弱依赖和核心链路共享Tomcat线程池、Feign线程池、HTTP连接池、数据库连接或队列,弱依赖变慢会占住共享资源,导致强依赖也拿不到资源。弱依赖必须有限并发、短超时和明确降级。 | 故障域、资源隔离 |
| 线程池隔离、信号量隔离、连接池隔离怎么选 | 信号量限制并发但仍占用调用线程,适合快速同步调用;线程池隔离适合慢第三方或阻塞SDK,但有线程切换和上下文传播成本;连接池隔离限制真实网络资源,避免一个依赖占满所有连接。三者常组合使用。 | 资源隔离 |
| 为什么配置了线程池隔离仍然雪崩 | 可能底层HTTP连接池、数据库连接池、Redis连接或MQ客户端仍共享;也可能线程池队列太大、Bulkhead许可大于下游容量、fallback又远程调用、多层重试放大。隔离必须覆盖真实瓶颈。 | 隔离失败Runbook |
| 依赖并发上限怎么估算 | 用Little定律做初始估算:在途并发约等于QPS乘以平均耗时,再结合P99、抖动、实例下线、慢启动和下游容量留余量。并发许可不能超过下游数据库连接、HTTP连接和第三方配额。 | 资源预算 |
| 降级为什么不能伪装成功 | 降级是保护核心链路,不是篡改业务事实。推荐失败可以返回空列表,但库存失败不能默认库存充足,支付超时不能默认成功或失败。强语义接口要返回失败或UNKNOWN,并按幂等号查询事实。 | 降级语义 |
| 订单详情聚合怎样设计依赖治理 | 订单主数据是强依赖,推荐、活动、物流可弱化;并行调用要受总Deadline和每依赖Bulkhead控制。弱依赖失败返回空或暂不可查,强依赖失败明确失败或待确认。每个依赖按版本记录P99、错误率、连接池等待和降级次数。 | 关键路径、商业场景 |
| 支付回调为什么不能同步调用短信、积分、ES | 支付回调是核心强链路,应先校验签名和金额,本地事务幂等更新订单并写Outbox事件;积分、短信、ES异步消费。把这些弱或异步依赖放进回调事务,会让非核心故障拖垮支付确认。 | 商业场景、策略矩阵 |
| 依赖故障线上怎么排查 | 先用入口指标确认哪个接口P99或错误率升高,再用Trace找慢Span;然后按依赖查线程池active/queue/reject、HTTP连接池等待、下游P99、数据库锁和重试次数。先降级或隔离弱依赖止血,再修根因,不能只加线程。 | Runbook |
| fallback里还能不能调用远程服务 | 一般不建议。fallback应短、确定、低成本,最好只读本地缓存或返回明确降级结果。fallback再次远程调用可能进入同一个故障域,造成二次雪崩。 | 降级语义、Runbook |
| 依赖治理和熔断限流是什么关系 | 熔断、限流、Bulkhead、超时和重试都是依赖治理的工具;依赖治理先定义业务依赖和故障域,再为每个依赖选择保护策略。没有强弱依赖和资源预算,单独加熔断限流容易误伤或保护不到真实瓶颈。 | 策略矩阵、稳定性治理 |
场景题:推荐服务慢导致订单接口P99升高
先从Trace确认慢Span是否集中在推荐服务,再查推荐依赖的线程池、HTTP连接池和Bulkhead是否与订单核心依赖共享。止血时对推荐设置短超时、快速降级为空列表、限制并发并关闭异常重试;如果连接池共享,要拆分每路由连接或独立客户端。订单主链路不能等待推荐恢复。
场景题:库存服务超时后能不能降级为有库存
不能。库存是强业务事实,超时表示结果未知,不代表库存充足。应使用订单号或请求号查询库存冻结流水;确认成功就推进订单,确认失败就明确失败,未知则进入待确认或补偿。默认有库存会造成超卖。
项目回答模板
我会先画接口依赖图,把下游分成强依赖、弱依赖、异步依赖和外部依赖。强依赖例如库存冻结、支付确认,失败后不能伪装成功;弱依赖例如推荐、头像、营销标签,必须短超时、低并发、可降级。资源上按故障域拆线程池、信号量、HTTP连接池和数据库连接预算,并为每个依赖设置独立P99、错误率、重试、熔断和降级指标。线上排查先看Trace慢Span,再查资源池和下游事实,止血优先保护核心链路。
本章小结
依赖治理面试的关键不是背 Bulkhead,而是说清谁是核心、谁能降级、每个依赖最多占多少资源、失败后业务结果怎样收敛。
