通常如果一个系统的日PV在千万以上,有可能是一个高并发的系统
高并发的问题,具体应该关心什么?
QPS:每秒钟请求或者查询的数量,在互联网领域,指每秒响应请求数(指HTTP请求)
吞吐量:单位时间内处理的请求数量(通常由QPS与并发数决定)
响应时间:从请求发出到收到响应花费的时间,例如系统处理一个HTTP请求需要100ms,这个100ms就是系统的响应时间
PV:综合浏览量(Page View),即页面浏览量或者点击量,一个访客在24小时内访问的页面数量,同一个人浏览你的网站同一页面,只记作一次PV
UV:独立访问(UniQue Visitor),即一定时间范围内相同访客多次访问网站,只计算为1个独立访客
带宽:计算带宽大小需关注两个指标,峰值流量和页面的平均大小
日网站带宽=PV/统计时间(换算到秒)*平均页面大小(单位KB)*8
峰值一般是平均值的倍数,根据实际情况来定
QPS不等于并发连接数
QPS是每秒HTTP请求数量,并发连接数是系统同时处理的请求数量
(总PV数80%)/(每天秒数20%)=峰值每秒请求数(QPS) ---- 80%的访问量集中在20%的时间!!!
随着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
这个级别下,文件系统访问锁都成为灾难
方案:做业务分离,分布式存储
最佳线程数:
性能压测的情况下,起初随着用户数的增加,QPS会上升,当到了一定的阀值之后,用户数量增加QPS并不会增加,或者增加不明显,同时请求的响应时间却大幅增加。这个阀值我们认为是最佳线程数。
为什么要找最佳线程数
过多的线程只会造成,更多的内存开销,更多的CPU开销,但是对提升QPS确毫无帮助
找到最佳线程数后通过简单的设置,可以让web系统更加稳定,得到最高,最稳定的QPS输出
解决方案:
1、服务降级
2、静态文件和动态文件分离
3、负载均衡
4、数据库、服务集群\分布式
5、使用缓存,redis、memcache
6、CDN
7、异步处理一些时间要求不及时的请求
8、读写分离
9、分表、分库
10、sql优化,如使用索引、存储过程
11、页面静态化