大型网站关键技术介绍
1. pv值(page views),访问量大
带来问题
a. 流量大 10000000*2m ->解决方案 买带宽 ,优化程序(处理图片)
b. 并发量,同时访问网站的人多.,解决方案
对程序的架构重新设计.->服务器集群 示意图:
1. 数据量大->10亿记录
解决方法是
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
$id=$_GET[‘id’];
$pwd=$_GET[‘pwd’];
$sql=”select pwd from users where id=$id”;
$res=mysql_query($sql);
if($pwd= = =从数据库中取出的密码){
//说明该用户存在
}else{
//说明用户密码错误!
}
动态网址 :比如 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])
介绍一款测试压力的工具 ab.exe 该工具程序是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 文件.
<IfModule mpm_winnt_module>
ThreadsPerChild 1000
MaxRequestsPerChild 0
</IfModule>
(2) 重启apahce ,测试
因为在linux下,一般说采用的MPM是 perfork模式,我们看看如何配置.
<IfModule mpm_prefork_module>
StartServers 5
MinSpareServers 5
MaxSpareServers 10
MaxClients 150 #并发量
MaxRequestsPerChild 0 #一个进程对应的线程数,对 worker更用.
</IfModule>
给大家一个合理的建议配置. 对大部分网站,中型网站,配置:
<IfModule mpm_prefork_module>
StartServers 5 #预先启动
MinSpareServers 5
MaxSpareServers 10 #最大空闲进程
ServerLimit 1500 #用于修改apache编程参数
MaxClients 1000 #最大并发数
MaxRequestsPerChild 0