[TOC]
## 我们说的高并发是什么?
上面的定义明显不是我们通常所言的并发,在互联网时代,所讲的并发、高并发,通常是指并发访问。也就是在某个时间点,有多少个访问同时到来
通常如果一个系统的日PV在干万以上,有可能是一个高并发的系统
## 高并发的问题,我们具体该关心什么?
- QPS
每秒钟请求或者査询的数量,在互联网领域,指毎秒响应请求数(指HTTP请求);一个页面中可能有多个 http 请求
` (总PV数*80%)/(6小时秒数*20%)=峰值每秒请求数(QPS)`
- 吞吐量
单位时间内处理的请求数量(通常由QPS与并发数决定)
- 响应时间
从请求发出到收到响应花费的时间。例如系统处理一个HTTP请求需要100ms,这个100ms就是系统的响应时间
- PV
综合浏览量( Page view),即页面浏览量或者点击量,个访客在24小时內访问的页面数量
- UV
独立访客( Unique Visitor),即一定时间范围内相同访客多次访问网站,只计算为1个独立访客
- 带宽
计算带宽大小需关注两个指标,峰值流量和页面的平均大小
`日网站带宽=PV/统计时间(换算到秒)*平均页面大小(单位KB)*8`
## 常用性能测试工具
ab、wrk、 http_load、 Web bench、 Siege、 Apache Jmeter
### ab 概念
全称是 apache benchmark,是 apache官方推出的工具刨建多个并发访问线程,模拟多个访问者同时对某一URL地址进行访问。它的测试目标是基于URL的,因此,它既可以用来测试apache的负载压力,也可以测试 nginx、 lighthttp、 tomcat、IS等其它Web服务器的压力
#### ab的使用
模拟并发请求100次,总共请求5000次
`ab -c 100 -n 5000 www.demo.com`
#### 注意事项
测试机器与被测试机器分开
不要对线上服务做压力测试
观察测试工具ab所在机器,以及被测试的前端机的cPU,内存,网络等都不超过最高限度的75% (`top` 命令)
demo
```
> ab -c 100 -n 100
>
Concurrency Level: 100
Time taken for tests: 55.923 seconds
Complete requests: 1000
Failed requests: 3
(Connect: 0, Receive: 0, Length: 3, Exceptions: 0)
Total transferred: 2958950 bytes
HTML transferred: 2495491 bytes
Requests per second: 17.88 [#/sec] (mean) # 这里是QPS数,每秒最高请求数,越高越好
Time per request: 5592.287 [ms] (mean)
Time per request: 55.923 [ms] (mean, across all concurrent requests)
Transfer rate: 51.67 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 1.1 0 5
Processing: 408 5430 1947.2 5391 11044
Waiting: 0 5422 1953.9 5391 11043
Total: 413 5430 1946.6 5391 11044
Percentage of the requests served within a certain time (ms)
50% 5391 ## 平均页面响应时间 5391毫秒
66% 6127
75% 6684
80% 7049
90% 8073
95% 8741
98% 9532
99% 10089
100% 11044 (longest request) ## 最长页响应时间
```
## QPS 划分
### QPS达到50
可以称之为小型网站,一般的服务器就可以应付,无需优化
### QPS达到100
假设关系型数据库的每次请求在0.01秒完成
假设单页面只有一个SQL查询,那么100QPS意味着1秒钟完成100
次请求,但是此时我们并不能保证数据库查询能完成100次
**方案**:数据库缓存层、数据库的负载均衡
### QPS达到800
假设我们使用百兆带宽,意味着网站出口的实际带宽是8M左右假设每个页面只有10K,在这个并发条件下,百兆带宽已经吃完
**方案**:CDN加速、负载均衡
### QPS达到1000
假设使用 Memcache缓存数据库查询数据,每个页面对Memcache的请求远大于直接对DB的请求
Memcache的悲观并发数在2W左右,但有可能在之前内网带宽已经吃光,表现出不稳定
**方案**:静态HTML缓存
### QPS达到2000
这个级别下,文件系统访问锁都成为了灾难
**方案**:做业务分离,分布式存储