系统性能预估

一、前言

在做一个系统前,首先要思考,这个系统将来有多少人用,最高并发有多少。用户规模和并发的不同,会决定系统架构的不同。架构决定成本,包括开发和运行成本,不要一味的追求高性能,适用最好。

二、基础概念

1. 注册用户数、在线用户数、并发用户数

  • 注册用户数:一般指的是数据库中存在的用户数
  • 在线用户数:只是 ”挂” 在系统上,对服务器不产生压力
  • 并发用户数:一定会对服务器产生压力的

2. 并发用户数、并发数、QPS、RPS

  • 并发用户数:在一段时间内集中使用系统的用户数
  • 并发数:系统同时处理的请求数(取决于cpu核数)
  • QPS:Queries Per Second每秒钟请求数,QPS = 并发数/平均响应时间 = 并发用户数/(平均思考时间+平均响应时间)
  • RPS:Request Per Second每秒钟请求数(与QPS完全等价)

并发用户数和并发数常常混用,但是实际上,一般表达的是并发用户数的意思。(产品所说的系统并发表示并发用户数)
并发数和QPS常常混用,但是实际上,一般表达的是QPS的意思。(研发所说的系统并发表示QPS)
真正的系统并发取决于硬件,不会随意变化,没有讨论意义。

如何知道系统的QPS?

  1. 压测
  2. 估算:响应时间取倒数
    假设我们当前一个http请求服务器处理完成需要100ms(即平均响应时间 = 100ms )。那么它1s钟可以处理10个请求,也就是 qps = 10。

3. QPS、TPS

  • QPS:Queries Per Second,指服务器每秒处理的事务次数。一般用于评估数据库、交易系统的基准性能。
  • TPS:Transactions Per Second,是服务器每秒能够处理的查询次数,例如域名服务器、Mysql查询性能。

人们常常将两者混用,在不特殊强调的情况下,可以粗略的认为两者是等价的,通用的。

但是实际上,至少从字面意思上,两者的含义是不同的

  • 第一种解释: QPS是针对网络服务器,TPS适用于所有服务器;讨论网络服务器时,QPS=TPS
  • 第二种解释: QPS只是请求数,有可能多个请求才可以完成一个事务;在这种解释下,QPS≥TPS
  • 第三种解释: QPS是请求总数,TPS是访问数据库或者开启事务的请求数;在这种解释下,QPS≥TPS
  • 第四种解释: QPS是查询次数,TPS是访问数据库或者开启事务的请求数;在这种解释下,QPS表示读,TPS表示写

可以看出QPS一般没有歧义,问题主要在于如何解释TPS定义中的“事务”。所以建议统一使用QPS,除非QPS特别不符合语境时再使用TPS。

4. 吞吐量

系统在单位时间内处理请求的数量。只不过是一个很宽泛的术语,大家经常指的吞吐量的单位可能是:TPS/QPS、页面数/秒、人数/天、处理业务数/小时等等。

5. 响应时间、思考时间

  • 响应时间:Response Time,服务器处理一次请求所用的时间
  • 思考时间:Think Time,用户两次请求的间隔时间,用户触发一次请求所需要的时间(填一个表单需要5分钟,也就是最多每5分钟才能触发一次请求)

三、最大并发用户数估算(最多支持多少个人同时使用系统)

1. 在做系统之前,根据产品需求(最多支持多少个人同时使用系统),可以得出一个目标QPS作为系统的性能目标。

(1)已知最大在线用户数

最大并发用户数 = 系统最大在线用户数的8%到12%
最大QPS = 最大并发用户数 / (平均思考时间+平均响应时间)
原理:在线的用户里,最多有8%到12%的用户会同时操作

(2)对于一天当中用户登录时间不长,且分布比较均匀的系统来说

平均并发用户数 = (一天的在线用户数*平均用户登录时长) / 一天当中用户可能使用系统的时间区间
最大并发用户数 = 平均并发用户数 + 3*(平均并发用户数开根号)
原理:粗略认为,峰值比平均值高出3倍的根号平均值

举例1:
假设系统A,该系统有3000个用户,平均每天大概有400个用户要访问该系统,对于一个典型用户来说,一天之内用户从登陆到退出的平均时间为4小时,而在一天之内,用户只有在8小时之内会使用该系统。

平均并发用户数 = 400*4/8 = 200
最大并发用户数 = 200 + 3*根号200 = 243

举例2:
某公司为其170000名员工设计了一个薪酬系统,员工可进入该系统查询自己的薪酬信息,但并不是每个人都会用这个系统,假设只有50%的人会定期用改系统,这些人里面有70%是在每个月的最后一周使用一次该系统,且平均使用系统时间为5分钟。该公司朝九晚五,每天工作8小时。

最后一周的使用系统的用户数 = 170000*0.5*0.7 = 59500
最后一周的平均每天使用系统的用户数(一周5个工作日) = 59500/5 = 11900
最后一周的平均每天用户使用系统的分钟数(平均使用系统时间为5分钟) = 11900*5 = 59500
最后一周的每天平均并发用户数(一天8个工时) = 59500/(8*60) = 124
最后一周的每天最大并发用户数 = 124 + 3*根号124 = 138

(3)对于一天当中用户请求比较集中的系统来说,适合直接估算QPS,再估算最大并发用户数

最大QPS = 一天的用户请求数*80% / 用户集中时间段
最大并发用户数 = 最大QPS * (平均思考时间+平均响应时间)
原理:根据2/8原则,认为80%的用户请求都会在集中的时间段里完成;通常平均思考时间设为2,平均响应时间设为1

举例1:
假设一个网站,每天的PV大概1000w,根据2/8原则,我们可以认为这1000w pv的80%是在一天的9个小时内完成的。

最大QPS = 1000w*80%/(9*3600) = 246.92个/s
最大并发用户数 = 246.92*3 = 740

举例2:
以乘坐地铁为例子,每天乘坐人数为5万人次,每天早高峰是7到9点,晚高峰是6到7点,根据8/2原则,80%的乘客会在高峰期间乘坐地铁。

最大QPS(每秒到达地铁检票口的人数) = 为50000*80%/(3*60*60)=3.7,约4人/s
考虑到安检,入口关闭等因素,实际堆积在检票口的人数肯定比这个要大,假定每个人需要3秒(平均思考时间+平均响应时间为3秒)
最大并发用户数 = 4人/s*3s = 12人

2. 在做系统之后,通过性能测试可以知道系统的最大QPS,从而估算最多支持多少个人同时使用系统。

最大并发用户数 = 最大QPS * (平均思考时间+平均响应时间)
通常平均思考时间设为2,平均响应时间设为1

四、参考

《性能测试中并发用户数的估算》


版权声明:本文为u012107143原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。