大型网站提升访问速度关键技术 —— 页面静态化
大型网站关键技术介绍
-
pv值——访问量大
带来的问题:
a.流量大——解决方案:买带宽;优化程序
b.并发量大——对程序的架构重新设计->服务器集群
服务器集群部署图:
2.数据量大
解决方法:
1)数据库优化
a.表的设计合理
b.分表技术——水平分割、垂直分割
c.建立索引
d.读写分离
e.mysql配置优化(调整最大并发量,定时对数据库进行碎片处理?crontab)
f.硬件升级
2)页面静态化
3)memcached
页面静态化流程图:
一、几个概念
1)静态网址
如果我们访问的页面是静态页面,我们把这个url称作静态网址
特点:利于SEO;访问速度快;防止SQL注入
2)伪静态网址
在实际开发中,我们希望达到这样的目的:把下面的网址
http://localhost/news.php?lang=cn&class=sport&id=2
改成如下网址
http://localhost/news-cn-sport-2.html
这种网址就称之为伪静态网址
特点:利于SEO;防止SQL注入
二、Apache优化
1)压力测试工具:ab(apache自带的)
ab?-n?访问的总次数?-c?并发量?url
如:ab?-n?10000?-c?100?http://localhost/test.php
2)MPM(多路处理模块,即Apache采用怎样的方式来处理并发)是Apache的一种处理并发的方式:
①prefork?预处理进程方式
②worker?工作模式
③winnt?这个一般说是windows采用的
3)如何修改Apache的最大并发数
①在http.conf中修改:
#Server-pool?management(MPM?specific) Include?conf/extra/httpd-mpm.conf
②确定当前的Apache是什么MPM模式
进入apache/bin,执行httpd?-l
如上图说明是winnt模式
③然后进入httpd-mpm.conf修改相应模式的最大并发数
在linux下一般来说采用的MPM是prefork模式,对于中型网站,合理的配置如下:
如果网站的PV值上百万,可以修改ServerLimit和MaxClients这两个参数
如果上千万,就要用到负载均衡了
三、SEO小技巧
Baidu和google更偏好静态网址(伪静态)
seo" src="http://www.icultivator.com/wp-content/uploads/2014/03/seo.png?watermark/1/image/aHR0cDovL3N0YXRpYy5uYmxhLmNuLzEzMTAxMTYxMDktMi5wbmc=/dissolve/100/gravity/SouthEast/dx/10/dy/0" width="643" height="261" />
四.缓存机制
1)使用PHP自己的缓存机制
先说明一下ob缓存机制
在php5.2这个版本在php.ini有一个配置选项output_buffering,默认是关闭,那么下面这段代码就会报错:
echo?"xxx"; header("Content-type:text/html;charset=utf-8"); echo?"xxx";
解决办法:
将header放到最前面;开启ob缓存——1.配置ob选项;2.ob_start();
几个原则:
如果ob缓存打开,则echo的数据先放到ob缓存中;
如果是header信息就直接放在程序缓存中;
当页面执行到最后会把ob缓存中的数据放到程序缓存后面然后一起输出到浏览器
代码示例:
缓存" src="http://www.icultivator.com/wp-content/uploads/2014/03/ob缓存.png?watermark/1/image/aHR0cDovL3N0YXRpYy5uYmxhLmNuLzEzMTAxMTYxMDktMi5wbmc=/dissolve/100/gravity/SouthEast/dx/10/dy/0" width="442" height="194" />
flush()?//将程序缓存强制刷新到浏览器缓存
上面这段代码说明了浏览器缓存的存在
2)使用模板技术实现(正则表达式)
五、页面静态化实战
第一次访问查询数据库并把数据写到缓存文件中:
以后访问先判断该文件是否存在,如果存在直接访问:
缺点:修改文章后不能更新
改进方案:
1)设计30s,30s内不修改,超过30秒就更新
2)上面的解决方案仍然有延时,如果我们希望静态化没有延时的话就应该使用模板替换技术来实现,具体而言就是在新增或修改文章时替换静态页面内容为最新内容
静态化的缺点:
1)生成的大量静态页面占用磁盘空间
以下几种网站不建议使用真静态:
实时性要求高的网站;数据量大,查询一次后以后很少查询;不愿意被搜索引擎爬取的页面或网站
六、页面伪静态
希望页面有利于SEO又不想静态化页面,可以考虑使用伪静态。
实现方式:
1)使用正则表达式完成
2)使用apache自带的rewrite模块
在实际开发中,实现伪静态用的更多的是rewrite机制,但是这仍然是以正则表达式为基础的。
Apache配置文件中配置:
上面配置的时候都要去修改http-vhost文件,但是如果没有权限,我们也可以通过修改相应目录下的.htaccess文件来实现。
伪静态的实际运用:
1)在一个项目中有两个文件夹,public和private,public可以被所有人访问,而private只能被自己访问,怎么实现?
在private文件夹下配置.htaccess:
Order?deny,allow Deny?from?all Allow?from?127.0.0.1
缺点:没有办法去控制,所有资源都被禁止访问,不够精细化
优化方案(防盗链实例):
更多规则: