QPS 和并发:如何衡量服务器端性能数据库
和并发相关不得不提的一个概念就是 QPS(Query Per Second),QPS 实际上是衡量吞吐量(Throughput)的一个经常使用指标,就是说服务器在一秒的时间内处理了多少个请求 —— 咱们一般是指 HTTP 请求,显然数字越大表明服务器的负荷越高、处理能力越强。做为参考,一个有着简单业务逻辑(包括数据库访问)的程序在单核心运行时能够提供 50 - 100 左右的 QPS,即每秒能够处理 50 - 100 个请求。后端
但 QPS 只能粗略地衡量请求的数量,彻底不关心服务器处理每一个请求的开销。例如一个命中缓存的请求和一个须要进行屡次数据库查询的请求的开销可能会有一个数量级的差距,因此 QPS 并不能十分精确地衡量服务器的负载或处理能力,所以咱们引入了一个很是抽象的概念 —— 并发。缓存
大部分请求的响应时间在 15 - 30 毫秒左右,这里的响应时间是指服务器处理这个请求所花费的时间,从客户端测量到的时间可能会稍长一些。想象若是服务器上只有一个 CPU 核心在逐个地在处理请求,若是每一个请求花费 15 毫秒的话,那么每秒能够处理 66 个请求,也就是咱们前面提到的 66 QPS;而若是都是复杂的请求,每一个须要 30 毫秒的话,那么服务器就只有 33 QPS 了。能够看到在处理能力不变的状况下(只有一个核心),响应时间越高,QPS 就越低。又若是在响应时间不变的状况下,若是咱们增长一个 CPU,QPS 就会翻倍,这三者之间的关系能够简单地描述成:吞吐量(QPS)= 并发数/平均响应时间[一个系统吞吐量一般由QPS(TPS)、并发数两个因素决定,每套系统这两个值都有一个相对极限值,在应用场景访问压力下,只要某一项达到系统最高值,系统的吞吐量就上不去了,若是压力继续增大,系统的吞吐量反而会降低,缘由是系统超负荷工做,上下文切换、内存等等其它消耗致使系统性能降低]。服务器
其实 CPU 的数量就是并发最基本的概念,即有多少个 CPU 在工做。固然在实际的服务器端环境中,咱们在 CPU 的基础上创建起了进程、线程、协程这样复杂的抽象、经过异步的 IO 提升 CPU 的利用率 —— 当须要从硬盘或网络读取数据时,CPU 会去作其余工做,因此并发和 CPU 的比值会比 1 高一些,IO 越多,这个比值会越高。网络
这时咱们能够观测到的并发数就是服务器在同时处理多少个请求,也即「并发链接数」。对于 Web 后端的场景来讲(而不考虑**等长连接的场景),咱们但愿尽快地给客户端响应,因此请求在服务器端花费的几十毫秒中每一毫秒都是必不可少的:多是在进行计算、也多是在向磁盘或网络读写数据,都在占用着服务器的资源,所以并发依然是衡量服务器负荷和处理能力的关键指标。并发
除了并发自己,咱们还常常提到「最大并发」的概念,最大并发就是在单位时间(一般是一天)里并发最高的那一刻有多少个 CPU 在为你工做。大部分应用的请求量并非均匀地分布在一天中的,由于用户们每每会集中在傍晚的几个小时中使用手机,这些时段中的请求量要远远高于凌晨。因此人人都但愿在傍晚获得更多的计算能力,但遗憾的是这些计算能力须要原子世界中的 CPU 去支持,你不可能在傍晚购买一批服务器而后在凌晨下掉(固然,这实际上是云计算要解决的问题),因此为了支撑傍晚的高并发,咱们必须去准备那么多的服务器、必须在凌晨让不少服务器闲置,所以其实咱们只关心一天中最高的并发数 —— 这表明了咱们须要采购多少硬件资源。
---------------------
做者:乐杨俊
来源:CSDN
原文:https://blog.csdn.net/leyangjun/article/details/64131491
版权声明:本文为博主原创文章,转载请附上博文连接!异步