高并发大流量专题---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小时内访问的页面数量;同一个人浏览你的网站同一页面,只记作一次PVUV:独立访客(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/indexThis 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 requestsCompleted 1000 requestsCompleted 1500 requestsCompleted 2000 requestsCompleted 2500 requestsCompleted 3000 requestsCompleted 3500 requestsCompleted 4000 requestsCompleted 4500 requestsCompleted 5000 requestsFinished 5000 requestsServer Software: ApacheServer Hostname: 192.168.52.6Server Port: 80Document Path: /indexDocument Length: 1917 bytesConcurrency Level: 100Time taken for tests: 22.049 secondsComplete requests: 5000Failed requests: 3 (Connect: 0, Receive: 0, Length: 3, Exceptions: 0)Write errors: 0Total transferred: 11438133 bytesHTML transferred: 9579249 bytesRequests 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] receivedConnection Times (ms) min mean[+/-sd] median maxConnect: 0 1 9.0 0 125Processing: 1 419 1614.8 68 17425Waiting: 0 412 1601.8 68 17425Total: 1 420 1614.8 72 17427Percentage 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
二、内容在总结中