文章目录
- 概述
- 基础概念
- 性能指标
- 利特尔法则(O = T × L)
- 系统优化策略
- 1. 降低耗时(L↓)
- 2. 增加容量(O↑)
- 3. 增加时延(L↑)
- 场景化指标选择
- 响应时间优先
- 吞吐量/容量优先
- 平衡策略
概述
一个高性能系统的架构需要在客户端请求、网络静态缓存(如CDN)、网络接入、业务逻辑、数据缓存以及数据存储方面
进行优化。接下来我们主要从这些方面来介绍如何实现一个高性能的架构。不过在进入具体的优化内容之前,我们需要先了解一下系统的高性能指标。
基础概念
性能指标
-
响应时间(RT):请求从发起到接收响应的总耗时,包括网络传输、排队和执行时间。
响应时间也称为响应时延(response latency,RT),是指从客户端发送一个请求到客户端接收到服务器端返回的响应结果所经历的时间,响应时间由请求发送时间、网络传输时间和服务器处理时间3部分时间组成。
-
并发数(O):系统同时处理的请求数,反映系统容量。
并发数:并发数也叫并发度,是指系统同时处理的请求数、事务数或者用户数等,不同场景下的统计方式有些许差别。
-
吞吐量(T):单位时间处理的请求量(如QPS、TPS)
吞吐量:吞吐量(throughput)也可以理解为吞吐率,即每秒处理的信息值,例如每秒事务数(transactions per second,TPS)、每秒请求数(HTTP requests per second,RPS)、每秒查询数(queries per second,QPS)等。
利特尔法则(O = T × L)
揭示了并发数(O)、吞吐量(T)和响应时间(L)的动态关系。
-
初始阶段:吞吐量提升可增加并发数(O↑= T↑L)。
-
饱和阶段:吞吐量达上限时,响应时间增加,导致请求堆积(O↑= T×L↑),需通过限流或扩容避免系统崩溃。
利特尔法则(Little’s law)由麻省理工学院的John Little教授提出并证明,它是基于排队论(queuing theory)发展而来的。
利特尔法则的内容是:在一个稳定的系统中,长时间观察到的平均顾客数量L等于长时间观察到的有效到达速率λ与平均每个顾客在系统中花费的时间W的乘积,即L=λW。
将利特尔法则应用到3个性能指标中:O =TL
其中,
- O代表容量,即系统同时容纳的请求或者数量,可以理解为并发数;
- T代表吞吐量;
- L代表响应时延。
系统优化策略
1. 降低耗时(L↓)
-
减少排队时间(TQ↓):
- 缩短队列长度:如调整Tomcat的
acceptCount
限制请求积压。 - 异步处理:将耗时操作异步化(如消息队列),避免阻塞主线程。
- 缩短队列长度:如调整Tomcat的
-
减少执行时间(TE↓):
- 优化算法:如使用更高效的数据结构或缓存计算结果。
- 并行处理:增加线程池大小(如Tomcat的
maxThreads
)或利用分布式计算。 - 资源升级:使用更快的硬件(如SSD、高性能CPU)。
示例:商品详情页通过CDN缓存静态资源、优化数据库索引,将响应时间从200ms降至50ms,提升用户体验。
2. 增加容量(O↑)
- 水平扩展:通过负载均衡横向添加服务器,提升整体吞吐量。
- 垂直扩展:升级单机资源(CPU、内存)以处理更多请求。
- 资源复用:使用连接池、线程池减少资源创建开销。
示例:双十一期间,通过弹性扩容云服务器集群,将并发处理能力从10万QPS提升至百万级。
3. 增加时延(L↑)
- 允许合理排队:通过延长队列(如消息队列积压)暂时容纳突发流量,避免直接拒绝请求。
- 削峰填谷:将高峰流量缓冲至队列,后端按固定速率消费。
示例:购票系统在抢购时引导用户进入排队页面,提示“当前排队人数较多”,缓解瞬时压力。
场景化指标选择
响应时间优先
- 适用场景:实时交互系统(如在线游戏、视频会议)、API服务。
- 优化手段:
- 缓存:使用Redis缓存热点数据,减少数据库访问。
- CDN加速:静态资源就近分发,降低网络延迟。
- 数据库优化:添加索引、分库分表减少查询耗时。
吞吐量/容量优先
- 适用场景:日志处理、批量任务、高并发抢购。
- 优化手段:
- 异步化:通过Kafka解耦生产与消费,提升吞吐量。
- 无状态设计:便于水平扩展,如微服务架构。
- 限流与降级:通过Sentinel或Hystrix保护核心链路,确保系统不崩溃。
平衡策略
- 动态调整:根据流量波动自动扩缩容(如Kubernetes HPA)。
- 资源隔离:关键业务与非关键业务使用独立资源池,避免相互影响。