网站首页  |   业界社区  |  电信社区  |  技术社区   |  极客社区  |  游戏社区  |  生活社区   |   科技博客  |   同事录
TechWeb-技术社区


标题: [转贴] 基于反相代理的Web缓存加速(上)
yimadai
TW金牌会员
Rank: 6Rank: 6



UID 138204
精华 19
积分 1027
帖子 512
阅读权限 70
注册 2008-7-23
状态 离线
发表于 2008-7-28 16:59 资料 短消息 加为好友 添加 yimadai 为MSN好友 通过MSN和 yimadai 交谈
基于反相代理的Web缓存加速(上)

对于一个日访问量达到百万级的网站来说,速度很快就成为一个瓶颈。除了优化内容发布系统的应用本身外,如果能把不需要实时更新的动态页面的输出结果转化成静态网页来发布,速度上的提升效果将是显著的,因为一个动态页面的速度往往会比静态页面慢2-10倍,而静态网页的内容如果能被缓存在内存里,访问速度甚至会比原有动态网页有2-3个数量级的提高。 7N*C4c$e'?'V:w.n:q

,U'y7m9^7a后台的内容管理系统的页面输出遵守可缓存的设计,这样就可以把性能问题交给前台的缓存服务器来解决了,从而大大简化CMS系统本身的复杂程度。 (Q1y1O7X'E3?

4c(|7a4r1K%q,~"O6U静态缓存和动态缓存的比较
+`.o7z3v/f:xTechWeb-技术社区
5l:Z!G#U;G%utech.techweb.com.cn静态页面的缓存可能有2种形式:其实主要区别就是CMS是否自己负责关联内容的缓存更新管理。
)^3}7n4H0L8a%k4mTechWeb-技术社区5Q+U4i8O+\*O
静态缓存:是在新内容发布的同时就立刻生成相应内容的静态页面,比如:2003年3月22日,管理员通过后台内容管理界面录入一篇文章后,就立刻生成http://www.chedong.com/tech/2003/03/22/001.html这个静态页面,并同步更新相关索引页上的链接。
5i5^6}4g5n;b.z程序开发,操作系统,服务器,源码下载,Linux,Unix,BSD,PHP,Apach,asp,下载,源码,黑客,安全,技术社区,技术论坛4V6Y%f%G,u,t0C
动态缓存:是在新内容发布以后,并不预先生成相应的静态页面,直到对相应内容发出请求时,如果前台缓存服务器找不到相应缓存,就向后台内容管理服务器发出请求,后台系统会生成相应内容的静态页面,用户第一次访问页面时可能会慢一点,但是以后就是直接访问缓存了。 tech.techweb.com.cn0S!c2{(x4t)W&i4]&C

'l5D"o*s1N;M+ZTechWeb-技术社区如果去ZDNet等国外网站会发现他们使用的基于Vignette内容管理系统都有这样的页面名称:0,22342566,300458.html。其实这里的0,22342566,300458就是用逗号分割开的多个参数:
4^)k(e)L.b+x4u*E'O'g8~ f#E%L&@+D.X)r)`
第一次访问找不到页面后,相当于会在服务器端产生一个doc_type=0&doc_id=22342566&doc_template=300458的查询,而查询结果会生成的缓存的静态页面:0,22342566,300458.html

:v5l w-V"O)D
,s6M4J4~"O1I2vtech.techweb.com.cn静态缓存的缺点: TechWeb-技术社区5W/|6Y(j'g3^6g:y
(j1N&o1n0T5V
复杂的触发更新机制:这两种机制在内容管理系统比较简单的时候都是非常适用的。但对于一个关系比较复杂的网站来说,页面之间的逻辑引用关系就成为一个非常非常复杂的问题。最典型的例子就是一条新闻要同时出现在新闻首页和相关的3个新闻专题中,在静态缓存模式中,每发一篇新文章,除了这篇新闻内容本身的页面外,还需要系统通过触发器生成多个新的相关静态页面,这些相关逻辑的触发也往往就会成为内容管理系统中最复杂的部分之一。 tech.techweb.com.cn"U!B6F3^9U'T!I,p!n.n:N1L

7z#k5b.n1hTechWeb-技术社区旧内容的批量更新: 通过静态缓存发布的内容,对于以前生成的静态页面的内容很难修改,这样用户访问旧页面时,新的模板根本无法生效。在动态缓存模式中,每个动态页面只需要关心,而相关的其他页面能自动更新,从而大大减少了设计相关页面更新触发器的需要。 "R&}2W3H&p5n1Y

5w;r-X8r*_以前做小型应用的时候也用过类似方式:应用首次访问以后将数据库的查询结果在本地存成一个文件,下次请求时先检查本地缓存目录中是否有缓存文件,从而减少对后台数据库的访问。虽然这样做也能承载比较大的负载,但这样的内容管理和缓存管理一体的系统是很难分离的,而且数据完整性也不是很好保存,内容更新时,应用需要把相应内容的的缓存文件删除。但是这样的设计在缓存文件很多的时候往往还需要将缓存目录做一定的分布,否则一个目录下的文件节点超过3000,rm*都会出错。 tech.techweb.com.cn,h1F(Y*y!h4g
TechWeb-技术社区;P*U3\8i"u(x6u#C0|)V#V
这时候,系统需要再次分工,把复杂的内容管理系统分解成:内容输入和缓存这2个相对简单的系统实现。 tech.techweb.com.cn3a1S"q!E*i-u1J0x8I

)w"{3z+]3l-Q&u'@后台:内容管理系统,专心的将内容发布做好,比如:复杂的工作流管理,复杂的模板规则等…… tech.techweb.com.cn/H:h.|;U,K9P

7K8z1p [(L4_4U前台:页面的缓存管理则可以使用缓存系统实现
*Q)f)f'k5j8t$^&Q;I
$W.~1I"@7k,b4^-W程序开发,操作系统,服务器,源码下载,Linux,Unix,BSD,PHP,Apach,asp,下载,源码,黑客,安全,技术社区,技术论坛______________________             ___________________
8F;u*u+f$q+D7i'u|Squid Software cache|             |F5 Hardware cache|
2i'H%E4]6m.b(h2t#v"qtech.techweb.com.cn----------------------             -------------------TechWeb-技术社区1u0p$s"U,R(X2N3O;M
            \                    /
:z:k:H.^5X*L;U&F&{;T             \ ________________ /!B!q(r8L6T#].c$Q
               |ASP |JSP |PHP |
/@:I)u;q8c&Q%R-Q6jtech.techweb.com.cn             Content Manage System%K,b'f+D/N,p:Y$V/G X
               ----------------
$p(O*N'F,y)c:otech.techweb.com.cn,D+G0K:^*d/v
所以分工后:内容管理和缓存管理2者,无论哪一方面可选的余地都是非常大的:软件(比如前台80端口使用SQUID对后台8080的内容发布管理系
-a'K8w6W/I1O6dTechWeb-技术社区TechWeb-技术社区+D)t%f$Q7?'o;~/R
统进行缓存),缓存硬件,甚至交给akamai这样的专业服务商。 ;X6n%\5}!I+S:m!R(G
,q0@ ^"k9w6E
面向缓存的站点规划
$P-^5V$R c5o-h fTechWeb-技术社区
7P8{;t0C%G*`8k$htech.techweb.com.cn一个利用SQUID对多个站点进行做WEB加速http acceleration方案:
9O8A,H2q!C&n6h7W3E9x*D
原先一个站点的规划可能是这样的: 程序开发,操作系统,服务器,源码下载,Linux,Unix,BSD,PHP,Apach,asp,下载,源码,黑客,安全,技术社区,技术论坛5Q"w%?"c#S,s$a2|+@
tech.techweb.com.cn)X)H0@ K"B,\
200.200.200.207 www.chedong.com
9M5R:E$`/R$x)Q)z+`/x0Z,o1q9c9C
200.200.200.208 news.chedong.com
/d1b W#Q V2K7M程序开发,操作系统,服务器,源码下载,Linux,Unix,BSD,PHP,Apach,asp,下载,源码,黑客,安全,技术社区,技术论坛
/|:U;p,w%j&^6j9?:q7S$ctech.techweb.com.cn200.200.200.209 bbs.chedong.com
V-}(r,T0e8p4{,stech.techweb.com.cn程序开发,操作系统,服务器,源码下载,Linux,Unix,BSD,PHP,Apach,asp,下载,源码,黑客,安全,技术社区,技术论坛"I1h7L#i$R
200.200.200.205 images.chedong.com TechWeb-技术社区'b5R:e6{#P.d

0y7G)H&\&B.C2d7A!U程序开发,操作系统,服务器,源码下载,Linux,Unix,BSD,PHP,Apach,asp,下载,源码,黑客,安全,技术社区,技术论坛面向缓存服务器的设计中:所有站点都通过外部DNS指向到同一个IP:200.200.200.200/201这2台缓存服务器上(使用2台是为了冗余备份) $t1^:]-{(n-G"L
*T9a*M-A${5w.e2D*K!C
                          _____________________   ________2S;T*B l6S W8\,P9B6[$b
www.chedong.com  请求  \ |       cache box     | |        |  / 192.168.0.4   www.chedong.com 2q+^1n1x*L)@
news.chedong.com 请求   -| 200.200.200.200/201 |-|firewall| -  192.168.0.4   news.chedong.com
"O:L'v2w&n7})f+O+xTechWeb-技术社区bbs.chedong.com  请求  / |   /etc/hosts        | |   box  |  \ 192.168.0.3   bbs.chedong.com
8n7_)T)n0f4C9I6P8FTechWeb-技术社区                          ---------------------   --------
;r!o$r;C-O:a2R5L7@2T+Y
.Y*G.E6q!C%Y$h,u)O7E1U4g!e!r9?
工作原理:
L!Z-L9N1I#H4q7Q+`*[!I2w+Z1g/e
外部请求过来时,设置缓存根据配置文件进行转向解析。这样,服务器请求就可以转发到我们指定的内部地址上。 TechWeb-技术社区9|#o$G1?/Y%B G

1n:J2m9E#t.M4J;P在处理多虚拟主机转向方面:mod_proxy比squid要简单一些:可以把不同服务转向后后台多个IP的不同端口上。
(x/D1y.~2W!mtech.techweb.com.cn:N5K8b4q!l#z%K,|%W2c
而squid只能通过禁用DNS解析,然后根据本地的/etc/hosts文件根据请求的域名进行地址转发,后台多个服务器必须使用相同的端口。
3{8p.O"](K([*h
!D:L6N8k2W程序开发,操作系统,服务器,源码下载,Linux,Unix,BSD,PHP,Apach,asp,下载,源码,黑客,安全,技术社区,技术论坛使用反向代理加速,我们不仅可以得到性能上的提升,而且还能获得额外的安全性和配置的灵活度:
+d!G%O*Y8z2b,j7K5_TechWeb-技术社区程序开发,操作系统,服务器,源码下载,Linux,Unix,BSD,PHP,Apach,asp,下载,源码,黑客,安全,技术社区,技术论坛6R+k-j X#}/e$y3k([)F0s
配置灵活性提高:可以自己在内部服务器上控制后台服务器的DNS解析,当需要在服务器之间做迁移调整时,就不用大量修改外部DNS配置了,只需要修改内部DNS实现服务的调整。 6N+E,V6^%B*E

#a+V(\ v8e8?2\+p数据安全性增加:所有后台服务器可以很方便的被保护在防火墙内。
$~9h$d1n/q!?1e+K4sTechWeb-技术社区
)^ |0@*Z)C*[-C%D%b3n后台应用设计复杂程度降低:原先为了效率常常需要建立专门的图片服务器images.chedong.com和负载比较高的应用服务器bbs.chedong.com分离,在反向代理加速模式中,所有前台请求都通过缓存服务器:实际上就都是静态页面,这样,应用设计时就不用考虑图片和应用本身分离了,也大大降低了后台内容发布系统设计的复杂程度,由于数据和应用都存放在一起,也方便了文件系统的维护和管理。

引用 回复 顶部
查看积分策略说明快速回复主题
选项 标题 Smilies
禁用 URL 识别
禁用 Smilies
禁用 Discuz!代码
使用匿名发帖
使用个人签名
接收新回复邮件通知
内容





当前时区 GMT+8, 现在时间是 2008-12-3 08:13
京ICP证060517号

本论坛支付平台由支付宝提供
携手打造安全诚信的交易社区 Powered by Discuz! 5.5.0 © 2001-2008 Comsenz Inc.
Processed in 0.032817 second(s), 7 queries

清除 Cookies - 联系我们 - TechWeb.com.cn - Archiver - WAP