日期:2026-07-12
标签:#面试 #八股 #后端 #容量规划 #场景题
一句话答案
不能只按配置大小选,应根据应用 CPU/内存画像、单实例故障域、扩缩容粒度、成本和压测结果决定;通常更多中小实例弹性和容灾更好,但存在基础开销。
面试口语版
两种配置 CPU:内存比例相同,我会先看应用是 CPU 密集、内存密集还是 I/O 密集,以及 JVM 堆、线程、连接和目标 QPS。若比较一台 8C16G 与两台 4C8G,在总资源相同下,两台机器故障域更小、滚动发布和水平扩容更灵活,但会多一份 JVM、缓存和连接池开销;单台 8C16G 内存池更大、共享缓存效率高,适合单任务需要大堆或无法拆分的场景。最终用生产数据压测每元成本、P99 和故障演练结果选型。
决策维度
- 单实例最小堆、CPU 峰值和 GC 行为。
- N+1 容量与单机故障影响。
- 数据库连接、许可证和运维成本。
- 云实例网络/磁盘基线与突发能力。
- 扩缩容速度和部署密度。
关键细节
- CPU 核数翻倍不代表吞吐线性翻倍。
- 大堆可能降低实例数,但 GC 与恢复成本更高。
- 小实例过多会增加连接池总数和缓存重复。
- 选型应按“满足 SLO 的单位成本”比较。
面试官追问
- 为什么多台小机器通常容灾更好?
- 哪些场景必须选大内存实例?
- 压测时重点观察什么?
面试官追问参考答案
1. 为什么多台小机器通常容灾更好?
单台故障损失的容量比例更低,负载均衡可把流量转到其余实例,滚动升级也更细粒度。前提是剩余实例满足 N+1 容量,且状态已外置。
2. 哪些场景必须选大内存实例?
单进程工作集无法拆分、模型或索引必须整体驻留、单批任务需要大内存,或本地缓存命中收益远大于重复开销时。仍需评估大实例故障后的重建时间和备用容量。
3. 压测时重点观察什么?
在同等总成本下比较稳定吞吐、P99/P999、CPU 饱和、GC、内存水位、网络/磁盘和错误率,并测试单实例下线后的容量。不能只看平均 QPS。
学习清单
- 能从容量、容灾和成本综合选型。
- 理解水平扩展的基础开销。