高并发 有哪些解决方案

最有魅力的人是康师傅,每天都有成千上万的人泡他。

 

高并发的一些概念:

  1. (每秒查询率):每秒请求或者查询的数量,在互联网领域,指每秒响应请求数(指HTTP请求);
  2. PV(Page View):综合浏览量,即页面浏览量或者点击量,一个访客在24小时内访问的页面数量(注:同一个人浏览你的网站的同一页面,只记做一次pv);
  3. UV(Unqie Vistor):独立访客,一定时间范围内,相同访客多次访问网站,只计算为1个独立访客;
  4. 吞吐量(fetches/sec) :单位时间内处理的请求数量 (通常由QPS和并发数决定);
  5. 响应时间:从请求发出到收到响应花费的时间;
  6. 带宽:计算带宽需关注两个指标,峰值流量和页面的平均大小;
  7. 日网站带宽: 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实现负载均衡;

 

原文地址:https://www.cnblogs.com/fangdada/p/15064123.html