高可用类场景题
概述
高可用(High Availability, HA)是衡量系统可靠性的重要指标。本类别涵盖容灾、降级、灰度发布等保障系统稳定性的核心技术。
核心知识点
高可用架构
- 主从架构
- 主备架构
- 异地多活
- 同城双活
容错机制
- 故障检测
- 自动切换
- 熔断降级
- 限流保护
发布策略
- 蓝绿部署
- 灰度发布
- 金丝雀发布
- 滚动更新
题目列表
如何设计异地多活架构
难度: 专家
标签: 异地多活、数据同步、流量调度
考察点: 架构设计、数据一致性、容灾能力
异地多活是最高等级的容灾方案,需要在多个地域同时提供服务。
核心难点:
- 如何实现数据同步?
- 如何调度流量?
- 如何解决数据冲突?
- 如何保证一致性?
技术方案:
- 数据同步(DTS、Canal)
- 流量调度(DNS、GSLB)
- 冲突解决(Last Write Wins、CRDTs)
- 最终一致性
相关技术栈:
如何设计服务降级系统
难度: 高级
标签: 降级策略、熔断、限流
考察点: 降级设计、自动化、监控
服务降级是保护核心系统的重要手段,在系统压力大时主动放弃非核心功能。
核心难点:
- 如何识别核心链路?
- 如何自动降级?
- 如何降级非核心功能?
- 如何快速恢复?
技术方案:
- 降级开关
- 熔断器(Hystrix、Sentinel)
- 限流保护
- 服务分级
相关技术栈:
如何设计灰度发布系统
难度: 高级
标签: 灰度发布、流量切分、回滚
考察点: 发布策略、风险控制
灰度发布通过逐步放量降低新版本上线风险。
核心难点:
- 如何切分流量?
- 如何监控效果?
- 如何快速回滚?
- 如何自动化灰度?
技术方案:
- 流量切分(按用户、按比例)
- 版本管理
- 监控验证
- 自动回滚
相关技术栈:
如何设计数据备份与恢复
难度: 高级
标签: 数据备份、灾难恢复、RPO/RTO
考察点: 备份策略、恢复能力
数据备份是容灾的基础,需要在成本和恢复能力间权衡。
核心难点:
- 如何设计备份策略?
- 如何保证备份可用?
- 如何快速恢复?
- 如何验证备份?
技术方案:
- 全量备份 + 增量备份
- 冷备份 vs 热备份
- PITR(Point-In-Time Recovery)
- 异地容灾
相关技术栈:
如何实施混沌工程
难度: 专家
标签: 故障注入、容错验证、韧性
考察点: 混沌实验、故障恢复
混沌工程通过主动注入故障验证系统的容错能力。
核心难点:
- 如何设计混沌实验?
- 如何控制爆炸半径?
- 如何自动验证恢复?
- 如何常态化演练?
技术方案:
- 故障注入(网络、CPU、内存、磁盘)
- 爆炸半径控制
- 自动回滚
- 常态化演练
相关技术栈:
- Chaos Mesh - K8s混沌工程
- Netflix Simian Army - 故障注入
学习路径
初学者(P5-P6)
推荐顺序:
- 数据备份与恢复 → 理解容灾基础
- 服务降级 → 学习降级策略
- 灰度发布 → 掌握发布流程
进阶者(P6-P7)
推荐顺序:
- 异地多活 → 理解高可用架构
- 完整的降级系统 → 自动化降级
- 灰度发布系统 → 风险控制
高级工程师(P7-P8)
推荐顺序:
- 大规模异地多活 → 全球化部署
- 混沌工程实践 → 韧性建设
- 全链路压测 → 容量规划
技术要点总结
高可用等级
| 等级 | 可用性 | 年故障时间 | 实现方案 |
|---|---|---|---|
| 2个9 | 99% | 3.65天 | 单机部署 |
| 3个9 | 99.9% | 8.76小时 | 主从架构 |
| 4个9 | 99.99% | 52.56分钟 | 同城双活 |
| 5个9 | 99.999% | 5.26分钟 | 异地多活 |
容灾级别
| 级别 | RTO | RPO | 成本 | 方案 |
|---|---|---|---|---|
| 冷备 | 小时级 | 小时级 | 低 | 定期备份 |
| 温备 | 分钟级 | 分钟级 | 中 | 主从同步 |
| 热备 | 秒级 | 秒级 | 高 | 双活架构 |
| 多活 | 0 | 0 | 极高 | 异地多活 |
降级策略
| 策略 | 说明 | 示例 |
|---|---|---|
| 功能降级 | 关闭非核心功能 | 关闭推荐、评论 |
| 服务降级 | 降低服务质量 | 降低搜索精度 |
| 读降级 | 返回兜底数据 | 返回缓存数据 |
| 写降级 | 异步处理 | 日志异步写入 |
常见问题
Q: 如何计算系统可用性?
A:
可用性 = MTBF / (MTBF + MTTR)
MTBF: 平均故障间隔时间
MTTR: 平均故障恢复时间
例如:
MTBF = 30天 = 720小时
MTTR = 1小时
可用性 = 720 / (720 + 1) = 99.86%Q: 异地多活如何解决数据冲突?
A:
- 避免冲突:按地域分片,同一数据只在一个地域可写
- Last Write Wins:按时间戳,最后写入的生效
- CRDTs:冲突无关数据结构
- 手动介入:记录冲突,人工处理
Q: 如何选择降级策略?
A:
- 识别核心链路:确定必须保证的功能
- 分级服务:P0核心、P1重要、P2普通
- 制定降级预案:每个服务的降级方案
- 演练验证:定期演练降级流程
相关技术栈
面试技巧
回答框架
理解需求(2分钟)
- 可用性目标(几个9)
- 业务影响
- 成本约束
架构设计(10分钟)
- 部署架构
- 容灾方案
- 降级策略
- 监控告警
细节讨论(8分钟)
- 故障检测
- 自动切换
- 数据一致性
- 恢复验证
成本分析(5分钟)
- 资源成本
- 维护成本
- ROI分析
提示:高可用设计的核心是权衡。更高的可用性意味着更高的成本,要根据业务价值选择合适的方案。面试中要能说清楚不同方案的成本和收益。
