N+1 冗余是什么?到底需要几台机器?
更新时间:2026-09-19。短答页。
一句话回答
N 是正常承载峰值流量所需的最少实例数,N+1 就是在此之外多备一台,使任意一台故障时剩余机器仍能扛住全部流量。 需要几台 = 峰值所需实例数向上取整再加 1。
怎么算
bash
单台安全容量 = 10k QPS;业务峰值 = 25k QPS
N = ceil(25000 / 10000) = 3 台(承载所需)
N+1 = 4 台(允许坏 1 台)
坏 1 台后剩 3 台 × 10k = 30k ≥ 25k ✅| 等级 | 实例数(N=3 为例) | 容忍同时故障 | 典型用途 |
|---|---|---|---|
| N | 3 | 0 | 可随时重建的无状态批处理 |
| N+1 | 4 | 1 台 | 最常见在线服务 |
| N+2 | 5 | 2 台/发布期容错 | 核心、跨故障域 |
| 2N | 6(翻倍) | 整组 | 数据库主备、金融核心 |
为什么平时不能把机器跑满
4 台集群若平时跑到总容量的 90%,一台挂了剩 3 台要接 120% 的流量,立刻被压垮并连锁雪崩。所以规划峰值 ≤ N 台容量(即坏一台之后的剩余容量),平时利用率上限约 N/(N+1),N=3 时约 75%。这层账见 N+1 容量怎么算。
几个易混点
- 多一台机器 ≠ 高可用:没有健康检查和自动摘除/切换,机器挂了要人肉切,MTTR 很长不算真正冗余。
- 无状态适合 N+1 多活(负载均衡自动分发);有状态(数据库)常用主备 + 哨兵/仲裁防脑裂。
- 冗余要跨故障域:4 台在同一台宿主机/同一机架/同一机房,电源或交换机一挂全没,等于没冗余。
- 发布期再算一次:滚动发布时本来就少一台,此时再坏一台,N+1 就失去保护,所以核心常用 N+2。
坑
- 按平均流量而非峰值算 N,大促时一坏就超容。
- 备机规格缩水、平时不接流量也不演练,真切换时扛不住。
- 主备共用网络/电源,相关故障让「+1」失效。
- 只在应用层做冗余,DB、缓存、负载均衡本身仍是单点。
总结
N+1 指在承载峰值所需的 N 个实例外多备一个,使单点故障后剩余 N 台仍能接全部流量,所需机器数为峰值需求除以单机安全容量向上取整再加一,同时必须把平时利用率压在约 N/(N+1)、配合自动健康检查与跨故障域部署才算数;要容忍发布期叠加故障或跨机房用 N+2,数据库等有状态组件则用主备加仲裁防脑裂。