我们说的高并发是什么?
通常如果一个系统的日PV在千万以上,有可能是一个高并发的系统。
1、UV:独立访客(unique visitor),即一定时间范围内相同访客多次访问网站,只计算为1个独立访客。
2、PV:综合浏览量(Page view),即页面浏览量或点击量,一个访客在24小时内访问的页面数量。
3、QPS:每秒钟请求或查询的数量,在互联网领域,指每秒响应请求数(指HTTP请求)
4、吞吐量:单位时间内处理的请求数量(通常由QPS与并发数决定)
5、响应时间:从请求发出到收到响应花费的时间。
带宽:计算带宽大小需关注两个指标,峰值流量和页面的平均大小。
日网站带宽=PV/统计时间 * 平均页面大小。
峰值一般是平均值的倍数,根据实际情况定
Qps 50 小型网站
Qps 100 数据库会有压力,方案:数据库缓存层,数据库的负载均衡。
Qps 800 每个页面是10k,百兆带宽实际时8M左右,此时百兆带宽已经吃完
方案:cdn加速,负载均衡
Qps 1000 方案:静态HTML缓存
Qps2000 方案:做业务分离,分布式存储
流量优化:防盗链处理
前端优化:减少http请求,添加异步请求,启用浏览器缓存和文件压缩,cdn加速, 建立独立图片服务器。
服务端优化:页面静态化,并发处理(队列,或多线程)
数据库优化:数据库缓存,分库分表,分区操作,读写分离,负载均衡
Web服务器优化:负载均衡与反向代理
减少HTTP请求
图片地图、css精灵
图片使用base64编码减少页面请求数<img src=”data:image/gif;base64,/9j…”
nginx负载均衡
内置策略: IP hash 、加权轮询
扩展策略 fair策略 通用hash、一致性hash
加权轮询策略
首先将请求否分给高权重的机器,直到该机器的权值降到了比其他机器低,才开始将请求分给下一个高权重的机器。
当所有的后端机器都down掉时,nginx会立即将所有机器的标志位清城初始状态,以避免造成所有的机器都处在timeout 的状态。
IP hash策略
变相的轮询策略
Fair策略
根据后端服务器的相应时间判断负载情况,从中选出负载最轻的机器进行分流。
通用hash、一致性hash策略
通用hash 比较简单,可以以nginx内置的变量为key进行hash,
一致性hash 采用了nginx 内置的一致性hash环,支持memcache
反向代理
http{
upstream cluster{
server srv1;
server srv2;
server srv3;
}
server{
listen:80;
location/{
proxy_pass http://cluster
}
}
}