🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
[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 这个级别下,文件系统访问锁都成为了灾难 **方案**:做业务分离,分布式存储