TPS 与 QPS

TPS 与 QPS,第1张

TPS (Transaction per second),每秒事务数。计算公式:TPS = 事务的数量 / 执行总时间。

例如:10秒内执行了2个事务,那么TPS = 2 / 10 = 02 ,那么每个事务的响应时间就为5s。
QPS(Queries per second),每秒查询数。计算公式:QPS = 每日的访问量 / 每日 = 当日请求总数 / (60s 60min 24h )

日PV = QPS (60s 60min 24h ) = QPS 86400

如果我们要根据一个固定的日活跃PV数,一台机器有固定的QPS值,来计算所需要的服务器数量的话,需要知道下面两个计算概念:

峰值QPS = 每天的总PV数 08 / 86400 02      ——      这个含义为每天80%的访问量集中在20%的时间里。

服务器数量 = 峰值QPS / 单台机器的QPS

假设有5000000的日PV,那么峰值QPS = 5000000 08 / 86400 02 = 231

假设一台机器的固定QPS为40,那么就需要231/40 = 6(个)服务器。

(对 TPS 和 QPS 的初步了解,欢迎各位读者补充和指正)

当TPS曲线如果变化缓慢或者有平坦的趋势,说明服务器开始出现瓶颈。解析:tps 曲线会变平坦的原因是因为系统处理事务的线程数往往是固定的一个数值。(一般是由程序设定或者服务器配置决定),假设响应时间是固定的一个值时,那么每秒 中系统能够处理的事务数是固定的数值。不会因为压力的增大,TPS也会一直增大。实际上,响应时间并不是一个固定的值,而是随着压力变大,响应时间往往会 增加。那么,实际上,系统最大的TPS值,往往会比根据基准值估算出来的TPS要小。

本质上集群部署并没有提高性能,性能看起来提高只是附加属性。

集群的主要目的有两个:

避免单点问题

扩容

单点问题

假设没有集群部署,那么就是说只有一台Server对外提供服务,如果这个Server挂掉了,那么所有的客户端就没办法访问了。

如果进行了集群部署,假设两台,通过IPhash的方式进行负载均衡,那么当其中一台Server挂掉了,那么只有大概一半的客户端受到影响(如果所有客户端都恰巧hash到了挂掉的那个Server,那就没办法了)。

如果路由有故障转移机制,那么基本可以保证一台Server挂掉了,客户端没有影响。

扩容

再说扩容,一台Server能对外提供的最大负载是一定的。当客户端数量超过了Server的最大负载时,那么就可能导致Server挂掉,或者客户端响应缓慢甚至没有响应的问题。

通过集群部署,可以增加最大客户端数量。假设一台Server能同时支持1000个客户端访问,那两台Server理论就能支持2000个客户端同时访问。

性能

上面说了,集群部署并没有提高性能。集群只是多开通了通道。

举个例子,假如有个水池,原来一个水管向水池里注水,集群部署后就是多个水管向水池里注水。单个水管的速度并没有变化,但是流量变大了。

看起来性能提高的原因是,性能一般是通过TPS/QPS来定义的,也就是一秒内完成的请求数量。

集群后,因为流量大了,那么TPS肯定就高了。

但是,TPS/QPS计算的是系统的最大可运行负载。就是一个系统在这个负载下可以正常的长时间对外服务,超过了这个负载就可能导致响应变慢或没有响应、甚至导致服务器直接挂掉。而一般情况下都会做冗余,所以系统基本不会长时间运行在最大可运行负载下。

所以一般情况下集群对性能的影响有限,极端情况还可能降低性能。假设一台Server能支持1000个客户端,你部署了两台Server,而实际只有10个客户端进行访问,远达不到单台Server的负载,加上集群需要路由算法,可能性能上就比单台Server稍微慢了一点点。

网络带宽影响redis效率。对于100M的内网,redis单链接每秒处理约2000请求,当带宽被占用30到40M时,处理数降为约500,使用netperf工具将带宽占满,处理数降为250。因此,带宽必须足够大才能确保redis效率恒定。
对所需内网带宽的估算。测试环境中,3x2000TPS占用约30M带宽(5kB/s)。如果需求为10W TPS,则占用约500M带宽,因此总带宽应在5000M以上才能保证redis速率波动在10%以内。
log影响收包速率。在log完全打开时收包速率始终无法超过1500TPS,关闭绝大部分log,收包TPS可以突破5000。分析,单看CPU占用率,log完全打开时,CPU占用率并没有特别明显上升,因此不觉得会影响收包,实际情况因该是log占用大量io *** 作,影响了收包速率。同样问题在消息模拟器也出现了,不同的是,影响的是发包速率。
业务进程数以及比例影响TPS。
使用redid-benchmark测试redis速率要注意,因该在实际网络环境下测试,并且最好是使用redis的系统在运行中,这样的测试结果才有实际参考意义。
优化一般分两步,单进程函数CPU占用率,和并发系统效率。
单redis和redis集群比较。单从速度来说,前者速率稍慢,且单redis CPU 常常成为瓶颈。以3个主机对一个redis或集群为例:
对于单redis,TPS达到1500x3时,redisCPU已达到95%左右。对于集群,TPS达到2500x3时,CPU均为80%左右。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/13494092.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-08-18
下一篇 2023-08-18

发表评论

登录后才能评论

评论列表(0条)

保存