More Related Content Similar to big web site (20) big web site 6. 大存储解决方案:
( 1 )使用缓存技术,尽量不查数据库或少查数据库。
常见的有:
页面静态化(磁盘缓存)。
内存缓存技术( redis,memcached,mysql 数据库的 memory 存储引
擎)
( 2 )表设计要满足 3 范式。
( 3 )要创建适当的索引(主键索引,普通索引,唯一索引,全文索
引,)。
( 4 )分表技术
( 5 )分区技术,物理上把数据分到不同的空间。
( 6 )创建一些存储过程,函数,事务,触发器。
( 7 )读写分离
( 8 )优化 sql 语句,尽量自己需要的数据
( 9 )配置 mysql.ini 文件。比如配置并发量,缓存配置等。
( 10 ) mysql 服务器硬件升级。( 64 位处理器,多个 cpu 。)
13. 页面静态化 -ob 缓存机制讲解
ob 就是 output_buffering: 输出缓存,在请求一个 php 的过程
中,我们实际上经过三个缓存,程序缓存, ob 缓存,浏览器
缓存。
说明 : 在 php5.2 这个版本 在 php.ini 有一个配置
output_buffering ,默认是关闭,如果是关闭,这刚才的
代码就会警告 .
☞ 如何打开 ob 缓存
•1 、配置 php.ini 文件 output_buffering = 4096
•2 、直接在程序中 ob_start();
14. 页面静态化 -ob 缓存的几个重要规
则1. 在服务中,如果我们开启了 ob 缓存,则 echo 数据首先放
入到 OB 中
2. 如何开启 OB , 有两个方法 1. 在 php.ini 配置
;output_buffering = 4096 这里去掉 ; 号即可, 2. 在 php
页面中使用 ob_start();
3. ☞ 通过 php.ini 打开的,则作用于所有的 php 页面 , 使
用 ob_start() 打开则只作用于该页面
4. 当 PHP 页面执行到最后,则会把 ob 缓存的数据 ( 如果有
的话 ) , 强制刷新到程序缓存,然后通过 apache 对数据
封装成 http 响应包,返回给浏览器
5. 如果没有 ob, 所有的数据直接放入程序缓存 .
6. header 信息不管你是否开启 ob, 总是放入到程序缓存
15. // 开启 ob 缓存
ob_start();
echo "hello,wrold!";
header("content-type: text/html;charset=utf-8");
echo " 你好 !";
// 把 ob 内容缓存清空 , 但是 ob 缓存还在
//ob_clean();
// 把 ob 内容缓存清空 , 同时关闭 ob 缓存
//ob_end_clean();
// 把 ob 缓存的内容,刷新到程序缓存,同时关闭 ob 缓存
//ob_end_flush();
// 把 ob 缓存的内容,刷新到程序缓存,不关闭 ob 缓存
ob_flush();
echo " 笑傲江湖 ";
// 获取 ob 缓存内容
$con=ob_get_contents();
// 需要把日志,写入文件 . echo print_r var_dump ,写文件 , 下断点
file_put_contents("d://hsp.log",$con);
页面静态化 -ob 缓存的几个重要规
则
16. <?php
ob_start(); echo "abc";
header("content-type:text/html;charset=utf-8");
echo "hello";
ob_clean();
echo "aa";
header("content-type:text/html;charset=utf-8");
?>
<?php
ob_start(); echo "abc";
header("content-type:text/html;charset=utf-8");
echo "hello";
ob_end_clean();
echo "aa";
header("content-type:text/html;charset=utf-8");
?>
<?php
ob_start(); echo "abc";
header("content-type:text/html;charset=utf-8");
echo "hello";
ob_flush();
echo "aa";
echo ob_get_contents();
?>
<?php
ob_start(); echo "abc";
header("content-type:text/html;charset=utf-8");
echo "hello";
ob_end_flush();
echo "aa";
echo ob_get_contents();
?>
页面静态化 -ob 缓存的测试
21. apache/bin/ab.exe 程序可以来做效率测试
基本使用 :
ab [options] [http[s]://]hostname[:port]/path
options 是选项 :
-n 执行访问总次数
-c 用户并发数量(有多少人同时访问)
该工具可以模拟多人并发访问某个页面。
网站并发测试工具
常用的压力测试软件:
ab : 优点:可以模拟各种请求 缺点:最大只能支撑 1000 的并发
webbench : 优点: 30000 万的 并发 缺点:只能模拟 GET 请求
loadrunner : 非常专业的压力测试软件
23. 如何调整 apache 的最大并发数
1 、在默认情况下, apache 的最大并发为 150 个,因此需要调整
首先搞清楚当前 apache 是什么 MPM( 多路处理模块 ), 通俗讲就是
apache 处理多并发的方式 ,
常见的有三种
( 1 ) perfork( 预派生模式 )
( 2 ) worker( 工作者模式 )
( 3 ) winnt 模式 (windows 下默认的模式 )
说明 : 看 mpm_xxx.c , 这里的 xxx 就是你的 mpm 模式
24. 如何调整 apache 的最大并发数
2 、打开 httpd.conf 文件的 mpm 从配文件
# Server-pool management (MPM specific)
Include conf/extra/httpd-mpm.conf
25. 3 、修改 httpd-mpm.conf 文件,调整最大并发
# WinNT MPM
# ThreadsPerChild: constant number of worker threads in the server process
# MaxRequestsPerChild: maximum number of requests a server process
serves
<IfModule mpm_winnt_module>
#ThreadsPerChild 就是你的最大并发数
ThreadsPerChild 1000
# 子进程可以创建最大进程总数
MaxRequestsPerChild 0
</IfModule>
说明 : 并不是你调整到 1000, 你的服务器就一定可以并发 1000, 因为要考虑你的
服务器的本身性能 .
如何调整 apache 的最大并发数
26. 在 linux 下一般是 perfor 模式
给大家一个合理的建议配置 . 对大部分网站,中型网站,配置 :
<IfModule mpm_prefork_module>
StartServers 5 # 预先启动
MinSpareServers 5
MaxSpareServers 10 # 最大空闲进程
ServerLimit 1500 # 用于修改 apache 编程参数
MaxClients 1000 # 最大并发数
MaxRequestsPerChild 0 # 一个进程对应的线程数,对
worker 更有效果。如果是 0 则不让进程死掉。
</IfModule>
如果你的网站 pv 值 百万
ServerLimit 2500 # 用于修改 apache 编程参数
MaxClients 2000 # 最大并发数
如何调整 apache 的最大并发数
Editor's Notes 如何把图片放到图片服务器:
1. 使用图片插件单独把图片上传到服务器服务器
2. 随表单一起提交到PHP服务器,再通过PHP把图片写到图片服务器。
磁盘阵列:多块硬盘(raid)
raid0: 至少两块硬盘:数据会分布到多块硬盘上
radi1: 至少两块硬盘: 数据会复制到多块硬盘上,然后读时会从多块硬盘读
raid5: 至少三块硬盘:结合raid1和raid0
raid1+0: 和raid5但性能更好更昂贵
*前面说了访问静态页面速度比动态页面快,证明一下:
c:\apache\bin&gt;ab -n 1000 -c 10 http://localhost/temp1.php
在编写一个temp2.php 直接输出 for循环的内容
c:\apache\bin&gt;ab -n 1000 -c 10 http://localhost/temp2.php
如果我们的网站是中型网站, 建议在1500-2500之间。
如何是linux下 他的工作模式perfork
因为在linux下,一般说采用的MPM是 perfork模式,
&lt;IfModule mpm_prefork_module&gt; StartServers 5 #预先启动 MinSpareServers 5 MaxSpareServers 10 #最大空闲进程 ServerLimit 2500 #用于修改apache编译参数 MaxClients 2000 #最大并发数 MaxRequestsPerChild 0
&lt;/IfModule&gt;
如果你的网站pv值 百万
ServerLimit 2500 #用于修改apache编程参数MaxClients 2000 #最大并发数