高可用设计

2023年618大促,我们服务在零点流量峰值时直接雪崩。

原因是开发团队只做了接口限流,没做熔断降级。当下游服务超时堆积时,调用方还在疯狂重试,结果整个链路被打爆,20 分钟内所有服务全部宕机。

事后复盘,如果当时做了熔断和快速失败,这场事故完全可以避免。

【架构权衡】 高可用不是加几个开关就能解决的事。它是一个系统工程,从限流、熔断、降级,到多活、单元化、混沌工程,每个环节都要做到位。任何一个短板都可能成为压死系统的最后一根稻草。

一、内容总览

本模块覆盖高可用架构的完整知识体系,从流量治理到架构冗余:

1.1 流量治理 🔴

文章核心内容面试权重
限流原理令牌桶/滑动窗口/漏桶🔴 高频必考
熔断降级Hystrix/Sentinel 原理🔴 高频必考
削峰填谷消息队列、异步处理🟡 中频常考

1.2 多活架构 🟡

文章核心内容面试权重
多活架构同城双活、异地多活🔴 高频必考
单元化架构单元化拆分与路由🟡 中频常考

1.3 容量与性能 🟡

文章核心内容面试权重
容量概览容量规划基础🟡 中频常考
性能概览性能优化方法论🟡 中频常考
数据库性能连接池、慢查询优化🟡 中频常考
缓存性能缓存击穿/穿透/雪崩🔴 高频必考

1.4 冗余与备份 🟡

文章核心内容面试权重
冗余设计主备、多副本、无状态🟡 中频常考
备份恢复全量/增量/跨机房备份🟢 低频了解

1.5 可观测与应急 🟡

文章核心内容面试权重
健康检查探活机制与告警🟡 中频常考
全链路测试灰度发布与演练🟡 中频常考
并发概览并发控制与锁优化🟡 中频常考
异步设计异步消息、事件驱动🟡 中频常考
混沌工程故障注入与韧性验证🟢 低频了解

二、学习路径指引

第一阶段:流量治理(5-7 天)

先看 限流原理,理解令牌桶、滑动窗口、漏桶三种算法的原理和适用场景。然后看 熔断降级,理解 Hystrix/Sentinel 的熔断器模式,以及什么时候该熔断、什么时候该降级。

💡

限流解决的是"系统能扛多少"的问题,熔断解决的是"系统失控时怎么快速失败"的问题。两者配合才能真正保护系统。

第二阶段:缓存性能(3-5 天)

缓存是性能优化的核心手段,但缓存的坑不比任何其他组件少。看 缓存性能 理解缓存击穿、穿透、雪崩的原理和解决方案。

【架构权衡】 缓存的三大坑(击穿、穿透、雪崩)每一个都能让系统崩溃。缓存击穿是热点 key 过期时大量请求打到数据库;缓存穿透是请求的数据既不在缓存也不在数据库;缓存雪崩是大量 key 同时过期。理解这三个场景,才能设计出健壮的缓存架构。

第三阶段:多活与单元化(5-7 天)

多活架构 是大型互联网公司的标配。先理解同城双活和异地多活的区别,再看 单元化架构 理解怎么拆分流量、怎么保证数据一致性。

⚠️

多活最大的坑是数据一致性。同城双活还好,异地多活的数据同步延迟可能是几百毫秒到几秒。设计多活架构时,必须考虑数据同步方案和故障切换策略。

第四阶段:混沌工程与应急(持续)

混沌工程 是用故障注入来验证系统韧性的方法论。配合 健康检查全链路测试,建立完整的高可用验证体系。

三、生产避坑速查

翻车场景根因解决方案
限流后用户体验崩塌限流阈值拍脑袋基于历史数据 + 压测确定阈值
熔断器雪崩下游持续超时,熔断后恢复太快阶梯式恢复、设置合理的半开时长
缓存击穿热点 key 过期瞬间大量请求永不过期 + 异步更新 或 分布式锁
缓存穿透恶意请求查询不存在的数据布隆过滤器 或 缓存空值
缓存雪崩大量 key 同时过期过期时间加随机值
多活切换丢数据数据同步有延迟切换时停写 + 灰度验证

四、面试高频考点

第一追问:限流算法有哪些?令牌桶和漏桶的区别是什么?

考察候选人对流量治理的理解深度。必须能说清楚令牌桶、滑动窗口、漏桶的算法原理,以及各自的适用场景。

第二追问:熔断器的状态流转是什么样的?什么时候该从熔断变成半开?

考察候选人对熔断机制的理解。必须能讲清楚 Closed/Open/HalfOpen 三种状态,以及状态转换的触发条件。

第三追问:缓存击穿、穿透、雪崩怎么解决?

考察候选人对缓存三大坑的实战经验。必须能为每个场景给出具体的解决方案,而不是泛泛而谈。

【架构权衡】 高可用设计没有银弹。限流、熔断、降级、多活、单元化......每一种手段都有它的适用场景和边界。选择时必须基于业务的真实需求和系统的当前状态,没有万能方案。

级别期望回答判分标准
P5能说出限流、熔断的基本概念基本概念正确
P6能分析各方案的问题和解决思路能回答追问,理解细节
P7能设计完整的高可用方案有全局视野,能做权衡

五、核心能力矩阵

能力维度入门要求进阶要求高级要求
限流知道三种算法原理能根据业务选择合适算法能设计动态限流策略
熔断知道熔断器状态流转能配置合理的熔断参数能处理熔断后的降级逻辑
缓存知道三大坑的原理能给出具体解决方案能设计多级缓存架构
多活知道同城/异地多活区别能设计数据同步方案能处理跨机房故障切换

本模块是 SRE 视角的高可用知识体系,从流量治理到架构冗余,从可观测到应急响应,每个环节都是生产环境多年踩坑沉淀出来的经验。