php

PHP高并发处理方案

2019-02-23  本文已影响93人  鱼落于天

web资源防盗链

盗链是什么,为什么要防?

  1. 在自己页面上显示一些不是自己服务器的资源(图片、音频、视频、css、js等)
    由于别人盗链你的资源会加重你的服务器负担,所以我们需要防止,而且会影响统计

防盗链是什么? 有哪几种方式?

防盗链的工作原理

  1. Referer实现 以Nginx为例,前提加载ngx_http_referer_module模块,注意:为什么要none呢?因为如果通过浏览器直接访问资源,referer就是为空,所以这种方式不能彻底阻挡住盗链。
location ~* \.(gif|jpg|png|webp)$ {
#指令valid_referers  全局invalid_referer
   valid_referers none blocked domain.com *.domain.com ;
   if ($invalid_referer) {
        return 403;
        #rewrite ^/ http://www.domain.com/403.jpg;
   }
}
  1. 通过签名,根据计算签名的方式,判断请求是否合法,如果合法则显示,否则返回错误信息
    加密签名
#以Nginx为例,前提加载第三方模块HttpAccessKeyModule实现防盗链
location ~* \.(gif|jpg|png|webp)$ {
    accesskey on;
    accesskey_hashmethod md5;
    accesskey_arg key;
    accesskey_signature "mysrc$remote_addr";
}

减少HTTP请求次数

发现问题

8090%是花费在页面引用控件的加载上,只有1020%是花费在文档的加载上,HTTP/1.1协议规定请求只能串行发送,换句话就是100个请求,只能一个一个发送,上一个请求完成才能进行下一个请求

如何改善?

  1. CSS Sprites(雪碧图)
    原理:合拼图片,再使用css的background-image和background-position来指定显示元素 CSS Sprites与图片地图性能差不多,但CSS Sprites更加简单灵活
  2. 合并JS与CSS文件:加载一个JS文件比加载多个JS文件要快,一般会使用前端自动构建工具打包合并
  3. 图片使用base64编码
    注意:图片base64除了可以使用在<img>中,还可以使用在css的background-image中
  4. 图片地图 把多张图片合成一张,再使用<map>标签来实现对图片上不同区域的链接
<img src="img/planets.gif" width="145" height="126" alt="Planets" usemap="#planetmap">
<map name="planetmap">
  <area shape="rect" coords="0,0,82,126" alt="Sun" href="sun.htm">
  <area shape="circle" coords="90,58,3" alt="Mercury" href="mercur.htm">
  <area shape="circle" coords="124,58,8" alt="Venus" href="venus.htm">
</map>

CDN加速

CDN有什么优势?

1、智能Cache加速,提高企业站点的访问速度(含大量图片或静态页面最适合,因为CDN相当于是服务器的一个镜像)
2、跨运营商的网络加速,保证不同网络的用户都能得到很好的访问速度
3、加速用户远程访问服务器,根据DNS负载均衡技术自动智能选择Catch服务器
4、自动生成远程服务器的镜像(Catch服务器),加速访问速度,减轻Web服务器的负担,分担流量

CDN的工作原理是什么?

CDN适用场景有哪些?

CDN如何实现?

浏览器缓存

压缩方式

# 开启gzip
gzip on;
# 启用gzip压缩的最小文件,小于设置值的文件将不会压缩
gzip_min_length 1k;
# gzip 压缩级别,1-10,数字越大压缩的越好,也越占用CPU时间,后面会有详细说明,推荐6
gzip_comp_level 6;
# 进行压缩的文件类型。javascript有多种形式。其中的值可以在 mime.types 文件中找到。
gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php;
# 是否在http header中添加Vary: Accept-Encoding,建议开启
gzip_vary on;
# 禁用IE 6 gzip
gzip_disable "MSIE [1-6]\.";
# 压缩存储的缓冲
gzip_buffers 16 64k;
# 开启压缩的http版本
gzip_http_version 1.1;

动态语言静态化

//缓存存放目录
$smarty->cache_dir=$ROOT.'/cache'; 
//开启缓存
$smarty->caching=true; 
//缓存过期时间
$smarty->cache_lifetime=3600;
//加载模板
$smarty->display();
//清除所有缓存文件
$smarty->clearAllCache();
//清除特定模板的缓存
$smarty->clearCache('index.tpl');
使用ob系列函数(重点,实现静态化基础)
//开启输出缓冲区
ob_start(); 
//获取输出缓冲区内容
ob_get_contents();
//清空(擦掉)输出缓冲区
ob_clean();
//送出输出缓冲区内容并关闭缓冲
ob_end_flush();
//得到当前缓冲区的内容并删除输出缓冲区
ob_get_clean();

动态语言的并发处理

同步阻塞模型
异步非阻塞模型

PHP并发编程实战

数据缓存

如何使用Mysql查询缓存?
如何使用Memcache缓存?
如何使用redis缓存?

Web服务器负载均衡

http{
    upstream cluster{
        server srv1;
        server srv2;
        server srv3;
    }
    server{
        listen 80;
        location / {
            proxy_pass http://cluster;
        }
    }
}
  1. LVS
    1. LVS负载均衡的三种方式:NAT、DR和TUN
  2. 硬件设备
    1. 硬件设备:通过报文中的目标地址和端口,再加上负载均衡设备的服务器选择方式,决定最终选择的内部服务器

MySQL数据库优化

  1. 字段数据类型优化
    1. tinyint/smallint/int/bigint的选择
    2. char/varchar
    3. enum 固定分类
  2. IP地址数据如何存?
    1. 把IP地址转整型类型存储

索引
SQL语句优化
存储引擎优化
表结构设计优化
数据库服务器架构优化
读写分离

上一篇下一篇

猜你喜欢

热点阅读