当前位置: 首页 > news >正文

QPS、TPS、RT 之间关系

问题

开发过程中,不免会遇到评价系统性能的指标,如:QPS 和 TPS 都是“每秒多少次”,到底有什么区别?这几个概念容易产生混淆,在此梳理一下

一、 基础定义

首先,我们明确三者的定义

  • QPS (Queries Per Second):每秒查询数,通常用于描述系统对请求的处理能力(如接口调用次数)。
  • TPS (Transactions Per Second):每秒事务数,通常用于事务性系统(如支付、下单),一个事务可能包含多个请求。对于简单查询:TPS ≈ QPS
  • RT (Response Time):响应时间,指从请求发出到响应完成的耗时(一般取平均值或 P95、P99)。

可以用一个公式来直观感受:·QPS×RT≈并发数

这就是著名的 Little 定律(利特尔法则)的简化形式。我们也可看出:

  • TPS 是更高层的业务指标,QPS 是更底层的技术指标;
  • RT 直接影响 QPS 和 TPS 的实际表现。

二、场景示例

假设我们有一个电商系统:

  • 用户请求下单接口 /order。
  • 每次下单请求需要经过 库存检查 → 创建订单 → 扣减库存 → 支付调用。
  • 我们规定:
    • 1个事务 (Transaction) = 完成一次下单操作;
    • 1个事务包含 3 个请求 (Request)(比如:查询库存、写订单、支付)。
      在这个过程中:
  • QPS 表示每秒钟处理多少个“接口请求”(如库存查询、订单写入);
  • TPS 表示每秒钟完成多少个“完整事务”(下单成功次数);
  • RT 表示每个请求的响应时间(平均耗时)。

三、模拟示例

我们写一个简单的压测程序,模拟并发请求,并统计 QPS、TPS 和 RT。

public class QPSDemo {// 模拟请求总数private static final int TOTAL_REQUESTS = 1000;// 模拟并发线程数private static final int THREAD_COUNT = 20;public static void main(String[] args) throws InterruptedException {ExecutorService executor = Executors.newFixedThreadPool(THREAD_COUNT);CountDownLatch latch = new CountDownLatch(TOTAL_REQUESTS);AtomicLong totalRt = new AtomicLong(0); // 请求总耗时AtomicLong requestCount = new AtomicLong(0); // 请求总数AtomicLong transactionCount = new AtomicLong(0); // 事务总数long startTime = System.currentTimeMillis();for (int i = 0; i < TOTAL_REQUESTS; i++) {executor.submit(() -> {long rtStart = System.currentTimeMillis();try {// 模拟一个事务包含3个请求for (int j = 0; j < 3; j++) {simulateBusinessLogic(j);requestCount.incrementAndGet(); // 每个请求计数}transactionCount.incrementAndGet(); // 每个事务完成一次} catch (Exception e) {e.printStackTrace();} finally {long rtEnd = System.currentTimeMillis();totalRt.addAndGet(rtEnd - rtStart);latch.countDown();}});}latch.await();long endTime = System.currentTimeMillis();long totalTime = endTime - startTime; // 总耗时double qps = requestCount.get() / (totalTime / 1000.0);double tps = transactionCount.get() / (totalTime / 1000.0);double avgRt = totalRt.get() * 1.0 / transactionCount.get();System.out.println("==== 性能指标结果 ====");System.out.println("请求总数 (Request): " + requestCount.get());System.out.println("事务总数 (Transaction): " + transactionCount.get());System.out.println("总耗时: " + totalTime + " ms");System.out.println("QPS: " + qps);System.out.println("TPS: " + tps);System.out.println("平均RT (每事务): " + avgRt + " ms");executor.shutdown();}// 模拟业务逻辑,每个请求大约耗时100msprivate static void simulateBusinessLogic(int step) throws InterruptedException {switch (step) {case 0: // 库存检查Thread.sleep(80);break;case 1: // 写订单Thread.sleep(100);break;case 2: // 调用支付Thread.sleep(120);break;default:Thread.sleep(50);}}
}

代码说明

  1. 模拟事务与请求映射关系:1个事务=3个请求,所以请求数≈事务数*3。
  2. QPS 计算:请求数 / 总耗时(s)。
  3. TPS 计算:事务数/总耗时(s)。
  4. RT 计算:所有请求耗时总和 / 请求数。

四、总结

总结来说:

  • QPS反映系统的技术吞吐能力;
  • TPS反映系统的业务处理能力;
  • RT反映系统对用户的响应体验;

三者相互制约,是性能优化和容量规划的核心参考指标。在性能调优或压测中,应同时关注这三者,通过控制并发数、优化请求耗时和合理限流,才能在吞吐量和响应速度之间找到最佳平衡。

http://www.dtcms.com/a/392635.html

相关文章:

  • Day27_【深度学习(6)—神经网络NN(4)正则化】
  • NeurIPS 2025 spotlight 自动驾驶最新VLA+世界模型 FSDrive
  • Nodejs+html+mysql实现轻量web应用
  • AI模型测评平台工程化实战十二讲(第二讲:目标与指标:把“测评”这件事说清楚(需求到蓝图))
  • 20.二进制和序列化
  • 接口自动化测试实战
  • 为企业系统无缝集成AI检测能力:陌讯AIGC检测系统API接口调用全指南
  • RESTful API
  • Linux知识回顾总结----进程间通信(上)
  • Qwen3-Next深度解析:阿里开源“最强性价比“AI模型,如何用3%参数超越全参数模型?
  • AutoResetEvent:C# 线程同步工具
  • ThinkSound - 阿里通义开源的AI音频生成模型
  • Wan2.2-S2V-14B:音频驱动的电影级视频生成模型全方位详解
  • 基于C++11手撸前端Promise——从异步编程到现代C++实践
  • 构建AI智能体:三十九、中文新闻智能分类:K-Means聚类与Qwen主题生成的融合应用
  • [vibe code追踪] 程序列表视图 | renderNodeList
  • 解决 `sudo rosdepc init` 报错:`command not found` 的完整指南
  • 大数据毕业设计选题推荐-基于大数据的气候驱动的疾病传播可视化分析系统-Hadoop-Spark-数据可视化-BigData
  • Maven 实战:多模块项目与高级打包配置
  • AI 精准绘图专栏:从描述到图像,让创意精准落地​
  • 基于C++11手撸前端Promise进阶——链式调用与组合操作(All/Race)的实现
  • 美国批准通用上市标准!加密货币ETF即将爆发?
  • 子查询及其分类
  • MySQL的存储引擎(一条sql语句的执行流程是什么样的?)
  • JavaScript学习笔记(二):遍历方法汇总
  • Ubuntu22.04显卡掉驱动,重装命令
  • 模式组合应用-享元模式
  • 租房小程序房产小程序源码方案详解
  • p-value与e-value
  • 面经分享--京东一面