tps、qps、pv、uv、vv
PV(Page View):页面访问量,每次用户访问或者刷新页面都会被计算在内。
QPS(Query Per Second):每秒查询数,每秒系统能够处理的查询请求次数。
TPS(Transactions Per Second):每秒事务数,每秒系统能够处理的事务次数。
UV即Unique Visitor,独立访客数,指一天内访问某站点的人数,以cookie或者Token为依据。
VV即Visit View,访客访问的次数,用以记录所有访客一天内访问网站的次数。
当访客完成所有的浏览并最终关掉该网站的所有页面时,便完成了一次访问,同一访客一天内可能有多次访问行为,访问次数累计。
RT
Response Time缩写,简单理解为系统从输入到输出的时间间隔,宽泛的来说,他代表从客户端发起请求到服务端接受到请求并响应所有数据的时间差。一般取平均响应时间。
并发数
简而言之,系统能同时处理的请求/事务数量。
计算方式
QPS=并发数/RT 或者 并发数=QPS*RT
举个栗子:
假设公司每天早上9点到10点1个小时内都有员工要上厕所,公司有3600个员工,平均每个员工上厕所时间为10分钟,我们来计算一下。
QPS = 3600/60*60 1
RT = 10*60 600秒
并发数 = 1 * 600 600
这样就意味着如果想达到最好的蹲坑体验,公司需要600个坑位来满足员工需求,否则的话上厕所就要排队等待了。
TPS与QPS是有区别的
事务表示客户端发起请求到收到服务端最终响应的整个过程,这是一个TPS
而在这个TPS中,为了处理第一次请求可能会引发后续多次对服务端的访问才能完成这次工作,每次访问都算一个QPS。
所以,一个TPS可能包含多个QPS
峰值qps
日PV=QPS*60*60*24 //即QPS乘以一天的秒数
峰值QPS=(日PV*80%)/(60*60*24*20%)//通用公式每天80%的访问集中在20%的时间里,这20%时间叫做峰值时间
性能思考
按照QPS=并发数/RT公式,假设我们现在是单线程的场景,那么QPS公式应该是这样:QPS=1/RT,实际上RT应该=CPU time + CPU wait time,如果将线程数提高到2,那么QPS=2/(CPU time + CPU wait time),那么是否意味着我们只要单纯提高线程数就能提高QPS呢?
最佳线程数计算
假设CPU time是49ms,CPU wait time是200ms,那么QPS=1000ms/249ms=4.01,这里200ms的wait时间我们可以认为CPU一直处于等待状态啥也没干,理论上来说200ms还可以接受200/49≈4个请求,不考虑上下文切换和其他开销的话,可以认为总线程数=(200+49)/49=5,如果再考虑上CPU多核和利用率的问题,我们大致可以认为:
最佳线程数=RT/CPUTime ✖️ CPU核心数 ✖️ CPU利用率 **
那么最大QPS公式推导为:
最大QPS=最佳线程数✖️单线程QPS=(RT/CPU Time ✖️ CPU核心数 ✖️ CPU利用率)✖️(1/RT) = CPU核心数✖️CPU利用率/CPUTime