3Release It!(第2版)

容量

容量规划

容量评估负载测试弹性伸缩资源管理

🎯 AI 时代的学习建议:不要只读理论。理解这一章的设计动机(为什么需要这个概念?)和边界条件(什么情况下会失效?)。当 AI 生成的代码涉及这些概念时,你能判断它是否用对了场景。AI 能帮你总结内容,但无法替代你亲手阅读、思考、建立直觉的过程。

第3章:容量(Capacity)

一、导读

1.1 本章学习目标

第3章讲解容量规划和资源管理。理解系统的容量限制,是防止生产事故的关键。

1.2 为什么第三章如此重要

很多生产事故的根因是容量不足——数据库连接耗尽、线程池满、内存溢出。正确的容量规划可以避免这些问题。

1.3 核心问题引导

如何评估系统的容量?

负载测试如何进行?

弹性伸缩如何实现?

资源管理有哪些最佳实践?


二、核心概念详解

3.1 容量评估

关键指标:
- QPS(每秒查询数)
- 响应时间(P50, P95, P99)
- 并发连接数
- 内存使用量
- CPU 使用率
- 磁盘 I/O

3.2 负载测试

java
// 使用 JMeter 或 Gatling 进行负载测试
// 模拟真实用户行为
// 逐步增加负载
// 观察系统表现

// 关键指标
// - 吞吐量:系统每秒处理的请求数
// - 响应时间:请求从发出到收到响应的时间
// - 错误率:失败的请求比例
// - 资源利用率:CPU、内存、磁盘、网络的使用率

3.3 弹性伸缩

水平扩展:增加更多实例
- 优点:简单、线性扩展
- 缺点:需要无状态设计

垂直扩展:升级单个实例的配置
- 优点:简单
- 缺点:有上限、成本高

自动伸缩:根据负载自动调整实例数
- 基于 CPU 使用率
- 基于请求队列长度
- 基于自定义指标

3.4 资源管理

连接池:
- 数据库连接池:HikariCP
- HTTP 连接池:Apache HttpClient
- 线程池:ThreadPoolExecutor

关键参数:
- 最大连接数
- 最小空闲连接数
- 连接超时时间
- 空闲连接存活时间

三、实战案例

3.1 容量规划

场景:电商平台大促

预估流量:
- 日常 QPS:1000
- 大促峰值 QPS:10000(10倍)

容量规划:
- 应用服务器:10台 → 50台
- 数据库:读写分离,3个从库 → 5个从库
- 缓存:Redis 集群扩容
- CDN:增加带宽

负载测试:
- 模拟 10000 QPS
- 观察响应时间和错误率
- 找到瓶颈并优化

四、本章小结

容量规划是生产就绪的关键。通过负载测试评估系统容量,使用弹性伸缩应对流量峰值,合理管理连接池和线程池资源。


五、思考与练习

如何评估系统的最大容量?

负载测试如何进行?

水平扩展和垂直扩展如何选择?

连接池大小如何设置?

如何处理突发流量?


3/7容量
0%