上一篇 下一篇 回到顶部 目录 返回首页
目录

高可用系统面试题总结:限流、降级、熔断、超时重试、幂等、冗余和压测

发表于
更新于
0 4.9~6.3 分钟 2196

高可用系统面试考的不是“系统永远不出问题”,而是你是否理解:故障一定会发生,关键是系统能不能限制故障范围、快速恢复,并避免把小故障放大成全站事故

这篇文章把 JavaGuide 现有高可用相关文章串成一条面试复习路线,适合准备后端开发、系统设计和中高级岗位面试。

高可用面试先建立故障视角

高可用设计可以从 5 个问题开始拆:

  1. 请求太多怎么办? 限流、排队、削峰。
  2. 下游变慢怎么办? 超时、重试、熔断、隔离。
  3. 核心服务挂了怎么办? 降级、冗余、故障转移。
  4. 重复请求怎么办? 幂等、防重、状态机。
  5. 上线前怎么证明系统扛得住? 压测、监控、演练、容量评估。

只要围绕这 5 个问题展开,高可用系统设计题就不会答散。

第一阶段:高可用系统设计总览

先建立整体框架,再看具体手段。

重点文章:

高频面试问题:

  • 什么是高可用?可用性 99.9%、99.99% 分别意味着什么?
  • 高可用和高性能有什么区别?
  • 单点故障如何识别和消除?
  • 冗余设计为什么不是简单多部署几台机器?
  • 压测应该测什么?如何避免压测结果和线上表现差距过大?

这一阶段重点理解“系统会坏”这个前提。高可用设计的核心不是追求零故障,而是让故障可预期、可隔离、可恢复。

第二阶段:限流、降级和熔断

限流、降级、熔断经常一起被问,但它们解决的问题不一样。

重点文章:

高频面试问题:

  • 固定窗口、滑动窗口、漏桶、令牌桶有什么区别?
  • 为什么固定窗口限流可能出现临界突刺?
  • 令牌桶为什么更适合处理突发流量?
  • 降级和熔断有什么区别?
  • 熔断器通常有哪些状态?半开状态解决什么问题?
  • 什么场景适合返回兜底数据?什么场景必须失败提示?

回答这类问题时,要说明触发条件和恢复机制。比如熔断不是“失败就切断”,而是需要错误率、慢调用比例、最小请求数、恢复探测等规则配合。

第三阶段:超时、重试和幂等

超时、重试、幂等是线上事故里非常常见的组合题。

重点文章:

高频面试问题:

  • 为什么所有远程调用都应该设置超时?
  • 重试为什么可能放大故障?
  • 哪些错误可以重试?哪些错误不应该重试?
  • 指数退避和随机抖动解决什么问题?
  • 什么是幂等?查询天然幂等吗?
  • 支付、下单、发券这类接口如何设计幂等?

这部分最重要的结论是:重试必须和超时、限流、幂等一起设计。没有幂等的重试可能造成重复下单、重复扣款;没有退避的重试可能把下游彻底打挂。

第四阶段:压测、监控和故障演练

很多同学准备高可用面试时只背方案,不讲验证。真实系统里,如果没有压测和监控,高可用设计就只是纸面设计。

重点文章:

高频面试问题:

  • 压测指标应该看 QPS、RT、错误率还是资源使用率?
  • 如何做容量评估?
  • 为什么要区分单接口压测和全链路压测?
  • 线上监控应该覆盖哪些指标?
  • 故障演练和混沌工程解决什么问题?

面试里可以这样收束答案:上线前通过压测确认容量边界,上线后通过监控发现异常,通过限流降级保护系统,通过预案和演练缩短恢复时间。

高可用系统设计题回答模板

遇到“如何设计一个高可用系统”这类题,可以按下面的顺序回答:

  1. 识别核心链路:哪些功能不能挂,哪些功能可以降级。
  2. 消除单点故障:服务、数据库、缓存、消息队列都要考虑冗余。
  3. 控制入口流量:限流、排队、削峰,避免系统被瞬时流量打穿。
  4. 保护下游依赖:超时、重试、熔断、隔离,防止故障扩散。
  5. 保证请求安全:幂等、防重、状态机,避免重复执行。
  6. 建立观测和恢复能力:监控、告警、压测、演练、预案。

这样答的好处是不会堆概念,而是沿着故障传播路径一步步收敛风险。

推荐复习顺序

临近面试可以按这个顺序复习:

  1. 先看 高可用系统设计指南,建立整体框架。
  2. 再看 限流算法详解服务降级和熔断详解
  3. 然后看 超时和重试机制详解接口幂等性详解
  4. 最后补 冗余设计详解性能测试详解

高可用面试的核心不是把每个概念背得很长,而是能把它们串成一套故障治理体系:出问题前能预防,出问题时能止损,出问题后能恢复和复盘