vlambda博客
学习文章列表

Java技术篇 - 来谈谈吞吐量(TPS)、QPS、并发数、响应时间的概念

这些概念,对于初入职场的小伙伴来说,可能不知道是啥概念,可能有听过,但没有详细了解过。或者在面试的过程中,面试官不经意的问起,可能就答不上来。

为了便于了解,通过查找资料及总结,来介绍下这几个概念。


吞吐量

是指对网络、设备、端口、虚电路或其他设施,单位时间内成功地传送数据的数量(以比特字节、分组等测量)。对于程序开发来说,一般是指系统在单位时间内能处理的请求数量,这个指标一般用于衡量并发系统的一个性能指标,对于无必发的系统来说,这个指标意义不大(对于无并发的应用系统而言,吞吐量与响应时间成严格的反比关系,实际上此时吞吐量就是响应时间的倒数)。


从定义上看,吞吐量一般受应用系统的资源,接口的处理时长,网络的带宽及网络延时等因素影响。在一个应用系统中,如果单个用户在使用系统时的平均时间是 T,当有N个用户同时使用系统时的平均时间并不是N*T,可能比N*T 大, 也有可能比N*T 小,这是因为在同一个系统中,可能某些资源是可以共用的,不需要重复执行的过程(减少时间),可能某些资源是独占性的,多个请求时需要排队处理。


如果要提高吞吐量,一种是提高CPU的核数(并行执行的能力)、一种是抽取共用的处理过程(减少重复花时间去执行),比如采用异步处理的能力(spring webflux,vertx),一种是减少接口的数据的处理时长,采用缓存(redis),减少IO(系统的慢,最终都是体现在IO的处理上,实际的代码处理逻辑并不占用太多时间)。


响应时间


响应时间会直接影响到用户的体验,一个系统的响应时间越短,用户的浏览体验性会更好,相反的,如果响应时间太长,相当于打开一个页面,要等很长的时间(超过10s),那样的体验将会很糟糕。当然,也要从系统的功能来讨论响应时间,而不一概而论,比如对于用户购物体验的电商平台/APP,响应时间尽量控制在3s以内,如果是提供报表/数据查询的服务,一般控制在不超过10s,最后提供交互的效果。


并发用户数

  并发用户数是指系统可以同时承载的正常使用系统功能的用户的数量。与吞吐量相比,并发用户数是一个更直观但也更笼统的性能指标。实际上,并发用户数是一个非常不准确的指标,因为用户不同的使用模式会导致不同用户在单位时间发出不同数量的请求。一网站系统为例,假设用户只有注册后才能使用,但注册用户并不是每时每刻都在使用该网站,因此具体一个时刻只有部分注册用户同时在线,在线用户就在浏览网站时会花很多时间阅读网站上的信息,因而具体一个时刻只有部分在线用户同时向系统发出请求。这样,对于网站系统我们会有三个关于用户数的统计数字:注册用户数、在线用户数和同时发请求用户数。由于注册用户可能长时间不登陆网站,使用注册用户数作为性能指标会造成很大的误差。而在线用户数和同事发请求用户数都可以作为性能指标。相比而言,以在线用户作为性能指标更直观些,而以同时发请求用户数作为性能指标更准确些。

QPS每秒查询率(Query Per Second)

  每秒查询率QPS是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准,在因特网上,作为域名系统服务器的机器的性能经常用每秒查询率来衡量。对应fetches/sec,即每秒的响应请求数,也即是最大吞吐能力。(看来是类似于TPS,只是应用于特定场景的吞吐量)

<end>