大型网站关键技术介绍 1.pv(pageviews),访问量大 带来问题 a.流量大10000000*2m-解决方案买带宽,优化程序(处理图片) b.并发量,同时访问网站的人多.,解决方案 对程序的架构重新设计.-服务器集群示意图: 1.数据量大-10亿记录 解决方法是 a.表的设计合理 b.分表
大型网站关键技术介绍
带来问题
a. 流量大 10000000*2m ->解决方案 买带宽 ,优化程序(处理图片)
b. 并发量,同时访问网站的人多.,解决方案
对程序的架构重新设计.->服务器集群 示意图:
解决方法是
a. 表的设计合理
b. 分表技术(垂直分割,水平分割) c. 建立索引 d. 读写分离 e. mysql配置优化(调整最大并发量,定时对数据库碎片整理,备份 crontab) f.硬件升级)
c. 页面静态化
d. 缓存技术(memcached)
简单解释一下页面静态化:
看几个概念,然后写代码:
静态网址: 比如 http://localhost/abc.html 即,如果我们访问的页面是静态页面,我们把这个url称为静态网站.
特点: 1. 利用seo (search engine optimization) 搜索引擎优化2. 访问速度快 3. 防止sql注入
http://localhost/index.php?u=xx&p=/*11288 */
如果我们写程序 loginCheck.php
[php] view plaincopy
动态网址 :比如 http://localhost/news.php?id=112 , 即,访问的是一个PHP页面,可以传入参数.称为动态网之.
特点: 1. 不利用SEO 2. 访问速度慢 3. 有被注入sql可能
伪静态网址 : 在实际开发中,我们希望达到这样目的,把下面的网址
http://localhost/ news.php?lang=cn&class=sprot&id=2
修改成如下网址
http://localhost/news-cn-sport-id2.html
上面的网址,我们称为伪静态网址 :
特点: 1. 利用SEO 2. 防止注入 3. 他任然要访问数据库,速度没有变化
从方式看(1. 真静态 2.伪静态)
从范围看(1.全局静态2. 局部静态化[ajax+jquery])
介绍一款测试压力的工具 该工具程序是apache自带的, 大家在工作中可以使用该工具来测试自己的网站并发量大小,和某个页面的访问时间
基本用法,进入到cmd 控制台
ab.exe –n 访问的总次数 –c 有多少人访问(并发量) 访问的页面url
举例说明:
ab.exe –n 10000 –c 100 http://locahost/test.php
当我们把 –c 调整到1000时,发现apache瘫痪. 给大家说下如何调整apache的最大并发量.
MPM (多路处理模块, 即 apache采用怎样的方式来处理并发.), 主要有三种方式
1. perfork 预处理进程方式
2. worker 工作模式
3. winnt 这个一般说是windows采用的.
原理示意图:
u 如何设置我们的apache的最大并发数 ,步骤如下:
(1) 在httpd.conf 文件中 修改
# Server-pool management (MPM specific)
Include conf/extra/httpd-mpm.conf
(2) 确定当前的apahce是什么MPM模式
进入到 apache/bin
httpd.exe –l
说明: 看 mpm_xxx.c 如果xxx是 winnt 说明是winnt ,另外还可能是 perfork 或者 worker
(1) 修改httpd-mpm.conf 文件.
ThreadsPerChild 1000
MaxRequestsPerChild 0
(2) 重启apahce ,测试
因为在linux下,一般说采用的MPM是 perfork模式,我们看看如何配置.
StartServers 5
MinSpareServers 5
MaxSpareServers 10
MaxClients 150 #并发量
MaxRequestsPerChild 0 #一个进程对应的线程数,对 worker更用.
给大家一个合理的建议配置. 对大部分网站,中型网站,配置:
StartServers 5 #预先启动
MinSpareServers 5
MaxSpareServers 10 #最大空闲进程
ServerLimit 1500 #用于修改apache编程参数
MaxClients 1000 #最大并发数
MaxRequestsPerChild 0
如果你的网站pv值 百万
ServerLimit 2500 #用于修改apache编程参数
MaxClients 2000 #最大并发数
最后有一个关于html和php的访问效率图 :
如果一个图片希望被百度到
在网站前台,我们建议 不要使用frame框架,不利用seo
如果我们给图片或者视频取名字,尽量简短.
先说明一下OB缓存的机制.
ob1.php 代码:说明的ob的各个用法->项目中
ob2.php 代码,说明了浏览器缓存存在.
说明: 在php5.2这个版本 在php.ini有一个配置 output_buffering ,默认是关闭,如果是关闭,这刚才的代码就会警告.
? 如何打开ob缓存
① 配置php.ini 文件 output_buffering = 4096
② 直接在程序中 ob_start();
1. 使用模板替换技术实现(正则表达式)
开发步骤:
create table news(
id int unsigned primary key auto_increment, /*新闻id,做成自增*/
title varchar(128) not null default ‘’, /*标题*/
content varchar(256) not null default ‘’, /*新闻内容*/
filename varchar(32) not null default ‘’ /*将来这个新闻对应静态页面*/
) engine=MyISAM charset utf8
测试数据:
insert into news (title,content) values('hello1','北京你好');
insert into news (title,content) values('hello2','四川你好');
到此,我们已经实现了传统的查询任务,
分析代码后,我们发现问题是,因为新闻内容相对稳定,所以没有必要每次都查询。优化的思路是: 当第一人查看某个新闻时,我们就生成一个对应的静态页面,当后面的人在查看,直接返回该静态页面即可.
代码实现:
再想想,上面的代码缺点是什么?
cms(内容管理系统,新闻,软件发布, 文章管理) 内容就固定不变,我们不能接受.
解决方案:
1 我设一个超时,30s, 我们保证30内不去修改,超过30秒,就更新一把.
走码:
2 上面的解决方案有时间延时,所以如果我们希望静态化没有时间延时,就应该使用模板提换技术来搞定.
思路: 图.
代码实现:整理
思考题:
① 请大家完成更新新闻的这个页面静态处理
② 如何把newsList.php 也做成一个静态页面.->思想
任务是: 把新闻管理系统的首页面也静态化.
通用的CMS系统的示意图:
对我们的新闻管理系统首页静态化
思考: 我们能不能再添加新闻后,就直接静态化首页面, 如果你的确希望只要首页的内容有变化,就立即更新,最后的代理整理:
把所有的动态页面,放入到manage文件夹:
[html] view plaincopy