高并发大流量专题---1、高并发大流量解决方案总结
高并发大流量专题---1、高并发大流量解决方案总结
一、总结
一句话总结:
可以根据 前后端数据库顺序 及 QPS数量来 决定优化方法
1、PHP如何解决网站大流量与高并发的问题?
流量优化+前端优化:比如防盗链处理、减少HTTP请求、添加异步请求、CDN加速、建立独立图片服务器、启用浏览器缓存和文件压缩等等
服务端优化+Web服务器优化:比如页面静态化、并发处理、队列处理、负载均衡等等
数据库优化:比如数据库缓存、分库分表、分区操作、读写分离、负载均衡等等
2、我们说的高并发是什么?
不是操作系统中的并发:在操作系统中,是指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机上运行,但任一个时刻点上只有一个程序在处理机上运行。
某个时间点的并发访问量:上面的定义明显不是我们通常所言的并发,在互联网时代,所讲的并发、高并发,通常是指并发访问。也就是在某个时间点,有多少个访问同时到来。
日PV在干万以上:通常如果一个系统的日PV在干万以上,有可能是一个高并发的系统
3、高并发解决方案?
技术:各种优化、缓存、负载均衡等技术
机器堆:有的公司完全不走技术路线,全靠机器堆,有钱,任性
4、高并发的问题中,需要了解的一些名词?
qps、吞吐量、响应时间、pv、uv、带宽、日网站带宽、峰值
QPS:每秒响应请求数(指HTTP请求):每秒钟请求或者查询的数量,在互联网领域,指每秒响应请求数(指HTTP请求);
吞吐量:单位时间内处理的请求数量(通常由QPS与并发数决定)
响应时间:从请求发出到收到响应花费的时间。例如系统处理一个HTTP请求需要100ms,这个100ms就是系统的响应时间
PV:综合浏览量(Page View),即页面浏览量或者点击量,一个访客在24小时内访问的页面数量;同一个人浏览你的网站同一页面,只记作一次PV
UV:独立访客(UniQue Visitor),即一定时间范围内相同访客多次访问网站,只计算为1个独立访客
带宽:计算带宽大小需关注两个指标,峰值流量和页面的平均大小
日网站带宽=PV/统计时间(换算到秒)*平均页面大小(单位KB)*8
峰值一般是平均值的倍数,根据实际情况来定
峰值每秒请求数(QPS)=(总PV数*80%)/(6小时秒数*20%)
5、日网站带宽如何计算?
带宽:计算带宽大小需关注两个指标,峰值流量和页面的平均大小
日网站带宽=PV/统计时间(换算到秒)*平均页面大小(单位KB)*8
峰值一般是平均值的倍数,根据实际情况来定
6、QPS 等于并发连接数 么?
不等于:QPS是每秒HTTP请求数量,并发连接数是系统同时处理的请求数:一个连接里面可能有多个http请求
7、峰值每秒请求数(QPS) 如何计算?
峰值每秒请求数(QPS)=(总PV数*80%)/(6小时秒数*20%)
80%的访问量集中在20%的时间
8、压力测试是什么?
最大并发:测试服务器集群(或单台)能承受的最大并发
QPS值:测试服务器集群(或单台)最大承受的QPS值
一般了解单台服务器能够承受的QPS是多少
9、常用性能测试工具?
ab、wrk.http load、Web Bench、Siege、Apache JMeter
ab:全称是apache benchmark,是apache官方推出的工具
ab原理:创建多个并发访问线程,模拟多个访问者同时对某一URL地址进行访问。它的测试目标是基于URL的,因此,它既可以用来测试apache的负载压力,也可以测试nginx、lighthttp、tomcat、IIS等其它Web服务器的压力。
10、ab(apache benchmark)是apache官方推出的工具,那么它能够测试nginx么?
能:它的测试目标是基于URL的:ab创建多个并发访问线程,模拟多个访问者同时对某一URL地址进行访问。它的测试目标是基于URL的,因此,它既可以用来测试apache的负载压力,也可以测试nginx、lighthttp、tomcat、IIS等其它Web服务器的压力。
11、ab的使用(比如 模拟并发请求100次,总共请求5000次)?
运行ab命令:ab -c 100 -n 5000 待测试网站
12、ab测试注意事项?
测试机器与被测试机器分开
不要对线上服务做压力测试
不超过最高限度的75%:观察测试工具ab所在机器,以及被测试的前端机的CPU,内存,网络等都不超过最高限度的75%
13、如何安装使用ab测试?
独立安装:yum -y install httpd-tools
一般安装apache会自动安装ab
ab使用:ab -c 100 -n 5000 http://192.168.52.6/index
[root@localhost ~]# ab -c 100 -n 5000 http://192.168.52.6/index This is ApacheBench, Version 2.3 <$Revision: 1430300 $> Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ Licensed to The Apache Software Foundation, http://www.apache.org/ Benchmarking 192.168.52.6 (be patient) Completed 500 requests Completed 1000 requests Completed 1500 requests Completed 2000 requests Completed 2500 requests Completed 3000 requests Completed 3500 requests Completed 4000 requests Completed 4500 requests Completed 5000 requests Finished 5000 requests Server Software: Apache Server Hostname: 192.168.52.6 Server Port: 80 Document Path: /index Document Length: 1917 bytes Concurrency Level: 100 Time taken for tests: 22.049 seconds Complete requests: 5000 Failed requests: 3 (Connect: 0, Receive: 0, Length: 3, Exceptions: 0) Write errors: 0 Total transferred: 11438133 bytes HTML transferred: 9579249 bytes Requests per second: 226.77 [#/sec] (mean) Time per request: 440.972 [ms] (mean) Time per request: 4.410 [ms] (mean, across all concurrent requests) Transfer rate: 506.61 [Kbytes/sec] received Connection Times (ms) min mean[+/-sd] median max Connect: 0 1 9.0 0 125 Processing: 1 419 1614.8 68 17425 Waiting: 0 412 1601.8 68 17425 Total: 1 420 1614.8 72 17427 Percentage of the requests served within a certain time (ms) 50% 72 66% 125 75% 163 80% 193 90% 399 95% 987 98% 7019 99% 9085 100% 17427 (longest request)
14、不同QPS下,优化与哪些方面有关?
硬件条件
网络带宽
随着QPS的增长,每个阶段需要根据实际情况来进行优化,优化的方案也与硬件条件、网络带宽息息相关。
15、不同QPS下的优化方案?
QPS100:数据库缓存层、数据库的负载均衡
QPS800:CDN加速、负载均衡
QPS1000:静态HTML缓存
QPS2000:做业务分离,分布式存储
16、QPS达到50 需要优化么?
可以不需要;称之为小型网站,一般的服务器就可以应付
17、QPS达到100 如何优化?
|||-begin
假设关系型数据库的每次请求在0.01秒完成;
假设单页面只有一个SQL查询,那么100QPS意味着1秒钟完成100次请求,但是此时我们并不能保证数据库查询能完成100次
|||-end
数据库缓存层、数据库的负载均衡
18、QPS 达到800 如何优化?
|||-begin
假设我们使用百兆带宽,意味着网站出口的实际带宽是8M左右
假设每个页面只有10K,在这个并发条件下,百兆带宽已经吃完
|||-end
CDN加速、负载均衡
19、QPS 达到1000 如何优化?
|||-begin
假设使用Memcache缓存数据库查询数据,每个页面对Memcache的请求远大于直接对DB的请求
Memcache的悲观并发数在2w左右,但有可能在之前内网带宽已经吃光,表现出不稳定
|||-end
静态HTML缓存
20、QPS 达到2000 如何优化?
|||-begin
这个级别下,文件系统访问锁都成为了灾难
|||-end
做业务分离,分布式存储
21、高并发优化的方向有哪些?
流量优化+前端优化:比如防盗链处理、减少HTTP请求、添加异步请求、CDN加速、建立独立图片服务器、启用浏览器缓存和文件压缩等等
服务端优化+Web服务器优化:比如页面静态化、并发处理、队列处理、负载均衡等等
数据库优化:比如数据库缓存、分库分表、分区操作、读写分离、负载均衡等等
流量优化 方法
防盗链处理
前端优化 方法
减少HTTP请求
添加异步请求:比如ajax
启用浏览器缓存和文件压缩
CDN加速
建立独立图片服务器
服务端优化 方法
页面静态化
并发处理
队列处理
数据库优化 方法
数据库缓存
分库分表、分区操作
读写分离
负载均衡
Web服务器优化 方法
负载均衡
22、流量优化 方法?
防盗链处理
23、前端优化 方法?
减少HTTP请求
添加异步请求:比如ajax
启用浏览器缓存和文件压缩
CDN加速 + 建立独立图片服务器
24、服务端优化 方法?
页面静态化
并发处理
队列处理
25、数据库优化 方法?
数据库缓存
分库分表、分区操作
读写分离
负载均衡
26、Web服务器优化 方法?
负载均衡
27、如何查看页面的响应时间?
chrome浏览器->network->右下角红色字:比如 Load:1.65s
95 requests I 409 KB transferred I 718 KB resources l Finish:3.06s l DOMContentloaded:910 ms I Load:1.65s
二、内容在总结中