如何提高系统的吞吐量(QPS/TPS)

一.系统吞度量要素:

一个系统的吞度量(承压能力)与request对CPU的消耗、外部接口、IO等等紧密关联。单个reqeust 对CPU消耗越高,外部系统接口、IO影响速度越慢,系统吞吐能力越低,反之越高。

系统吞吐量几个重要参数:QPS(TPS)、并发数、响应时间

QPS(TPS):每秒钟request/事务 数量

并发数: 系统同时处理的request/事务数

响应时间: 一般取平均响应时间

(很多人经常会把并发数和TPS理解混淆)

理解了上面三个要素的意义之后,就能推算出它们之间的关系:

QPS(TPS)= 并发数/平均响应时间 或者 并发数 = QPS*平均响应时间

举个例子:

银行窗口业务,早上8点上班,窗口数量为10个窗口,平均每个人办理业务的时候为5分钟。可以用下面的方法计算。

并发数=10个窗口

平均响应时间为 = 5*60 秒

QPS = 10/(5*60) 事务/秒

一个系统吞吐量通常由QPS(TPS)、并发数两个因素决定,每套系统这两个值都有一个相对极限值,在应用场景访问压力下,只要某一项达到系统最高值,系统的吞吐量就上不去了,如果压力继续增大,系统的吞吐量反而会下降,原因是系统超负荷工作,上下文切换、内存等等其它消耗导致系统性能下降。

决定系统响应时间要素

我们做项目要排计划,可以多人同时并发做多项任务,也可以一个人或者多个人串行工作,始终会有一条关键路径,这条路径就是项目的工期。

系统一次调用的响应时间跟项目计划一样,也有一条关键路径,这个关键路径是就是系统影响时间;

关键路径是有CPU运算、IO、外部系统响应等等组成。

二.如何提高系统QPS?

由前面的公式:QPS(TPS)= 并发数/平均响应时间 可以看出,要提高qps,我们必须做2个方面努力

2.1增加并发数

1.比如增加tomcat并发的线程数,开喝服务器性能匹配的线程数,可以更多满足服务请求。

2.增加数据库的连接数,预建立合适数量的TCP连接数

3.后端服务尽量无状态话,可以更好支持横向扩容,满足更大流量要求

4.调用链路上的各个系统和服务尽量不要单点,要从头到尾都是能力对等的,不能让其中某一点成为瓶颈。
5.RPC调用的尽量使用线程池,预先建立合适的连接数。

2.2减少平均响应时间

1.请求尽量越前结束,越好,这样压力就不要穿透到后面的系统上,可以在各个层上加上缓存

2.流量消峰。放行适当的流量,处理不了的请求直接返回错误或者其他提示。和水坝道理很类似

3.减少调用链

4.优化程序

5.减少网络开销,适当使用长连接

6.优化数据库,建立索引

最后,要优化的地方还有很多,上面只是列举常见一些要注意的地方,优化的指导原则就是

增加并发数 和减少平均响应时间




### JMeter 中吞吐量QPSTPS 的区别及关系 #### 吞吐量 (Throughput) 吞吐量是指单位时间内处理的工作量,具体到性能测试工具如 JMeter,则表示在特定时间段内完成的请求数。这可以被看作是系统能够承受的最大工作负载能力之一。通过调整并发用户数量和其他参数,可以在不同条件下测量服务器端口或应用程序的服务水平[^1]。 #### QPS(Queries Per Second) QPS 表示每秒钟执行成功的查询次数。当讨论的是数据库或者任何提供数据检索服务的应用程序时,“查询”特指一次有效的读取操作;而在更广泛的意义上讲,它也可以代表向 Web API 发送并成功接收回复的一次调用。对于某些类型的请求来说,如果它们不涉及复杂的业务逻辑处理而仅仅是简单的信息获取,那么此时 QPS 可能会接近甚至等于 TPS[^4]。 #### TPS(Transactions Per Second) TPS 是指一秒钟内系统所能处理的事物数目。事物在这里指的是一个完整的业务流程单元——比如提交订单、登录账户等复杂度较高的动作集合。因此,在大多数情况下,由于单个交易可能包含多个子步骤(例如多次HTTP 请求),所以实际观测得到的 TPS 值往往低于 QPS 或者单纯的 HTTP 请求数目统计结果。特别是在那些涉及到多层架构设计的企业级应用环境中尤为明显[^2]。 #### 关系说明 - 如果是对单一查询接口进行压力测试,并且该接口本身不会触发其他额外的服务调用,则在这种特殊情形下 TPS 将近似于 QPS。 - 对于较为复杂的交易过程而言,因为每一个事务可能会由若干个独立的操作组成,故其对应的 TPS 数字一般都会小于单纯基于网络层面定义出来的 QPS 指标。 - 此外,随着响应时间和延迟等因素的变化,即使是在相同的硬件配置和软件环境下,上述三个关键绩效指标之间的比例也可能发生改变。这意味着为了获得更加精确的结果评估,应当综合考虑多种因素的影响[^3]。 ```python def calculate_tps(samples, duration_seconds): """ 计算TPS """ tps = samples / duration_seconds return round(tps, 2) def calculate_qps(requests_per_second): """ 计算QPS """ qps = requests_per_second return round(qps, 2) ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值