📊可用性指标:几个 9
可用性 = 正常运行时间 / 总时间。业界用"几个 9"衡量,每多一个 9 难度指数级上升。
| 可用度 | 年停机 | 典型级别 |
|---|---|---|
| 99%(2个9) | 约 87.6 小时 | 普通单机 |
| 99.9%(3个9) | 约 8.8 小时 | 基本高可用 |
| 99.99%(4个9) | 约 52 分钟 | 企业级 |
| 99.999%(5个9) | 约 5 分钟 | 电信/金融核心 |
核心公式:可用性靠"减少故障概率 × 缩短恢复时间"。也就是冗余(别让单点) + 快速故障转移(Failover)。MTTR(平均恢复时间)比 MTBF(平均故障间隔)往往更可控。
🔁冗余与故障转移
主备(Active-Standby)
一台主(处理流量),一台备(待命)。主挂,备顶上。简单,但备平时闲置,资源利用率低。
双活 / 多活(Active-Active)
多节点同时服务,互为主备。资源利用率高,但数据一致性、冲突处理更复杂(见"异地多活")。
故障转移(Failover)
依靠健康检查 + 选主/路由自动切换。如通过 Keepalived/VRRP 漂移 VIP,或注册中心摘除故障节点。
关键:故障转移必须自动且可重入。手动切=人为瓶颈;切过去还要能切回来(回切)而不丢数据。
🏗️容灾等级(距离递进)
递进逻辑:故障域越小越能容。单机房(断电/火灾)→ 同城多机房(楼宇级)→ 异地(城市级灾难、断网)。越往上,数据同步延迟越大、一致性越难。
🌐异地多活
多地数据中心同时对外服务,任一地故障,流量切到其余地,用户无感。这是高可用的"天花板"方案,也最难。
三大难点
① 数据一致性:跨地域网络延迟高(几十~上百 ms),强一致代价巨大,通常用"单元化路由 + 最终一致"。
② 路由与就近:用户请求要被引导到最近/健康的机房(DNS、GSLB、任意播)。
③ 冲突与回切:多地写同一数据会冲突,需"单元封闭"——让相关数据收敛到同一机房处理。
单元化(Cell)是核心思路:把用户按维度(如用户ID取模)划分到固定机房,其全链路数据都在该单元内闭环,跨单元交互降到最低。这样每个单元近似"独立小系统",容灾切换干净。
🧠💥脑裂(Split-Brain)
网络分区导致集群被切成两半,每半都以为自己是"老大",同时对外服务、同时写数据,恢复后数据冲突撕裂。
防脑裂三板斧:
Quorum(多数派):只有获得超过半数节点认可的节点才能成为主。两半里必有一半不足半数,无法同时当选。
fencing(围栏):夺主后对旧主"断电/隔离"(如关端口、吊销租约、STONITH 关机),保证旧主真的不再写。
租约(Lease):主角色带有时效租约,过期未续约自动失效,避免"假死主"长期霸占。
经典坑:"双机房各 50% 节点"最易脑裂——网络抖动时两边都是半数,都以为自己是多数。所以集群节点数应取奇数,且跨机房部署要算好 quorum 容错度。
🧪演练与 SLA
混沌工程 / 故障演练
高可用不是"配置了就高可用",要主动注入故障(杀节点、断网、延迟)验证真实恢复能力。Netflix 的 Chaos Monkey 是鼻祖。
SLA / SLO / SLI
SLI:实际指标(如成功率、延迟)。
SLO:目标值(如 99.95% 请求 < 200ms)。
SLA:对用户的承诺+违约补偿(如赔代金券)。容灾设计要能撑住 SLO。
记住:"没有演练过的高可用都是纸面高可用"。定期做"真实切库/切机房"演练,才能在上线后真扛得住。
🎯面试要点速记
指标:可用性=几个 9;靠降 MTTR + 冗余;公式=减少故障×加速恢复。
冗余:主备 / 多活;故障转移要自动、可重入、能回切。
容灾等级:同机房 → 同城双活 → 异地多活,故障域递进。
异地多活:难点在数据一致+路由+冲突;核心解法是单元化。
脑裂防护:Quorum + Fencing + Lease;集群用奇数节点。
验证:混沌演练 + SLI/SLO/SLA 闭环。
必考题:"怎么防止脑裂?"——多数派选举(不足半数不能成主)+ 围栏(夺主后立即隔离旧主)+ 租约过期。三者配合,缺一不可。