当前位置: 首页 > 后端技术 > PHP

PHP访谈2:高并发与大数据

时间:2023-03-29 14:21:41 PHP

web资源防盗链什么是盗链?为什么要防范呢?在自己的页面上显示一些不是来自自己服务器的资源(图片、音频、视频、css、js等)。由于别人盗用了你的资源,会加重你服务器的负担,所以要防止影响统计。什么是防盗链?有哪些途径?防止他人通过一些技术手段绕过本站资源展示页面,窃取本站资源,使绕过本站资源展示页面的资源链接失效,大大减轻服务器压力1.Referer(容易伪造referer,安全性低)2.防盗链的加密签名(安全性高)工作原理服务端通过Referer检测访问目标资源的来源网站,如果是资源文件,则可以追踪网页地址显示它。一旦检测到源网站不是防止通过签名的网站,根据计算签名的方法判断请求是否合法,如果合法则显示,否则报错将返回~*\.(gif|jpg|png|webp)${valid_referersnoneblockeddomain.com*.domain.com;如果($invalid_referer){返回403;#rewrite^/http://www.domain.com/403.jpg;}}注意:为什么没有?因为如果直接通过浏览器访问资源,referer是空的,所以这种方法不能完全杜绝盗链。加密签名以Nginx为例。前提是加载第三方模块HttpAccessKeyModule,实现防盗链定位~*\.(gif|jpg|png|webp)${accesskeyon;accesskey_hashmethodmd5;accesskey_arg密钥;accesskey_signature"mysrc$remote_addr";}减少80-90%的HTTP请求花在加载页面引用控件上,只有10-20%花在文件加载上HTTP/1.1协议规定请求只能串行发送,在其他也就是说,100个请求,只能一个一个发送,上一个请求完成才能进行下一个请求。如何提高?减少引用控件的数量,从而减少HTTP请求的数量。如何减少请求?1、图片地图原理:将多张图片合并为一张,然后使用标签实现图片上不同区域的链接图片贴图2.CSSSprites(精灵贴图)原理:组合图片,然后使用CSSbackground-image和background-position来指定显示元素。CSSSprites具有与图片地图相似的性能。但CSSSprites更简单、更灵活。CSS精灵3。合并JS和CSS文件。加载一个JS文件比加载多个JS文件更快。一般使用前端自动构建工具进行打包合并。4.图片使用base64编码。在中,css的background-image也可以使用CDN加速。什么是CDN加速?CDN是一个内容分发网络。服务器无处不在,形成一层智能虚拟网络。这里,服务器被称为节点服务器。所谓智能,就是根据用户请求信息,自动将请求重新分发到离客户端最近的服务器上。CDN的作用:解决因服务端和客户端地域不同而影响数据传输速度和稳定性的问题。一句话,就是让数据传输更快更稳定。CDN有什么优势?1、智能缓存加速,提高企业站点访问速度(最适合大量图片或静态页面,因为CDN相当于服务器的镜像)2、跨运营商网络加速,确保不同网络的用户都能获得良好的效果3.加速用户远程访问服务器,基于DNS负载均衡技术自动智能选择Catch服务器4.自动生成远程服务器镜像(Catch服务器),加快访问速度,减少Web服务器的负担,并共享流量。CDN的工作原理是什么CDN的适用场景有哪些?1、加速分发网站或应用中的大量静态资源(例如:css/js/图片等)2、大文件下载3、直播网站CDN如何实现?浏览器缓存高并发下,只能通过增加服务器负载来解决?NO,流量,前端,服务器,数据库缓存只能是数据库缓存?NO,还有浏览器缓存HTTP缓存分类(2种)1.200OK(来自内存缓存)直接从本地缓存获取响应,最快最省流量,因为没有向服务器发送请求2.304NotModifiedNegotiate缓存,浏览器在本地没有命中的情况下,会在请求头中向服务器发送一定的验证数据。如果服务器上的数据没有变化,服务器直接响应(通知浏览器从本地缓存中获取),返回304(速度快,发送的数据很少,只返回最基本的响应头,响应body未发送)PS:以上两个缓存全部失效,服务端返回一个完整的响应体(200OK),不使用缓存,速度最慢。headerPragmaCache-ControlExpires与浏览器本地缓存相关前端代码和资源压缩优化,使资源文件更小,加快文件在网络中的传输。使网页显示更快,减少流量和宽带开销压缩方式JS、CSS、HTML、图片压缩和Gzip压缩JS代码压缩去掉一些多余的空格和回车,替换长变量名,简化一些代码编写压缩工具:在线版和安装版在线压缩工具CSS代码压缩与JS压缩原理相同,去除空格、注释和优化语义在线压缩工具HTML代码压缩(不推荐,镇用)不推荐,因为会破坏代码结构。图片(JPG、PNG)压缩压缩工具:tinypng/JpegMini/ImageOptimGzipcompressiongzip压缩是一种Web服务器,用于压缩纯文本文件(JS/CSS/XML/HTML)注意:不要对图片进行Gzip压缩//使用Nginx示例#enablegzipgzipon;#开启最小文件gzip压缩,小于设置值的文件不压缩gzip_min_length1k;#gzip压缩级别,1-10,数字越大压缩越好,占用CPU越多需要时间,后面会有详细说明,推荐6gzip_comp_level6;#要压缩的文件类型。JavaScript有多种形式。这些值可以在mime.types文件中找到。gzip_types文本/普通应用程序/javascript应用程序/x-javascript文本/css应用程序/xml文本/javascript应用程序/x-httpd-php;#是否在http头中添加Vary:Accept-Encoding,建议开启gzip_varyon;#禁用IE6gzipgzip_disable"MSIE[1-6]\.";#压缩存储缓冲区gzip_buffers1664k;#打开压缩http版本gzip_http_version1.1;dynamiclanguagestatic现代动态语言的逻辑代码生成为静态html文件(static实际效果:缓存为html文件),再次访问时会重定向到静态文件有多少静态实现要解决高并发,减轻web服务器和数据库服务器的压力?1.使用Smarty模板引擎2.使用ob系列函数使用Smarty模板引擎//缓存存放目录$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();动态语言的并发处理什么是进程?什么是线程?什么是协程?进程:它是一个“正在执行的程序”。如果程序没有执行,则不会产生进程。一个正在执行的程序至少会产生一个进程。当进程获得处理器后,就会从就绪状态变为运行状态。处理器不断切换并分配给每个进程。决定同时运行多少个进程的是处理器(CPU核)数量的三态模型:当系统中运行多个程序时,进程在处理器中交替运行,状态不断交换。这三种状态是:就绪、运行和阻塞进程。五态模型(在三种状态的基础上发展而来):新态、运行态、终止态、就绪态、等待态Thread:称为轻量级Process,程序执行流程的最小单位。线程依赖于进程(一个进程可以有多个线程),线程不拥有系统资源。与属于同一进程的其他线程共享该进程拥有的所有资源;一个线程可以创建和取消另一个线程,同一个进程中的多个线程可以并发执行。一个进程下有多个线程完成不同的任务,称为多线程。(一个进程下至少会有一个线程)线程的由来:由于并发用户请求,为每个请求创建一个进程显然是对系统资源的浪费,影响响应用户请求的效率,所以提出了线程的概念线程被引入。协程:是用户态的轻量级线程。//协程和线程的区别1.协程是用户自己调度的,而线程是系统调度的。2.协程是异步的,而进程线程是同步的。3.一个线程可以有多个协程,一个进程也可以独立有多个协程。4.协程会保留上次调用的状态。什么是多线程?什么是多处理?多进程:2个或多个进程在运行,进程间通信不便PHP并发编程实践1.使用swoole扩展2.使用消息队列3.并发请求接口curl_multi_init()数据缓存什么是数据缓存?传统的关系数据库将数据存储在硬盘中。在高并发情况下,会对数据库服务器造成巨大的压力(巨大的IO操作)。为了解决这个问题,数据缓存诞生了!效果:1.大大减轻了数据库服务器的压力2.提高了数据的响应速度。缓存形式包括:内存缓存、文件缓存。建议使用内存缓存。为什么要使用数据缓存?(如上回答)第一次访问:第二次访问:Mysql查询缓存如何使用?如何使用Memcache缓存?如何使用redis缓存?Web服务器负载均衡实现方法1.七层负载均衡(Nginx)2.四层负载均衡(LVS/硬件设备)七层负载均衡是根据URL等应用层信息实现负载均衡//一般是Nginx用于实现功能强大,性能优良,运行稳定,配置简单灵活,上传文件,采用异步方式,多种分发策略,自动剔除上游集群异常设备{serversrv1;服务器srv2;服务器srv3;}服务器{听80;位置/{proxy_passhttp://cluster;}}}实现四层负载均衡有两种方式:1.LVS2,硬件设备LVS负载均衡三种方式:NAT、DR和TUN硬件设备:通过报文中的目标地址和端口,加上服务器选择方式负载均衡器,确定??最终选择的内部服务器MySQL数据库优化优化方向字段数据类型优化tinyint/smallint/int/bigintchar/varcharenum的选择固定分类IP地址数据如何保存?答:IP地址转整型存储索引SQL语句优化存储引擎优化表结构设计优化数据库服务器架构优化列表项