[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
這個級別下,文件系統訪問鎖都成為了災難
**方案**:做業務分離,分布式存儲