一、大型网站的判断
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’=>array(‘Home/index’,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下的默认模式
十一、伪静态化
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
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 // 当请求某个静态页面的时候,将其进行重定向