韧性、可测性与部署

共 21 题
#

1. 熔断器的状态机中 Closed/Open/Half-Open 的转换条件,与超时、重试的组合策略?

A Closed 状态直接拒绝所有请求
B Closed→Open 由失败率/失败次数阈值触发,Open→Half-Open 由冷却时间触发,Half-Open 探测成功恢复 Closed ✓ 正确答案
C Half-Open 允许放行全部请求
D 熔断打开时仍应无限重试
#

2. 重试与超时的组合中指数退避+抖动如何避免重试风暴?

A 重试间隔应固定以保持简单
B 抖动会加重重试风暴
C 指数退避让重试间隔递增,抖动让不同请求重试时刻错开,避免重试风暴 ✓ 正确答案
D 超时与重试无关
#

3. 发布策略中金丝雀、蓝绿与滚动发布的流量切换与回滚方式,各自对版本兼容的要求

A 滚动发布逐步替换实例,新旧并存,要求新老版本兼容;金丝雀先小流量灰度再放量,回滚靠降低流量 ✓ 正确答案
B 蓝绿发布让新旧版本在同一实例上并存
C 金丝雀发布一次性切换全部流量
D 蓝绿发布回滚最慢
#

4. 契约测试中消费者驱动契约如何让服务间接口变更在 CI 阶段暴露,与端到端测试的分工

A 契约测试需要完整部署所有服务
B 消费者驱动契约让消费者定义契约,提供方在 CI 验证,接口变更在 CI 阶段暴露;E2E 验证完整业务链路,两者分工互补 ✓ 正确答案
C 契约测试与 E2E 测试完全相同
D 契约测试只能在运行时发现集成问题
#

5. Tenant Test 在多租户隔离测试用例设计。

A Tenant Test 只验证单租户功能
B Tenant Test 只测数据库,不测权限
C 多租户系统无需隔离测试
D Tenant Test 验证多租户间数据、权限、配置的隔离边界,防止跨租户数据泄漏与越权 ✓ 正确答案
#

6. 重试与幂等的配合中指数退避、抖动(jitter)与重试风暴的防护?

A 重试不需要幂等,失败就重试即可
B 被重试的操作必须幂等,配合指数退避 + 抖动 + 熔断 + 最大重试次数防护重试风暴 ✓ 正确答案
C 抖动会加剧重试风暴
D 重试次数应无限大以保证成功率
#

7. 熔断器的状态转换中 CLOSED→OPEN→HALF-OPEN 的判定参数(阈值/冷却/探测)?

A CLOSED→OPEN 由失败率阈值与最小请求数触发,OPEN→HALF-OPEN 由冷却时间触发,HALF-OPEN 探测成功回 CLOSED ✓ 正确答案
B 熔断器只有两态,无 HALF-OPEN
C 冷却时间越短越好,无需权衡
D 探测请求失败也不会回到 OPEN
#

8. 服务降级与兜底中降级开关、默认值/缓存兜底如何设计,避免雪崩?

A 依赖故障时直接报错,不降级
B 降级会放大故障
C 降级开关配合默认值/缓存兜底,依赖不可用时返回有限可用响应,配合熔断限流隔离避免雪崩 ✓ 正确答案
D 降级只用于核心功能
#

9. 超时预算(Deadline Propagation)与重试中如何避免重试放大超时并造成级联故障?

A 每个服务独立设置超时并重试即可,无需传播
B 超时预算沿调用链传播,重试必须在剩余预算内进行,避免重试放大超时造成级联故障 ✓ 正确答案
C 重试次数与超时预算无关
D 超时预算会放大重试
#

10. 限流与熔断的协作中入口限流保护自身、熔断保护下游,两者如何避免“双重惩罚”与参数冲突?

A 限流保护下游,熔断保护自身
B 两者应共享同一失败统计
C 限流守自身容量、熔断守下游健康,职责分离,避免把被限流误判为下游故障、避免双重惩罚 ✓ 正确答案
D 熔断打开时继续放大限流重试
#

11. 优雅停机中摘流量、排空在途请求与等待事务提交的顺序,如何配合就绪探针

A 停机时直接 kill 进程,无需排空
B 优雅停机顺序是摘流量、排空在途请求、等待事务提交、释放资源,就绪探针失败配合先摘流量再排空 ✓ 正确答案
C 就绪探针用于启动后立即可用
D 停机时无需等待事务提交
#

12. 数据库迁移与代码发布的顺序中先向后兼容再切换、回滚时如何避免数据不一致

A 先删除旧字段再发布新代码
B 先做向后兼容的迁移(新增可空字段),再发布新代码,最后做破坏性清理;回滚时 schema 需兼容旧代码避免数据不一致 ✓ 正确答案
C 迁移与发布完全无关
D 回滚无需考虑 schema 兼容
#

13. Bulkhead 在线程池、连接池、进程级隔离的实现差异。

A 线程池/连接池/进程级隔离把资源划分为独立池,隔离程度递增但资源开销也递增,某依赖故障不影响其他 ✓ 正确答案
B 线程池隔离是全局共享一个线程池
C 进程级隔离开销最小
D Bulkhead 与故障隔离无关
#

14. Shared Database 在微服务边界的反模式与适用场景。

A 共享数据库有利于服务独立演进
B Shared Database 让服务通过数据库强耦合、破坏服务边界,宜避免;只读/报表共享等少数场景可接受 ✓ 正确答案
C 共享数据库能提升服务隔离
D 微服务必须共享数据库
#

15. Shared Nothing 在云原生微服务的资源隔离与扩展优势。

A 各节点共享内存与存储
B Shared Nothing 让每个服务/节点拥有独立资源与数据边界,实现资源隔离与独立水平扩展 ✓ 正确答案
C Shared Nothing 无法故障隔离
D Shared Nothing 只能纵向扩展
#

16. 熔断器与超时的分工中超时只能限制等待而不能阻止后续请求,熔断如何实现快速失败保护下游?

A 超时能阻止后续请求
B 二者职责完全相同
C 熔断只能限制单次等待
D 超时只限制单次等待,熔断在高失败率下断开后续请求并快速失败,保护下游 ✓ 正确答案
#

17. 舱壁隔离(Bulkhead)的粒度中线程池/信号量/进程级隔离各适合什么场景?

A 信号量隔离会占用线程池线程
B 线程池隔离不能排队
C 信号量限并发、线程池独立线程支持排队、进程级强隔离,开销递增,按依赖耗时与隔离需求选择 ✓ 正确答案
D 进程级隔离开销最小
#

18. 韧性测试方法中故障注入(Chaos)、延迟注入与流量回放如何验证系统韧性?

A 故障注入(Chaos)主动制造故障验证恢复,延迟注入验证慢依赖隔离,流量回放验证真实负载下的韧性 ✓ 正确答案
B 韧性测试只测正常路径
C 延迟注入无法验证熔断
D 流量回放只能在测试环境用假数据
#

19. 慢依赖的级联传播模型中一个慢接口会拖垮整个线程池,如何用“独立线程池+快速失败”隔离?

A 共享线程池让慢依赖只影响自身
B 独立线程池无法隔离慢依赖
C 慢依赖不会拖垮线程池
D 一个慢依赖占满共享线程池会导致整个服务不可用,用独立线程池 + 超时熔断快速失败隔离 ✓ 正确答案
#

20. liveness 与 readiness 探针中两者分别决定重启与流量摘除,误配如何导致滚动发布卡死

A liveness 决定是否重启容器,readiness 决定是否把流量路由到 Pod;readiness 过严会让新 Pod 不得就绪导致滚动发布卡死 ✓ 正确答案
B liveness 决定摘流量,readiness 决定重启
C 两者完全相同
D readiness 失败会重启容器
#

21. 弹性伸缩与冷却期中扩容与缩容的指标选择、冷却时间如何避免抖动

A 扩容与缩容用同一指标且无冷却期
B 冷却期会加剧伸缩抖动
C 扩容用敏感指标、缩容用保守指标,冷却期防止刚扩又缩的抖动,配合滞回阈值稳定 ✓ 正确答案
D 缩容应比扩容更激进