SlideShare a Scribd company logo
大型网站提速关键技术:
页面静态化、
缓存技术、
Mysql 优化技术、
负载均衡、
集群、
读写分离
大型网站标准
pv 值( page views ) : 网站浏览量:
uv 值( unique visitor ) : 独立访客:
独立 ip :
大型网站带来的问题
大并发:
概念:在同一时间点,有多少用户同时访问网站。
大流量:
大并发,必然要导致大流量,需要高的带宽。
大存储:
数据库存储,表达到 G,T 级别。
大并发解决方案:
网站重新架构,分层技术,负载均衡,集群,读写分离
大流量解决方案:
( 1 )禁止外部的盗链,或者使用非技术手段来解
决,比如在图片上增加水印。
( 2 )网站的图片在保证能用的情况下,尽量小,
一般不要超过 300k.
( 3 )进可能使用背景图
( 4 )把占用流量的资源,比如图片,视频,文件
等放到专用的服务器上面,
( 5 )可以对数据压缩后再传输。
( 6 )花钱买带宽。
大存储解决方案:
( 1 )使用缓存技术,尽量不查数据库或少查数据库。
常见的有:
页面静态化(磁盘缓存)。
内存缓存技术( redis,memcached,mysql 数据库的 memory 存储引
擎)
( 2 )表设计要满足 3 范式。
( 3 )要创建适当的索引(主键索引,普通索引,唯一索引,全文索
引,)。
( 4 )分表技术
( 5 )分区技术,物理上把数据分到不同的空间。
( 6 )创建一些存储过程,函数,事务,触发器。
( 7 )读写分离
( 8 )优化 sql 语句,尽量自己需要的数据
( 9 )配置 mysql.ini 文件。比如配置并发量,缓存配置等。
( 10 ) mysql 服务器硬件升级。( 64 位处理器,多个 cpu 。)
页面静态化
页面静态化
概述:页面静态化分为两种。真静态,伪静态。
真静态 ; 把一个动态的页面,转成一个静态的页面
,
伪静态:从 url 地址上看是一个静态网址,但是实
际上还是对应一个动态页面,比如。
http://list.jd.com/737-738-751-0-2585-0-0-0-0-0-1-1-1-1-19-1601-3633-0.html
页面静态化 - 基本原理
页面静态化 - 几个重要概念
( 1 )静态网址
( 2 )动态网址
( 3 )伪静态网址
页面静态化 - 分类
从形式上看:
真静态,伪静态。
从静态化的范围看:
全局静态,局部静态(页面整体静态化,页面有数
据必须动态。)
页面静态化 - 实现页面静态化技术
实现页面静态化(真静态)有两种方法,
1 、使用 php 的缓存的机制,
2 、使用模板替换技术
页面静态化 -ob 缓存机制讲解
ob 就是 output_buffering: 输出缓存,在请求一个 php 的过程
中,我们实际上经过三个缓存,程序缓存, ob 缓存,浏览器
缓存。
说明 : 在 php5.2 这个版本 在 php.ini 有一个配置
output_buffering ,默认是关闭,如果是关闭,这刚才的
代码就会警告 .
☞ 如何打开 ob 缓存
•1 、配置 php.ini 文件 output_buffering = 4096
•2 、直接在程序中 ob_start();
页面静态化 -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, 总是放入到程序缓存
// 开启 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 缓存的几个重要规
则
<?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 缓存的测试
flush()
该函数是把 程序缓存的内容,强制刷新到 浏览器
ob_flush 和 flush() 的区别:
一些版本的浏览器只有当接受到 256 个字节后才开始显示,该页面,所
以必须发送一些额外的空格来让这些浏览器显示页面的内容。程序开头
可加 echo str_repeat(“”,1024);
页面静态化 -ob 缓存的测试
页面静态化 -ob 缓存案例
页面静态化 -ob 缓存优化 30 秒更新
网站并发测试工具
 apache/bin/ab.exe 程序可以来做效率测试
 基本使用 :
ab [options] [http[s]://]hostname[:port]/path
options 是选项 :
-n 执行访问总次数
-c 用户并发数量(有多少人同时访问)
该工具可以模拟多人并发访问某个页面。
网站并发测试工具
常用的压力测试软件:
ab : 优点:可以模拟各种请求 缺点:最大只能支撑 1000 的并发
webbench : 优点: 30000 万的 并发 缺点:只能模拟 GET 请求
loadrunner : 非常专业的压力测试软件
网站并发测试工具
如何调整 apache 的最大并发数
1 、在默认情况下, apache 的最大并发为 150 个,因此需要调整
首先搞清楚当前 apache 是什么 MPM( 多路处理模块 ), 通俗讲就是
apache 处理多并发的方式 ,
常见的有三种
( 1 ) perfork( 预派生模式 )
( 2 ) worker( 工作者模式 )
( 3 ) winnt 模式 (windows 下默认的模式 )
说明 : 看 mpm_xxx.c , 这里的 xxx 就是你的 mpm 模式
如何调整 apache 的最大并发数
2 、打开 httpd.conf 文件的 mpm 从配文件
# Server-pool management (MPM specific)
Include conf/extra/httpd-mpm.conf
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 的最大并发数
在 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 的最大并发数
MaxRequestsPerChild 用来控制每个进程在处理了多少次请求之后自动销毁,这
个参数可以设置为 0 表示无限(即不销毁进程)
如何调整 apache 的最大并发数
新闻管理系统实现真静态案例:
ob 缓存技术
模板替换技术

More Related Content

What's hot

摘星
摘星摘星
摘星
zenyuhao
 
高性能网站建设
高性能网站建设高性能网站建设
高性能网站建设
feifeipan
 
Nginx使用和模块开发
Nginx使用和模块开发Nginx使用和模块开发
Nginx使用和模块开发
qingpiao1983
 
Php及drupal性能优化系列(二)
Php及drupal性能优化系列(二)Php及drupal性能优化系列(二)
Php及drupal性能优化系列(二)
Robbin Zhao
 
Redis 介绍 -田琪
Redis 介绍 -田琪Redis 介绍 -田琪
Redis 介绍 -田琪
Shaoning Pan
 
MySQL-Proxy
MySQL-ProxyMySQL-Proxy
MySQL-Proxy
ruoyi ruan
 
Maven & mongo & sring
Maven & mongo & sringMaven & mongo & sring
Maven & mongo & sring
Tzu Chi University
 
Web开发中的缓存
Web开发中的缓存Web开发中的缓存
Web开发中的缓存
jeffz
 

What's hot (9)

Jsonp
JsonpJsonp
Jsonp
 
摘星
摘星摘星
摘星
 
高性能网站建设
高性能网站建设高性能网站建设
高性能网站建设
 
Nginx使用和模块开发
Nginx使用和模块开发Nginx使用和模块开发
Nginx使用和模块开发
 
Php及drupal性能优化系列(二)
Php及drupal性能优化系列(二)Php及drupal性能优化系列(二)
Php及drupal性能优化系列(二)
 
Redis 介绍 -田琪
Redis 介绍 -田琪Redis 介绍 -田琪
Redis 介绍 -田琪
 
MySQL-Proxy
MySQL-ProxyMySQL-Proxy
MySQL-Proxy
 
Maven & mongo & sring
Maven & mongo & sringMaven & mongo & sring
Maven & mongo & sring
 
Web开发中的缓存
Web开发中的缓存Web开发中的缓存
Web开发中的缓存
 

Similar to big web site

不一樣的Web server... coServ
不一樣的Web server... coServ不一樣的Web server... coServ
不一樣的Web server... coServ
Ben Lue
 
非常靠谱 Html 5
非常靠谱 Html 5 非常靠谱 Html 5
非常靠谱 Html 5 Tony Deng
 
缓存技术浅谈
缓存技术浅谈缓存技术浅谈
缓存技术浅谈
Robbin Fan
 
网页制作基础
网页制作基础网页制作基础
网页制作基础loo2k
 
[2008]网站重构 -who am i
[2008]网站重构 -who am i[2008]网站重构 -who am i
[2008]网站重构 -who am i
Twinsen Liang
 
Huangjing renren
Huangjing renrenHuangjing renren
Huangjing renrend0nn9n
 
网页制作基础
网页制作基础网页制作基础
网页制作基础loo2k
 
高性能网站最佳实践
高性能网站最佳实践高性能网站最佳实践
高性能网站最佳实践longhao
 
OPOA in Action -- 使用MagixJS简化WebAPP开发
OPOA in Action -- 使用MagixJS简化WebAPP开发OPOA in Action -- 使用MagixJS简化WebAPP开发
OPOA in Action -- 使用MagixJS简化WebAPP开发leneli
 
使用Nginx轻松实现开源负载均衡
使用Nginx轻松实现开源负载均衡使用Nginx轻松实现开源负载均衡
使用Nginx轻松实现开源负载均衡
cachowu
 
腾讯大讲堂08 可扩展web架构探讨
腾讯大讲堂08 可扩展web架构探讨腾讯大讲堂08 可扩展web架构探讨
腾讯大讲堂08 可扩展web架构探讨George Ang
 
Lamp高性能设计
Lamp高性能设计Lamp高性能设计
Lamp高性能设计锐 张
 
Node.js在淘宝的应用实践
Node.js在淘宝的应用实践Node.js在淘宝的应用实践
Node.js在淘宝的应用实践taobao.com
 
浅析浏览器解析和渲染
浅析浏览器解析和渲染浅析浏览器解析和渲染
浅析浏览器解析和渲染Ailsa126
 
Inside the browser
Inside the browserInside the browser
Inside the browser
otakustay
 
使用Big pipe提升浏览速度 wk_velocity
使用Big pipe提升浏览速度 wk_velocity使用Big pipe提升浏览速度 wk_velocity
使用Big pipe提升浏览速度 wk_velocity
kumawu
 
Responsive Web UI Design
Responsive Web UI DesignResponsive Web UI Design
Responsive Web UI Design
jay li
 
美团点评技术沙龙13-酒旅Hybrid架构体系及演进
美团点评技术沙龙13-酒旅Hybrid架构体系及演进美团点评技术沙龙13-酒旅Hybrid架构体系及演进
美团点评技术沙龙13-酒旅Hybrid架构体系及演进
美团点评技术团队
 
Web dev road map part one
Web dev road map part oneWeb dev road map part one
Web dev road map part one
安 闫
 

Similar to big web site (20)

不一樣的Web server... coServ
不一樣的Web server... coServ不一樣的Web server... coServ
不一樣的Web server... coServ
 
非常靠谱 Html 5
非常靠谱 Html 5 非常靠谱 Html 5
非常靠谱 Html 5
 
缓存技术浅谈
缓存技术浅谈缓存技术浅谈
缓存技术浅谈
 
网页制作基础
网页制作基础网页制作基础
网页制作基础
 
[2008]网站重构 -who am i
[2008]网站重构 -who am i[2008]网站重构 -who am i
[2008]网站重构 -who am i
 
Php
PhpPhp
Php
 
Huangjing renren
Huangjing renrenHuangjing renren
Huangjing renren
 
网页制作基础
网页制作基础网页制作基础
网页制作基础
 
高性能网站最佳实践
高性能网站最佳实践高性能网站最佳实践
高性能网站最佳实践
 
OPOA in Action -- 使用MagixJS简化WebAPP开发
OPOA in Action -- 使用MagixJS简化WebAPP开发OPOA in Action -- 使用MagixJS简化WebAPP开发
OPOA in Action -- 使用MagixJS简化WebAPP开发
 
使用Nginx轻松实现开源负载均衡
使用Nginx轻松实现开源负载均衡使用Nginx轻松实现开源负载均衡
使用Nginx轻松实现开源负载均衡
 
腾讯大讲堂08 可扩展web架构探讨
腾讯大讲堂08 可扩展web架构探讨腾讯大讲堂08 可扩展web架构探讨
腾讯大讲堂08 可扩展web架构探讨
 
Lamp高性能设计
Lamp高性能设计Lamp高性能设计
Lamp高性能设计
 
Node.js在淘宝的应用实践
Node.js在淘宝的应用实践Node.js在淘宝的应用实践
Node.js在淘宝的应用实践
 
浅析浏览器解析和渲染
浅析浏览器解析和渲染浅析浏览器解析和渲染
浅析浏览器解析和渲染
 
Inside the browser
Inside the browserInside the browser
Inside the browser
 
使用Big pipe提升浏览速度 wk_velocity
使用Big pipe提升浏览速度 wk_velocity使用Big pipe提升浏览速度 wk_velocity
使用Big pipe提升浏览速度 wk_velocity
 
Responsive Web UI Design
Responsive Web UI DesignResponsive Web UI Design
Responsive Web UI Design
 
美团点评技术沙龙13-酒旅Hybrid架构体系及演进
美团点评技术沙龙13-酒旅Hybrid架构体系及演进美团点评技术沙龙13-酒旅Hybrid架构体系及演进
美团点评技术沙龙13-酒旅Hybrid架构体系及演进
 
Web dev road map part one
Web dev road map part oneWeb dev road map part one
Web dev road map part one
 

big web site

Editor's Notes

  1. 如何把图片放到图片服务器: 1. 使用图片插件单独把图片上传到服务器服务器 2. 随表单一起提交到PHP服务器,再通过PHP把图片写到图片服务器。 磁盘阵列:多块硬盘(raid) raid0: 至少两块硬盘:数据会分布到多块硬盘上 radi1: 至少两块硬盘: 数据会复制到多块硬盘上,然后读时会从多块硬盘读 raid5: 至少三块硬盘:结合raid1和raid0 raid1+0: 和raid5但性能更好更昂贵
  2. *前面说了访问静态页面速度比动态页面快,证明一下: c:\apache\bin&amp;gt;ab -n 1000 -c 10 http://localhost/temp1.php 在编写一个temp2.php 直接输出 for循环的内容 c:\apache\bin&amp;gt;ab -n 1000 -c 10 http://localhost/temp2.php
  3. 如果我们的网站是中型网站, 建议在1500-2500之间。 如何是linux下 他的工作模式perfork 因为在linux下,一般说采用的MPM是 perfork模式, &amp;lt;IfModule mpm_prefork_module&amp;gt;              StartServers         5 #预先启动              MinSpareServers      5              MaxSpareServers      10 #最大空闲进程              ServerLimit          2500 #用于修改apache编译参数              MaxClients           2000 #最大并发数              MaxRequestsPerChild  0 &amp;lt;/IfModule&amp;gt; 如果你的网站pv值 百万 ServerLimit          2500 #用于修改apache编程参数MaxClients           2000 #最大并发数