Skip to content
返回架构决策

扩展模式

让系统增长的架构形状——垂直、水平、分片、分区——及各自适用时。

为什么

扩展非一事——垂直(更大盒)、水平(更多盒)、分片(按键拆)、读副本(读写拆)各解不同瓶颈且各不同成本。选错模式浪费钱且常不修瓶颈(如写吞吐受限时加读副本)。知模式及权衡让你选最便宜且真解极限的,并排序使不在耗尽水平(最便宜)前分片(最贵)。

何时使用

当组件触极限。半天选+实现。每 10 倍增长重访。

如何做

1. 识别瓶颈:CPU、内存、连接、DB 写、DB 读、存储?
2. 模式配瓶颈:
   - CPU/内存受限、无状态 → 水平(加实例)
   - CPU/内存受限、有状态 → 垂直(更大实例)后分片
   - DB 读受限 → 读副本
   - DB 写受限 → 按键分片,或移到写优化存储
   - 存储受限 → 按时间分区(冷存)或按租户分片
3. 先用最便宜且修瓶颈的模式
4. 前后测;瓶颈没动说明选错
5. 规划下个极限——此修后 10 倍时什么破?

示例

瓶颈:DB 写吞吐 8k 写/秒(此实例 Postgres 极限)

按成本序选项:
  1. 垂直:r5.2xlarge → r5.4xlarge → ~12k 写/秒,+$400/月  ← 最便宜
  2. 连接池(pgbouncer):释放写槽 → ~10k,+$20/月
  3. 按 user_id 分片:2 片 → ~16k 写/秒,+$500/月 + 迁移
  4. 写移 Cassandra:~50k 写/秒,+$2k/月 + 重写

选:pgbouncer(2)+ 垂直(1)→ 15k 写/秒,+$420/月。
分片推迟到需 30k 写/秒(给 2 年)。

常见问题

  • ⚠在耗尽垂直+水平前分片——分片是最贵扩展(跨片查询、再均衡)且常过早。

最佳实践

  • ✓扩展前后必测瓶颈——"加了实例感觉快了"不是验证。
  • ✓选均匀分布写且聚相关数据的分片键——坏分片键造热片和跨片 join。

相关资源