高并发和大流量解决方案

Posted senkorl

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了高并发和大流量解决方案相关的知识,希望对你有一定的参考价值。

1.web资源防盗链

盗链概念
盗链是指在自己的页面上展示一些并不在自己服务器的内容
防盗链工作原理
通过referer或者签名,网站可以检测目标网页访问的来源页,一旦检测到来源页不是本站即进行阻止或者返回指定页面

解决方案1

Referer
nginx 模块ngx_http_referer_module用于阻挡来源非法的域名请求

location ~ .*\.(gif|jpg|png|swf|bmp|jpeg)$

    valid_referers none blocked bobo.com 
    if ($invalid_referer)
    
        return 403 
    

缺点:可以进行伪装referer

解决方案2

使用第三方HttpAccessKeyModule模块实现NGINX防盗链

location ~ .*\.(gif|jpg|png|swf|bmp|jpeg)$

    accesskey on;
    accesskey_hashmethod md5;
    accesskey_arg sign;
    accesskey_signature "bobo$remote_addr";

缺点:要在每个资源后面加个签名

2.减少http请求次数

为什么要减少http请求次数
HTTPl连接产生的开销
域名解析->TCP连接->发送请求->等待->下载资源->解析时间

解决方案1

图片地图
使用标签

解决方案2

CSS精灵
通过指定css的backgroud-image和backgroud-position来显示元素

解决方案3

合并脚本和样式表
使用外部js和css文件引用方式

解决方案4

图片使用base64编码减少页面的请求数
使用外部js和css文件引用方式

3.浏览器缓存和压缩优化技术

HTTP缓存机制
1.200 from cache: 直接从本地缓存中获取响应,最快速,最省流量,因为根本没有向服务器发送请求
2.304 not modify:协商缓存,浏览器在本地没有命中情况下请求头发送一定的校验数据到服务端,如果服务端数据没有改变浏览器从本地缓存响应,返回304,快速,发送的数据小,只返回一些基本的响应头信息,数据量很小,不发生实际响应体
3.200 OK:以上两种缓存全都失败,服务器返回完整响应,没有用到缓存,相对最慢。
NGINX配置

location ~ .*\.(gif|jpg|png|swf|bmp|jpeg)$

    expires 30d;  //缓存30天

前端代码和资源的压缩
js代码压缩常用工具:UglifyJs, YUI Compressor, Closure Compiler
css代码压缩常用工具:YUI Compressor, CSS Compressor
html代码压缩常用工具:htmlcompressor
图片压缩
常用工具:tinypng, JpegMini, ImageOptim
gzip压缩

location ~ .*\.(gif|jpg|png|swf|bmp|jpeg)$

    gzip on|off //是否开启
    gzip_buffers 32 4K | 16 8K //缓冲
    gzip_comp_level [1-9] 推荐6 压缩级别(级别越高,压的越小,越浪费CPU资源)
    gzip_disable //什么样的uri不进行gzip压缩
    gzip_min_length 200 //开始压缩的最小长度
    gzip_http_version //开始压缩的http协议版本 
    gzip_types text/plain application/xml //对哪些类型的文件用
    gzip_proxied//设置请求者代理服务器,该如何缓存内容
    gzip_vary on|off //是否传输gzip压缩标志

4.使用CDN加速

什么是CDN,全称:Content Delivery Network 内容分发网络
使用CDN的优势

5.建立独立的图片服务器

独立的必要性:
1.分担web服务器的I/O负载,将耗费资源的图片服务分离出来,提高服务器的性能和稳定性,
2.能够专门对图片服务器进行优化,为图片服务设置有针对性的缓存方案,减少带宽成本,提高访问速度,
3.提高网站可扩展性,通过增加图片服务器提高图片的吞吐能力
采用独立域名:
1.同一域名下浏览器的并发连接数有限制,突破浏览器的连接数限制(同一域名下浏览器并发连接数2-6个)
2.由于cookie的原因,对缓存不利,大部分web cache 都只能缓存不带cookie的请求,导致每次的图片请求都不能命中cache
3.如何进行图片上传和图片同步,NFS共享方式,利用FTP同步

6.动态语言层的并发处理

进程,线程,协程,同步阻塞,异步非阻塞,
php并发编程实践:swoole 消息队列 接口的并发请求(curl_multi_init)

7.数据库缓存层优化

1 为什么的要使用数据库缓存

极大地j解决数据库服务器的压力
提高应用数据的响应速度
常见的缓存形式:内存缓存,文件缓存
是为了让客户端很少,甚至不访问数据库服务器进行数据的查询,高并发下,能最大程度降低对数据库服务器的压力

2 使用redis,memcache缓存查询数据

8.mysql数据优化

9.Web服务器的负载均衡,请求分发

以上是关于高并发和大流量解决方案的主要内容,如果未能解决你的问题,请参考以下文章

高并发和大流量解决方案

(转)高并发和大流量解决方案 (#高并发架构相关概念#)

高并发和大流量解决方案

PHP-高并发和大流量的解决方案

高并发和大流量解决方案

Sqlserver 高并发和大数据存储方案