文章目录
- 深入理解 RPS(Requests Per Second)
- 一、什么是 RPS?
- 二、RPS 的核心意义
- 三、RPS 的简单理解
- 四、RPS 如何计算?
- 五、RPS 与并发的关系
- 1. 并发数
- 2. RPS
- 3. 二者关系
- 例子
- 六、RPS 与 QPS 的区别
- 1. RPS
- 2. QPS
- 3. 实际中经常混用
- 七、RPS 不等于性能一定好
- 举例
- 八、常见性能指标关系
- 1. Latency(延迟)
- 2. Throughput(吞吐量)
- 3. Error Rate(错误率)
- 4. P99
- 九、为什么系统会出现 RPS 瓶颈?
- 1. CPU 瓶颈
- 2. IO 瓶颈
- 3. 数据库瓶颈
- 4. 锁竞争
- 5. 下游服务限制
- 十、如何提升 RPS?
- 1. 提升并发能力
- 2. 减少请求耗时
- 3. 增加实例数量
- 4. 使用缓存
- 5. 使用连接池
- 十一、如何测试 RPS?
- wrk 示例
- 十二、Prometheus 中的 RPS
- 十三、网关中的 RPS
- 十四、真实互联网中的 RPS
- 十五、总结
深入理解 RPS(Requests Per Second)
在高并发系统、API 网关、微服务、Web 服务、负载均衡等领域中,RPS(Requests Per Second)是最常见、最核心的性能指标之一。
无论是:
- Nginx
- Kubernetes Ingress
- Kong / APISIX
- Prometheus
- 压测工具(wrk、hey、JMeter)
- 云服务监控平台
你都会频繁看到:
当前 RPS:12,000
峰值 RPS:80k
系统最大承载 RPS:150k
那么:
- RPS 到底是什么?
- 如何计算?
- 和 QPS(Queries Per Second 每秒查询率) 有什么区别?
- 为什么高 RPS 不一定代表系统快?
- 如何提升系统 RPS?
这篇文章带你系统理解。
一、什么是 RPS?
RPS 全称:
Requests Per Second
即:
每秒请求数
表示:
一个系统每秒能够处理多少个请求。
例如:
系统 1 秒处理了 5000 个 HTTP 请求则:
RPS = 5000二、RPS 的核心意义
RPS 本质上衡量的是:
系统吞吐量(Throughput)
也就是:
单位时间内处理工作的能力它通常用于衡量:
- Web 服务性能
- API 服务能力
- 网关吞吐量
- 微服务容量
- 数据库访问能力
- CDN 承载能力
三、RPS 的简单理解
可以把服务器想象成一家餐厅。
- 用户请求 = 顾客点单
- 服务端处理 = 厨房做菜
- 响应返回 = 上菜
如果:
1 秒钟完成 100 个订单那么:
RPS = 100RPS 越高:
- 系统单位时间处理能力越强
- 能承载更多用户
四、RPS 如何计算?
公式非常简单:
RPS = 总请求数 ÷ 总时间(秒)例如:
10 秒处理了 50,000 个请求则:
R P S = 50000 10 = 5000 RPS = \frac{50000}{10} = 5000RPS=1050000=5000
即:
RPS = 5000五、RPS 与并发的关系
很多人容易混淆:
- RPS
- 并发数(Concurrency)
它们并不是同一个概念。
1. 并发数
表示:
同时有多少请求正在处理中
例如:
同时有 1000 个请求未完成则:
并发数 = 10002. RPS
表示:
每秒完成多少请求
例如:
每秒完成 5000 个请求则:
RPS = 50003. 二者关系
经典公式:
C o n c u r r e n c y = R P S × L a t e n c y Concurrency = RPS \times LatencyConcurrency=RPS×Latency
其中:
- Concurrency = 并发数
- RPS = 每秒请求数
- Latency = 平均延迟(秒)
例子
假设:
- RPS = 2000
- 平均响应时间 = 100ms
即:
0.1 秒则:
C o n c u r r e n c y = 2000 × 0.1 = 200 Concurrency = 2000 \times 0.1 = 200Concurrency=2000×0.1=200
说明:
系统同时大约有 200 个请求正在处理中六、RPS 与 QPS 的区别
这是最常见的问题。
1. RPS
Requests Per Second:
每秒请求数
强调:
HTTP/API 请求2. QPS
Queries Per Second:
每秒查询数
通常用于:
- 数据库
- Redis
- Elasticsearch
- 搜索引擎
强调:
查询操作3. 实际中经常混用
很多互联网公司:
- QPS
- TPS
- RPS
会混着说。
例如:
网关 QPS 10w实际上可能就是:
RPS 10w七、RPS 不等于性能一定好
这是一个非常关键的点。
很多系统:
RPS 很高但:
用户体验很差为什么?
因为:
RPS 只代表吞吐量,不代表延迟。
举例
系统 A:
- RPS:10000
- 延迟:5ms
系统 B:
- RPS:10000
- 延迟:2s
虽然:
RPS 一样但:
用户体验天差地别因此:
性能评估不能只看 RPS。
还要结合:
- Latency(延迟)
- P99
- 错误率
- CPU
- 内存
- IO
一起看。
八、常见性能指标关系
1. Latency(延迟)
表示:
单个请求耗时
例如:
50ms2. Throughput(吞吐量)
表示:
单位时间处理量
RPS 就属于吞吐量指标。
3. Error Rate(错误率)
表示:
请求失败比例
例如:
5xx 比例4. P99
表示:
99% 请求耗时低于某值
例如:
P99 = 300ms说明:
99% 请求都在 300ms 内完成九、为什么系统会出现 RPS 瓶颈?
系统无法继续提高 RPS,通常意味着:
某个资源达到瓶颈。
常见包括:
1. CPU 瓶颈
例如:
- JSON 序列化
- 加密解密
- gzip
- 正则匹配
CPU 打满后:
RPS 无法提升2. IO 瓶颈
例如:
- 磁盘 IO
- 网络 IO
- 数据库 IO
3. 数据库瓶颈
最常见。
例如:
SELECT*FROMordersWHEREuser_id=?没有索引。
导致:
- 查询慢
- 连接池耗尽
- RPS 下降
4. 锁竞争
例如:
- synchronized
- mutex
- Redis 分布式锁
大量线程等待锁。
5. 下游服务限制
例如:
你的服务能 5w RPS但:
下游服务只能 2k RPS整个链路就被限制。
十、如何提升 RPS?
1. 提升并发能力
例如:
- 协程
- 异步 IO
- Event Loop
- Reactor 模型
典型:
- Nginx
- Netty
- Node.js
2. 减少请求耗时
因为:
R P S ≈ C o n c u r r e n c y L a t e n c y RPS \approx \frac{Concurrency}{Latency}RPS≈LatencyConcurrency
Latency 越低:
RPS 越高优化包括:
- SQL 优化
- 缓存
- 减少远程调用
- 批量处理
3. 增加实例数量
横向扩展:
1 台机器:1w RPS 10 台机器:10w RPS典型:
- Kubernetes HPA
- Auto Scaling
4. 使用缓存
例如:
- Redis
- CDN
- 本地缓存
减少数据库压力。
5. 使用连接池
例如:
- 数据库连接池
- HTTP KeepAlive
- gRPC 长连接
减少连接建立成本。
十一、如何测试 RPS?
常见压测工具:
| 工具 | 特点 |
|---|---|
| wrk | 高性能 HTTP 压测 |
| hey | Go 编写,简单易用 |
| JMeter | 功能强大 |
| k6 | 云原生压测 |
| Locust | Python 压测框架 |
wrk 示例
wrk-t8-c1000-d30shttp://localhost:8080含义:
- 8 个线程
- 1000 并发连接
- 压测 30 秒
输出:
Requests/sec: 35214.89这就是:
RPS = 35214十二、Prometheus 中的 RPS
Prometheus 常见写法:
rate(http_requests_total[1m])含义:
最近 1 分钟内每秒请求增长速率本质上:
RPS十三、网关中的 RPS
API Gateway 非常关注 RPS。
例如:
- Kong
- APISIX
- Envoy
- Nginx
因为网关是:
流量入口
高 RPS 能力意味着:
- 更高吞吐
- 更强扩展性
- 更低成本
十四、真实互联网中的 RPS
一些大规模系统的量级:
| 系统 | RPS |
|---|---|
| 小型博客 | 几十 |
| 企业后台 | 几百 ~ 几千 |
| 电商活动 | 几万 |
| 大型 API 网关 | 十万级 |
| CDN 边缘节点 | 百万级 |
十五、总结
RPS 是系统性能领域最核心的指标之一。
它表示:
系统每秒能够处理多少请求。
核心公式:
R P S = R e q u e s t s T i m e RPS = \frac{Requests}{Time}RPS=TimeRequests
以及:
C o n c u r r e n c y = R P S × L a t e n c y Concurrency = RPS \times LatencyConcurrency=RPS×Latency
需要记住:
高 RPS ≠ 低延迟
高吞吐 ≠ 好体验
RPS 必须结合:
- Latency
- P99
- Error Rate
- CPU
- IO
一起分析
在现代云原生与微服务架构中:
RPS 已经成为衡量系统容量与架构能力的基础语言。