一、高并发相关概念:
QPS:每秒中请求或查询的数量,在互联网领域指每秒相应请求数(http请求);QPS不等于并发连接数;
并发连接数:系统同时处理的请求数量。
响应时间:从请求发出到收到响应花费的时间。
PV:综合浏览量(Page View),即页面浏览量或点击量,一个访客在24小时内访问的页面数量。
日网站带宽: PV / 统计时间 (换算到秒)* 平均页面大小 (单位KB) * 8;
峰值QPS计算:(总PV数 * 80%) / (6小时秒数 * 20%) = 峰值每秒请求数(QPS);(80%的访问量集中在20%的时间里,6个小时可以看做中午、下午、晚上各两个小时);
二、压力测试
测试能承受的最大并发 和 测试最大承受的QPS值;
常用测试工具:ab,wrk,http_load,Web Bench,Siege,Apache JMeter.
这里使用ab进行测试,ab全称是apache benchmark,是apache官方推出的工具,创建多个并发访问线程,模拟多个访问者同时对一个URL进行访问。
观察被测服务器的CPU,内存,网络等不要超过最高限度的75%;
apache自带ab,也可以使用yum安装:
注意测试机器与被测机器分开
yum -y install http-tools
ab #查看是否安装
开始测试
ab -c 100 -n 10000 https://www.aaa.com/index.php
-c 单次请求100条
-n 一共10000条
执行结果:截图,
三、QPS等级
QPS达到50
小型网站,一般的服务器可以应付。基本不需要优化
QPS达到100
假设关系型数据库的每次请求在0.01秒内完成,如果单页面只有一个SQL查询,那么100QPS意味着1秒中要完成100次请求,但是此时我们并不能保证数据库查询能完成100次。
方案:数据库层缓存,数据库的负载均衡(没试过)。
QPS达到800
假设我们使用百兆宽带,意味着网站的出口的实际带宽只有8M左右。如果每个页面只有10K,在这个并发条件下,百兆宽带已经吃完。
方案:CDN加速,负载均衡
QPS达到1000
假设使用Mencache做缓存,每个页面对Memcache的请求要远大于对数据库的请求。那么使用Memcache已经没有意义了。
Memcache的悲观并发数在2W左右,但有可能在那之前内网带宽就已经被吃完,表现不稳定。(QPS达到800的时候Memcache就已经不稳定了)
方案:静态HTML
QPS达到2000
这个级别下,文件系统访问都成了灾难。
方案:做业务分离,分布式存储
四、优化
前端优化: 减少http请求、添加异步请求、启用浏览器缓存文件数据以及文件压缩、cdn加速、oss文件存储
流量优化:防盗链处理
服务器优化:页面静态化、并发处理(多线程,异步)
数据库优化:数据库缓存、数据库分库分表以及分区操作、读写分离(主从复制)
web服务器优化:nginx负载均衡