大型网站 + 静态页面

一、大型网站的判断
Pv(page visitor), uv(unique visitor), 独立的ip

二、大型网站带来的问题
大的访问量,大流量,海量的数据存储

三、大访问量的解决方案
采用分层架构,负载均衡的方式(软件:lvs/nginx,硬件:f5-bigip)

负载均衡的策略:

1)轮询:负载均衡器把请求轮流转发给web服务器

2)最少链接:负载均衡把请求转发给最空闲的服务器

3)ip哈希: 负载均衡始终将请求的始终给同一服务器

四、大流量问题的解决方案(带宽)
1)在web服务器端(Apache),配置压缩,减少数据传输的数据量(开启apache的算法模块mod_gzip和mod_deflate,level级别推荐为6压缩速度和质量均衡)

2)合并文件(css,js,img)减少http的请求(图片一次请求过来)

3) 把比较占用资源的(或不同功能的)单独部署服务器用作分流(京东)

五、大存储的解决方案
1、使用缓存技术(目的:减少对数据库的查询次数)

硬盘的缓存(页面静态化):将动态的页面转换成静态的页面,提高了访问的速度

内存缓存:把数据缓存到服务器端的内存中,下次的访问直接从内存中读取

2、mysql的优化

六、页面静态化
1、分类:真静态和伪静态

真静态:真实的html(不操作数据库执行速度快,比较安全不接受参数,利于SEO)

伪静态:表面的html(操作数据库,执行速度慢,不接受参数利于安全和SEO)

2、实现技术(在实际中我们会经历三个缓存:ob缓存à程序缓存à客户端缓存)

真静态化: 使用ob缓存技术,缓存内容是相应的主体数据【响应内容】

伪静态化:通过web服务器的重写机制(index.phpàindex.html)

3、ob缓存

在php.ini中进行配置Output_buffering:输出缓存(对所有的页面有效),缓存的是主体的数据(响应内容)

注:如果开启了ob缓存,主体数据(非头信息)首先会缓存到ob缓存区内,头信息要存储到程序的缓存,当ob缓存的数据刷新(移动)到程序的缓存中,程序缓存再输出到浏览器的缓存中,最后输出内容

4、程序缓存

该缓存必须存在,是无法关闭的,缓存着【响应头和响应内容】

七、OB缓存
Ob_start() // 只对本页面有效,而对其他页面是没有效果的

Ob_get_contents() // 获取响应主体中的数据(执行后的代码)

Ob_clean() // 清除ob缓冲中的内容后不关闭ob缓存

Ob_end_clean() // 清除ob缓存中的内容后将关闭ob缓存

Ob_flush() //将ob缓存中的数据移动到程序缓存中,并关闭ob缓存

Ob_end_flush() // 不关闭缓存

八、静态化页面的实现
通过ob_get_contents()和file_put_contents()将内容写入到指定的.html中实现了页面的静态化

扩展设置文件的生存周期:

File_exsits(), // 查看静态文件是否生成

Filetime() // 查看文件的最后修改的时间,判断是否过期

九、在Tp和smart模板中的应用
Smarty

$smarty->cache_dir = “./cache/”; //缓存目录

$smarty->caching = true; //开启缓存,为flase的时侯缓存无效

$smarty->cache_lifetime = 60; //缓存时间(单位 秒)

if(!$smarty->isCached(’01.html’)){

     //判断模板文件是否被缓存。

}

ThinkPHP

1)在总的配置文件中config开启静态缓存 ‘HTML_CACHE_ON’=>true;

2)在各自的配置文件config中进行配置

     ‘HTML_FILE_SUFFIX’=> ’.shtml’     // 设置静态文件的缓存文件后缀

‘HTML_CACHE_RULES’=> array(

Index控制器的index方法,静态页面的缓存路径为Home/index

     ‘Index:index’=>array(‘Home/index’,3600),

{id}为变量,3600为缓存周期

     ‘Index:detail’=>array(‘Home/Goods/goods-{id}’,3600),  

)

十、页面静态化的选择
1、网站实时性要求不高的网站,是不要使用静态(真静态和为静态均不使用)

2、网站的访问量较小、没必要使用静态化技术

3、如果数据项目不多,但是访问频率极大,建议使用真静态,如新浪的新闻频道

4、如果数据项目海量,使用真静态会生成海量的html静态页面,建议使用伪静态

5、一个大型网站中、静态化技术是综合使用的(新闻:真静态,基金:伪静态,后台:无静态)

十一、网站的并发测试工具
1、在Apache的安装目录中存在有ab.exe一个自带的程序来进行服务器的并发测试

    ab     –n  50  –c       50  http://localhost/test.php

    -n  num             总的访问量

    -c  customer                并发量

    url 对某个网页进行测试

2、如何调整apache的最大并发量

     1)  apache默认情况下最大的并发量为150

3、调整Apache的并发量首先应该查看Apache的MPM(多进程处理模块,处理多并发的方式)【 httpd -l 】

     通常处理多并发的方式有:

               worker 工作者模式

               perfork 预派生模式

               winnt   windows下的默认模式

worker模块占用的内存较小,对于流量较大的网站来说,是一个比较好的选择

profork虽然占用较大的内存,并且prefork内存使用设计较为优秀,可以在很多无法提供debug的平台上进行自我除错,同时prefork方式速度要稍高于worker ,然而它需要的cpu和memory资源也稍多于woker。

十一、伪静态化
1、 伪静态化通过修改Apache的配置,按照一定的规则将静态化请求转化为动态化

2、 正则表达式

匹配模式:

a) U:非贪婪匹配

b) M:多行模式(会将\n后的部分当做新的一行来对待)

c) S:单行模式

d) I 不区分大小写

e) G:全局查询

f) [\x{4e00-\x{9fa5}]/u 以utf-8来进行匹配中文

3、rewrite(重写规则)

     将一个URL重写到另一个URL请求上

1)配置httpd.conf中的开启rewrite(重写模块)

2)使用分布式文件配置 . htaccess 文件(ed来进行创建)

3)在将站点中的allowOverride all (支持分布式文件配置)

4)在 . htaccess 中配置重写规则

RewriteEngine on 开启重写引擎

Rewrite rule xx.html à xx.php

4、 重写规则的配置详情(.htaccess)

RewriteEngine on 开启重写引擎

RewriteCond 重写条件(在什么情况下,执行什么) 修改服务器变量

-f 表示是一个文件。

-d 表示是一个目录

当文件存在则访问,不存在则访问指定的页面

RewriteCond %{REQUEST_FILENAME} ! –f

添加重写的条件,判断referer头里边是否有本网站的语句,如果没有则不能进行访问

RewriteCond %{HTTP_REFERER} !localhost NC (!WWW.buy.com NC)

RewriteRule 重写规则

如:abc.php à cde.php?type=sport QSA (重写规则)

当该句允许使用QSA时,可以在该句的后边追加参数来进行接收

abc.php?name=dasheng&age=500

此时接收的参数为:array(‘type’=>’sport’,’name’=>’dasheng’,’age’=>50);

常用的规则:

RewriteRule .(jpg | jpeg | bmp | gif ) -[F] // 禁止采图

RewriteRule .(jpg | jpeg | bump | gif ) 110.gif // 当采图时进行重定向

RewriteRule goods-(\d+) . html à goods.php ? id = $1 // 当请求某个静态页面的时候,将其进行重定向

你可能感兴趣的:(php)