如何提高系统的吞吐量(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.优化数据库,建立索引


上一篇:吞吐量(TPS)、QPS、并发数、响应时间(RT)概念


下一篇:jmeter性能测试的经验总结