前言
笔者很早就接触了TPS&QPS这两个名词,所以在上学期间和人交流,一谈到项目的开发和项目的架构,一口一个QPS&TPS、高可用、高性能、高并发…….(其实就是个简单的管理系统)。
可能是随着年龄的增长,记忆越来越不好了(刚毕业)。每次在设计文档中看到TPS&QPS等名称,都无法立即反应过来这些名词有什么用。
嗯。这篇博文记录一些笔者的理解(主要是TPS&QPS&RPS)。
其实,不管是TPS、QPS还是RPS,大部分都与系统的性能有关。关于这块,读者们可以去看下关于性能压测的文章,里面有更多的名称,比如:VU、RT、IP、Throughput等。
什么是TPS?Transactions Per Second, 即每秒传输的事务处理个数
- 何谓事务?记住,该事务要与数据库的事务区分开。
- 在TPS中, 一个事务是指客户端向服务器发送请求,直到服务器做出反应的过程。
- TPS过程 = 客户端请求服务端+服务端处理逻辑+服务端响应客户端。
- 所以, 在性能测试中, 客户端发送请求时开始计时, 一直到收到服务端响应结束计时, 以此来计算该时间段完成事务的个数, 最终利用TPS做出评估。
什么是QPS?Queries Per Second, 即每秒处理查询的个数/率
- QPS是一台服务器,每秒能响应的查询次数。一般用来衡量服务器能在规定的时间内能处理多少流量的标准。
- 在QPS中,主要强调是服务器的处理能力。
TPS和QPS的例子:
很多文章里面,都可有可无地提到QPS和TPS的异同,比如QPS是特殊的TPS(笔者也没懂意思)。
TPS和QPS的关系,笔者想在此举个栗子:
比如,客户端发出一个网页的请求A。
服务端收到请求A后,进行内部处理(查询数据…),之后把查询的数据响应给客户端。
我们假设所有的请求和响应都是1s内处理完毕。
那么,客户端发出一个网页请求A,对于一个页面的一次访问请求,我们称之为TPS。
众所周知,对页面的发起一次请求,可能会对服务产生多次查询操作(css加载、js加载、数据渲染加载)。
那么,服务器产生的查询操作,可以计入QPS之列。
什么是RPS?Requests Per Second, 即每秒处理请求的个数
- 在性能压测中, 有个Little定律定义了:并发数、RPS和RT之间的关系。
- 并发数 = RPS * RT
- 其中RT = 响应时间
- 所以 RPS = 并发数 / RT。
- 一般在使用RPS描述一个系统的时候,指的是某个并发用户下单位时间内能处理的最大请求数。
总结
TPS:强调事务, 即请求发起和请求响应的处理过程。
QPS:强调查询,一般一个TPS, 对应N个QPS。
RPS:强调并发数,一般用于衡量系统的吞吐率。
在开发层面来说:
TPS:一次业务接口的调用。
QPS:一次方法调用。