单机 QPS 评估

QPS 是值每秒处理请求量。http 请求一般使用 apache bench 工具 ab 评估。参数说明:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
格式:ab [options] [http://]hostname[:port]/path

-n requests Number of requests to perform
//本次测试发起的总请求数

-c concurrency Number of multiple requests to make
//一次产生的请求数(或并发数)

-t timelimit Seconds to max. wait for responses
//测试所进行的最大秒数,默认没有时间限制。

-r Don't exit on socket receive errors.
// 抛出异常继续执行测试任务

-p postfile File containing data to POST
//包含了需要POST的数据的文件,文件格式如“p1=1&p2=2”.使用方法是 -p 111.txt

-T content-type Content-type header for POSTing
//POST数据所使用的Content-type头信息,如 -T “application/x-www-form-urlencoded” 。 (配合-p)

-v verbosity How much troubleshooting info to print
//设置显示信息的详细程度 – 4或更大值会显示头信息, 3或更大值可以显示响应代码(404, 200等), 2或更大值可以显示警告和其他信息。 -V 显示版本号并退出。

-C attribute Add cookie, eg. -C “c1=1234,c2=2,c3=3” (repeatable)
//-C cookie-name=value 对请求附加一个Cookie:行。 其典型形式是name=value的一个参数对。此参数可以重复,用逗号分割。
提示:可以借助session实现原理传递 JSESSIONID参数, 实现保持会话的功能,如-C ” c1=1234,c2=2,c3=3, JSESSIONID=FF056CD16DA9D71CB131C1D56F0319F8″ 。

-w Print out results in HTML tables
//以HTML表的格式输出结果。默认时,它是白色背景的两列宽度的一张表。

返回:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
$ab -n1000000 -c100 -k http://127.0.0.1:1234/
This is ApacheBench, Version 2.3 <$Revision: 1528965 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking 127.0.0.1 (be patient)
Completed 100000 requests
Completed 200000 requests
Completed 300000 requests
Completed 400000 requests
Completed 500000 requests
Completed 600000 requests
Completed 700000 requests
Completed 800000 requests
Completed 900000 requests
Completed 1000000 requests
Finished 1000000 requests


Server Software: workerman/3.1.4
Server Hostname: 127.0.0.1
Server Port: 1234

Document Path: /
Document Length: 5 bytes

Concurrency Level: 100
Time taken for tests: 7.240 seconds
Complete requests: 1000000
Failed requests: 0
Keep-Alive requests: 1000000
Total transferred: 73000000 bytes
HTML transferred: 5000000 bytes
Requests per second: 138124.14 [#/sec] (mean)
Time per request: 0.724 [ms] (mean)
Time per request: 0.007 [ms] (mean, across all concurrent requests)
Transfer rate: 9846.74 [Kbytes/sec] received

Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.0 0 5
Processing: 0 1 0.2 1 9
Waiting: 0 1 0.2 1 9
Total: 0 1 0.2 1 9

Percentage of the requests served within a certain time (ms)
50% 1
66% 1
75% 1
80% 1
90% 1
95% 1
98% 1
99% 1
100% 9 (longest request)

解释:

1
2
3
4
5
6
7
8
9
10
11
12
13
Document Path:测试页面
Document Length: 页面大小
Concurrency Level: 测试的并发数
Time taken for tests:整个测试持续的时间
Complete requests:完成的请求数量
Failed requests: 失败的请求数量
Write errors: 0
Total transferred: 整个过程中的网络传输量
HTML transferred: 整个过程中的HTML内容传输量
Requests per second: 最重要的指标之一,相当于LR中的每秒事务数,后面括号中的mean表示这是一个平均值
Time per request: 最重要的指标之二,相当于LR中的平均事务响应时间,后面括号中的mean表示这是一个平均值
Time per request: 每个连接请求实际运行时间的平均值
Transfer rate: 平均每秒网络上的流量,可以帮助排除是否存在网络流量过大导致响应时间延长的问题

其中 Failed requests 一旦大于0就表示服务已经达到饱和,Requests per second 是估算出来的 QPS。

单机容量评估

应用服务器单机的处理能力估算公式

1
TPC-C = ∑ (每秒钟服务处理量 * 标准的服务性能比率) / (1 - 冗余率)

比如 A 应用同时提供 serviceX 和 serviceY,在一秒内需要同时处理 serviceX 1000 笔和 serviceY 2000 笔,每个 serviceX 的标准的服务性能比率为 0.5,每个 serviceY 的标准的服务性能比率为 2,考虑 30% 的系统冗余率,那该应用服务器单机处理能力(tpmc) = ((1000 * 0.5) + (2000 * 2)) / (1 – 30%) = 6428。

每个应用服务器根据自己系统提供的服务以及访问量计算出单机的处理能力。 存储服务器单机的处理能力除了考虑请求处理能力的估算外,还需要考虑硬盘的容量,主要估算的方法为每条数据库记录需要的硬盘空间,秒级需要提供的并发访问数,提供该并发能力持续的时间,估算的公式为

1
∑(SQL 每秒钟处理量 * SQL 记录需要的空间) * 时间

计算出在日常和活动峰值期间需要的硬盘容量,为了保障数据库空间够用,需要冗余 30% 的硬盘空间。 网络设备的容量估算主要涉及网络的 IP 资源、网络上行和下行带宽容量、网络延迟,评估的方法主要是根据业务峰值需要的网络流量进行带宽合并计算,按网络流量的上限估算网络带宽容量,IP 资源根据整体业务需要的 VM 资源数量来估算。

集群容量评估

首先估算峰值请求,根据2/8原则,即80%压力会集中在20%的时间里,得到一个峰值 QPS。然后根据总的容量要求计算出每个应用服务器、存储服务器需要达到的容量要求,最后根据服务器需要达到的容量除以单机的容量,得出每一个服务器需要的机器数量,按照计算出来的机器数量给对应的服务器扩容,以达到业务指标要求的容量。


参考资料:
分布式系统架构技术分析(二)