高并发 有哪些解决方案
最有魅力的人是康师傅,每天都有成千上万的人泡他。
高并发的一些概念:
- (每秒查询率):每秒请求或者查询的数量,在互联网领域,指每秒响应请求数(指HTTP请求);
- PV(Page View):综合浏览量,即页面浏览量或者点击量,一个访客在24小时内访问的页面数量(注:同一个人浏览你的网站的同一页面,只记做一次pv);
- UV(Unqie Vistor):独立访客,一定时间范围内,相同访客多次访问网站,只计算为1个独立访客;
- 吞吐量(fetches/sec) :单位时间内处理的请求数量 (通常由QPS和并发数决定);
- 响应时间:从请求发出到收到响应花费的时间;
- 带宽:计算带宽需关注两个指标,峰值流量和页面的平均大小;
- 日网站带宽: PV/统计时间(换算到秒) * 平均页面大小(kb)* 8;
注意:
- QPS不等于并发连接数(QPS是每秒HTTP请求数量,并发连接数是系统同时处理的请求数量);
- 峰值每秒请求数(QPS)= (总PV数*80%)/ (六小时秒数*20%)【代表80%的访问量都集中在20%的时间内】;
- 压力测试: 测试能承受的最大并发数 以及测试最大承受的QPS值;
- 常用的性能测试工具【ab,wrk,httpload,Web Bench,Siege,Apache JMeter】
进入正题,解决方案:
1、流量优化 -- 去除一些恶意请求,进行防盗链处理;
- Referer:以Nginx为例,前提加载ngx_http_referer_module模块 (易伪造referer,安全性低);
- 加密签名:通过签名,根据计算签名的方式,判断请求是否合法,如果合法则显示,否则返回错误信息,加密签名 (安全性高);
2、前端优化
- 减少http请求次数;添加异步请求,当用户触发某个事件之后,再异步请求数据;
- CSS Sprites(雪碧图) -- 合拼图片,再使用css的background-image和background-position来指定显示元素 CSS Sprites与图片地图性能差不多,但CSS Sprites更加简单灵活;
- 合并JS与CSS文件 -- 加载一个JS文件比加载多个JS文件要快,一般会使用前端自动构建工具打包合并;
- 图片使用base64编码 -- 图片base64除了可以使用在<img>中,还可以使用在css的background-image中;
- 图片地图 -- 把多张图片合成一张,再使用<map>标签来实现对图片上不同区域的链接;
- 启用浏览器缓存和文件压缩;
- CDN加速;
- 将图片以及文件类放在其他服务器上(减少I/O);
3、服务端优化
- 页面静态化处理;
- 并发处理;
- 队列处理;
4、数据库优化
- 数据库缓存;
- 数据库读写分离;
- 对数据库进行分库、分表;
- 读写分离主要是为了应对读请求,那如果写请求的流量大,就会考虑用到对数据库进行分库分表操作;
5、WEB服务器优化
- Nginx反向代理实现负载均衡;
- lvs实现负载均衡;