---
title: 高可用系统设计面试题总结：限流、熔断、重试、幂等、容灾与压测
description: 高可用系统设计面试复习路线，串联 SLA、单点故障、限流降级熔断、超时重试、接口幂等、冗余容灾、性能压测和故障演练等 Java 后端高频考点。
category: 高可用
tag:
  - 高可用
  - 面试题
  - 系统设计
head:
  - - meta
    - name: keywords
      content: 高可用面试题,高可用系统设计,高可用复习路线,系统设计面试题,SLA,限流面试题,熔断面试题,超时重试面试题,接口幂等面试题,冗余容灾,性能压测,故障演练
---

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

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

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

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

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

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

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

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

重点文章：

- [高可用系统设计指南](./high-availability-system-design.md)
- [冗余设计详解](./redundancy.md)
- [性能测试详解](./performance-test.md)

高频面试问题：

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

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

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

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

重点文章：

- [限流算法详解](./limit-request.md)
- [服务降级和熔断详解](./fallback-and-circuit-breaker.md)

高频面试问题：

- 固定窗口、滑动窗口、漏桶、令牌桶有什么区别？
- 为什么固定窗口限流可能出现临界突刺？比如每分钟限 100 次，在窗口末尾和下个窗口开头的 2 秒内可能放行 200 次。
- 令牌桶为什么更适合处理突发流量？
- 降级和熔断有什么区别？
- 熔断器通常有哪些状态？半开状态解决什么问题？
- 什么场景适合返回兜底数据？什么场景必须失败提示？

回答这类问题时，要说明触发条件和恢复机制。比如熔断不是“一失败就立刻切断”，而是需要错误率、慢调用比例、最小请求数、恢复探测等规则配合。不同实现（如 Sentinel、Resilience4j）的默认参数和窗口机制有差异，面试时最好能说出你用过的一种具体配置。

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

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

重点文章：

- [超时和重试机制详解](./timeout-and-retry.md)
- [接口幂等性详解](./idempotency.md)

高频面试问题：

- 为什么所有远程调用都应该设置超时？
- 重试为什么可能放大故障？
- 哪些错误可以重试？哪些错误不应该重试？
- 指数退避和随机抖动解决什么问题？
- 什么是幂等？查询天然幂等吗？
- 支付、下单、发券这类接口如何设计幂等？常见方案包括唯一请求 ID + 去重表、数据库唯一约束、状态机控制、乐观锁等。

这部分最重要的结论是：**重试必须和超时、限流、幂等一起设计**。没有幂等的重试可能造成重复下单、重复扣款；没有退避的重试可能把下游彻底打挂。读操作重试相对安全，写操作重试必须配合幂等，重试次数通常建议控制在 3 次以内。

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

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

重点文章：

- [性能测试详解](./performance-test.md)
- [高可用系统设计指南](./high-availability-system-design.md)

高频面试问题：

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

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

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

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

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

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

## 推荐复习顺序

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

1. 先看 [高可用系统设计指南](./high-availability-system-design.md)，建立整体框架。
2. 再看 [限流算法详解](./limit-request.md)、[服务降级和熔断详解](./fallback-and-circuit-breaker.md)。
3. 然后看 [超时和重试机制详解](./timeout-and-retry.md)、[接口幂等性详解](./idempotency.md)。
4. 最后补 [冗余设计详解](./redundancy.md)、[性能测试详解](./performance-test.md)。

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