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

分享 未结
1 1 0 13
小编 2018-10-26发布
收藏 点赞
来源:https://juejin.im/post/5af645f651882567105fd1b2

1 系统吞度量要素:

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

2 如何提高系统QPS?

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

2.1 增加并发数

  • 比如增加tomcat并发的线程数,开喝服务器性能匹配的线程数,可以更多满足服务请求。
  • 增加数据库的连接数,预建立合适数量的TCP连接数
  • 后端服务尽量无状态话,可以更好支持横向扩容,满足更大流量要求
  • 调用链路上的各个系统和服务尽量不要单点,要从头到尾都是能力对等的,不能让其中某一点成为瓶颈。
  • RPC调用的尽量使用线程池,预先建立合适的连接数。

2.2 减少平均响应时间

  • 请求尽量越前结束,越好,这样压力就不要穿透到后面的系统上,可以在各个层上加上缓存
  • 流量消峰。放行适当的流量,处理不了的请求直接返回错误或者其他提示。和水坝道理很类似
  • 减少调用链
  • 优化程序
  • 减少网络开销,适当使用长连接
  • 优化数据库,建立索引

最后,要优化的地方还有很多,上面只是列举常见一些要注意的地方,优化的指导原则就是:增加并发数 和 减少平均响应时间。

回帖
  • 消灭零回复