@@ -8,15 +8,15 @@ icon: et-performance
8
8
9
9
这篇文章是我会结合自己的实际经历以及在测试这里取的经所得,除此之外,我还借鉴了一些优秀书籍,希望对你有帮助。
10
10
11
- ## 一 不同角色看网站性能
11
+ ## 不同角色看网站性能
12
12
13
- ### 1.1 用户
13
+ ### 用户
14
14
15
15
当用户打开一个网站的时候,最关注的是什么?当然是网站响应速度的快慢。比如我们点击了淘宝的主页,淘宝需要多久将首页的内容呈现在我的面前,我点击了提交订单按钮需要多久返回结果等等。
16
16
17
17
所以,用户在体验我们系统的时候往往根据你的响应速度的快慢来评判你的网站的性能。
18
18
19
- ### 1.2 开发人员
19
+ ### 开发人员
20
20
21
21
用户与开发人员都关注速度,这个速度实际上就是我们的系统** 处理用户请求的速度** 。
22
22
@@ -31,7 +31,7 @@ icon: et-performance
31
31
7 . 项目使用的 Redis 缓存多大?服务器性能如何?用的是机械硬盘还是固态硬盘?
32
32
8 . ……
33
33
34
- ### 1.3 测试人员
34
+ ### 测试人员
35
35
36
36
测试人员一般会根据性能测试工具来测试,然后一般会做出一个表格。这个表格可能会涵盖下面这些重要的内容:
37
37
@@ -40,63 +40,87 @@ icon: et-performance
40
40
3 . 吞吐量;
41
41
4 . ……
42
42
43
- ### 1.4 运维人员
43
+ ### 运维人员
44
44
45
45
运维人员会倾向于根据基础设施和资源的利用率来判断网站的性能,比如我们的服务器资源使用是否合理、数据库资源是否存在滥用的情况、当然,这是传统的运维人员,现在 Devops 火起来后,单纯干运维的很少了。我们这里暂且还保留有这个角色。
46
46
47
- ## 二 性能测试需要注意的点
47
+ ## 性能测试需要注意的点
48
48
49
49
几乎没有文章在讲性能测试的时候提到这个问题,大家都会讲如何去性能测试,有哪些性能测试指标这些东西。
50
50
51
- ### 2.1 了解系统的业务场景
51
+ ### 了解系统的业务场景
52
52
53
53
** 性能测试之前更需要你了解当前的系统的业务场景。** 对系统业务了解的不够深刻,我们很容易犯测试方向偏执的错误,从而导致我们忽略了对系统某些更需要性能测试的地方进行测试。比如我们的系统可以为用户提供发送邮件的功能,用户配置成功邮箱后只需输入相应的邮箱之后就能发送,系统每天大概能处理上万次发邮件的请求。很多人看到这个可能就直接开始使用相关工具测试邮箱发送接口,但是,发送邮件这个场景可能不是当前系统的性能瓶颈,这么多人用我们的系统发邮件, 还可能有很多人一起发邮件,单单这个场景就这么人用,那用户管理可能才是性能瓶颈吧!
54
54
55
- ### 2.2 历史数据非常有用
55
+ ### 历史数据非常有用
56
56
57
- 当前系统所留下的历史数据非常重要,一般情况下,我们可以通过相应的些历史数据初步判定这个系统哪些接口调用的比较多、哪些 service 承受的压力最大 ,这样的话,我们就可以针对这些地方进行更细致的性能测试与分析。
57
+ 当前系统所留下的历史数据非常重要,一般情况下,我们可以通过相应的些历史数据初步判定这个系统哪些接口调用的比较多、哪些服务承受的压力最大 ,这样的话,我们就可以针对这些地方进行更细致的性能测试与分析。
58
58
59
59
另外,这些地方也就像这个系统的一个短板一样,优化好了这些地方会为我们的系统带来质的提升。
60
60
61
- ### 三 性能测试的指标
61
+ ## 常见性能指标
62
62
63
- ### 3.1 响应时间
63
+ ### 响应时间
64
64
65
- ** 响应时间就是用户发出请求到用户收到系统处理结果所需要的时间 。** 重要吗?实在太重要!
65
+ ** 响应时间 RT(Response-time)就是用户发出请求到用户收到系统处理结果所需要的时间 。**
66
66
67
- 比较出名的 2-5-8 原则是这样描述的:通常来说,2 到 5 秒,页面体验会比较好,5 到 8 秒还可以接受,8 秒以上基本就很难接受了。另外,据统计当网站慢一秒就会流失十分之一的客户 。
67
+ RT 是一个非常重要且直观的指标,RT 数值大小直接反应了系统处理用户请求速度的快慢 。
68
68
69
- 但是,在某些场景下我们也并不需要太看重 2-5-8 原则 ,比如我觉得系统导出导入大数据量这种就不需要,系统生成系统报告这种也不需要。
69
+ ### 并发数
70
70
71
- ### 3.2 并发数
71
+ ** 并发数可以简单理解为系统能够同时供多少人访问使用也就是说系统同时能处理的请求数量。 **
72
72
73
- ** 并发数是系统能同时处理请求的数目即同时提交请求的用户数目。 **
73
+ 并发数反应了系统的负载能力。
74
74
75
- 不得不说,高并发是现在后端架构中非常非常火热的一个词了,这个与当前的互联网环境以及中国整体的互联网用户量都有很大关系。一般情况下,你的系统并发量越大,说明你的产品做的就越大。但是,并不是每个系统都需要达到像淘宝、12306 这种亿级并发量的。
75
+ ### QPS 和 TPS
76
76
77
- ### 3.3 吞吐量
77
+ - ** QPS(Query Per Second)** :服务器每秒可以执行的查询次数;
78
+ - ** TPS(Transaction Per Second)** :服务器每秒处理的事务数(这里的一个事务可以理解为客户发出请求到收到服务器的过程);
78
79
79
- 吞吐量指的是系统单位时间内系统处理的请求数量。衡量吞吐量有几个重要的参数: QPS( TPS)、并发数、响应时间 。
80
+ 书中是这样描述 QPS 和 TPS 的区别的 。
80
81
81
- 1 . QPS(Query Per Second):服务器每秒可以执行的查询次数;
82
- 2 . TPS(Transaction Per Second):服务器每秒处理的事务数(这里的一个事务可以理解为客户发出请求到收到服务器的过程);
83
- 3 . 并发数;系统能同时处理请求的数目即同时提交请求的用户数目。
84
- 4 . 响应时间:一般取多次请求的平均响应时间
82
+ > QPS vs TPS:QPS 基本类似于 TPS,但是不同的是,对于一个页面的一次访问,形成一个 TPS;但一次页面请求,可能产生多次对服务器的请求,服务器对这些请求,就可计入“QPS”之中。如,访问一个页面会请求服务器 2 次,一次访问,产生一个“T”,产生 2 个“Q”。
85
83
86
- 理清他们的概念,就很容易搞清楚他们之间的关系了。
84
+ ### 吞吐量
87
85
88
- - ** QPS(TPS)** = 并发数/平均响应时间
89
- - ** 并发数** = QPS\* 平均响应时间
86
+ ** 吞吐量指的是系统单位时间内系统处理的请求数量。**
90
87
91
- 书中是这样描述 QPS 和 TPS 的区别的 。
88
+ 一个系统的吞吐量与请求对系统的资源消耗等紧密关联。请求对系统资源消耗越多,系统吞吐能力越低,反之则越高 。
92
89
93
- > QPS vs TPS:QPS 基本类似于 TPS,但是不同的是,对于一个页面的一次访问,形成一个 TPS;但一次页面请求,可能产生多次对服务器的请求,服务器对这些请求,就可计入“QPS”之中。如,访问一个页面会请求服务器 2 次,一次访问,产生一个“T”,产生 2 个“Q”。
90
+ TPS、QPS 都是吞吐量的常用量化指标。
91
+
92
+ - ** QPS(TPS)** = 并发数/平均响应时间(RT)
93
+ - ** 并发数** = QPS \* 平均响应时间(RT)
94
+
95
+ ## 系统活跃度指标
96
+
97
+ ### PV(Page View)
98
+
99
+ 访问量, 即页面浏览量或点击量,衡量网站用户访问的网页数量;在一定统计周期内用户每打开或刷新一个页面就记录 1 次,多次打开或刷新同一页面则浏览量累计。UV 从网页打开的数量/刷新的次数的角度来统计的。
100
+
101
+ ### UV(Unique Visitor)
94
102
95
- ### 3.4 性能计数器
103
+ 独立访客,统计 1 天内访问某站点的用户数。1 天内相同访客多次访问网站,只计算为 1 个独立访客。UV 是从用户个体的角度来统计的。
96
104
97
- ** 性能计数器是描述服务器或者操作系统的一些数据指标如内存使用、CPU 使用、磁盘与网络 I/O 等情况。 **
105
+ ### DAU(Daily Active User)
98
106
99
- ### 四 几种常见的性能测试
107
+ 日活跃用户数量。
108
+
109
+ ### MAU(monthly active users)
110
+
111
+ 月活跃用户人数。
112
+
113
+ 举例:某网站 DAU 为 1200w, 用户日均使用时长 1 小时,RT 为 0.5s,求并发量和 QPS。
114
+
115
+ 平均并发量 = DAU(1200w)\* 日均使用时长(1 小时,3600 秒) /一天的秒数(86400)=1200w/24 = 50w
116
+
117
+ 真实并发量(考虑到某些时间段使用人数比较少) = DAU(1200w)\* 日均使用时长(1 小时,3600 秒) /一天的秒数-访问量比较小的时间段假设为 8 小时(57600)=1200w/16 = 75w
118
+
119
+ 峰值并发量 = 平均并发量 \* 6 = 300w
120
+
121
+ QPS = 真实并发量/RT = 75W/0.5=150w/s
122
+
123
+ ## 性能测试分类
100
124
101
125
### 性能测试
102
126
@@ -118,25 +142,27 @@ icon: et-performance
118
142
119
143
模拟真实场景,给系统一定压力,看看业务是否能稳定运行。
120
144
121
- ## 五 常用性能测试工具
145
+ ## 常用性能测试工具
146
+
147
+ ### 后端常用
122
148
123
- 这里就不多扩展了,有时间的话会单独拎一个熟悉的说一下。
149
+ 既然系统设计涉及到系统性能方面的问题,那在面试的时候,面试官就很可能会问: ** 你是如何进行性能测试的? **
124
150
125
- ### 5.1 后端常用
151
+ 推荐 4 个比较常用的性能测试工具:
126
152
127
- 没记错的话,除了 LoadRunner 其他几款性能测试工具都是开源免费的。
153
+ 1 . ** Jmeter** :Apache JMeter 是 JAVA 开发的性能测试工具。
154
+ 2 . ** LoadRunner** :一款商业的性能测试工具。
155
+ 3 . ** Galtling** :一款基于 Scala 开发的高性能服务器性能测试工具。
156
+ 4 . ** ab** :全称为 Apache Bench 。Apache 旗下的一款测试工具,非常实用。
128
157
129
- 1 . Jmeter:Apache JMeter 是 JAVA 开发的性能测试工具。
130
- 2 . LoadRunner:一款商业的性能测试工具。
131
- 3 . Galtling:一款基于 Scala 开发的高性能服务器性能测试工具。
132
- 4 . ab:全称为 Apache Bench 。Apache 旗下的一款测试工具,非常实用。
158
+ 没记错的话,除了 ** LoadRunner** 其他几款性能测试工具都是开源免费的。
133
159
134
- ### 5.2 前端常用
160
+ ### 前端常用
135
161
136
- 1 . Fiddler:抓包工具,它可以修改请求的数据,甚至可以修改服务器返回的数据,功能非常强大,是 Web 调试的利器。
137
- 2 . HttpWatch: 可用于录制 HTTP 请求信息的工具。
162
+ 1 . ** Fiddler** :抓包工具,它可以修改请求的数据,甚至可以修改服务器返回的数据,功能非常强大,是 Web 调试的利器。
163
+ 2 . ** HttpWatch** : 可用于录制 HTTP 请求信息的工具。
138
164
139
- ## 六 常见的性能优化策略
165
+ ## 常见的性能优化策略
140
166
141
167
性能优化之前我们需要对请求经历的各个环节进行分析,排查出可能出现性能瓶颈的地方,定位问题。
142
168
0 commit comments