yimadai
TW金牌会员

UID 138204
精华
19
积分 1027
帖子 512
阅读权限 70
注册 2008-7-23
状态 离线
|
|
|
基于反相代理的Web缓存加速(上)
对于一个日访问量达到百万级的网站来说,速度很快就成为一个瓶颈。除了优化内容发布系统的应用本身外,如果能把不需要实时更新的动态页面的输出结果转化成静态网页来发布,速度上的提升效果将是显著的,因为一个动态页面的速度往往会比静态页面慢2-10倍,而静态网页的内容如果能被缓存在内存里,访问速度甚至会比原有动态网页有2-3个数量级的提高。 TechWeb-技术社区!w1K7x+d/o"M;{.l2f2{)V
%`;t3Q2F&P6@.d后台的内容管理系统的页面输出遵守可缓存的设计,这样就可以把性能问题交给前台的缓存服务器来解决了,从而大大简化CMS系统本身的复杂程度。 程序开发,操作系统,服务器,源码下载,Linux,Unix,BSD,PHP,Apach,asp,下载,源码,黑客,安全,技术社区,技术论坛9b%y(|$O"f8Z
(r5T2T:o9h+n'q&]5O9Z静态缓存和动态缓存的比较
9X%D4P&A&N6t)w p$s1n程序开发,操作系统,服务器,源码下载,Linux,Unix,BSD,PHP,Apach,asp,下载,源码,黑客,安全,技术社区,技术论坛
%f!A7R$u.?静态页面的缓存可能有2种形式:其实主要区别就是CMS是否自己负责关联内容的缓存更新管理。 tech.techweb.com.cn,x3X:['t%Q2t/b
+F!R(p)b H6L2k5g
静态缓存:是在新内容发布的同时就立刻生成相应内容的静态页面,比如:2003年3月22日,管理员通过后台内容管理界面录入一篇文章后,就立刻生成 http://www.chedong.com/tech/2003/03/22/001.html这个静态页面,并同步更新相关索引页上的链接。 tech.techweb.com.cn,W2I;a!Y+q#~
tech.techweb.com.cn2t2}0v0f3h!F
动态缓存:是在新内容发布以后,并不预先生成相应的静态页面,直到对相应内容发出请求时,如果前台缓存服务器找不到相应缓存,就向后台内容管理服务器发出请求,后台系统会生成相应内容的静态页面,用户第一次访问页面时可能会慢一点,但是以后就是直接访问缓存了。
"N0N"a/})L o.T'x&y4I3Z/J&U9Y-^2@+](N+e
如果去ZDNet等国外网站会发现他们使用的基于Vignette内容管理系统都有这样的页面名称:0,22342566,300458.html。其实这里的0,22342566,300458就是用逗号分割开的多个参数:
(x+O9C5i1T,Y3O&~
%M:E2@,F*T(c*U;Etech.techweb.com.cn第一次访问找不到页面后,相当于会在服务器端产生一个doc_type=0&doc_id=22342566&doc_template=300458的查询,而查询结果会生成的缓存的静态页面:0,22342566,300458.html
:@!A/M:o7}9d
#S"H4G+y!\TechWeb-技术社区静态缓存的缺点: .g8F"B"M!a.?
R%|'A"j8G ^-m9\)K:I$@%Z/U
复杂的触发更新机制:这两种机制在内容管理系统比较简单的时候都是非常适用的。但对于一个关系比较复杂的网站来说,页面之间的逻辑引用关系就成为一个非常非常复杂的问题。最典型的例子就是一条新闻要同时出现在新闻首页和相关的3个新闻专题中,在静态缓存模式中,每发一篇新文章,除了这篇新闻内容本身的页面外,还需要系统通过触发器生成多个新的相关静态页面,这些相关逻辑的触发也往往就会成为内容管理系统中最复杂的部分之一。 程序开发,操作系统,服务器,源码下载,Linux,Unix,BSD,PHP,Apach,asp,下载,源码,黑客,安全,技术社区,技术论坛)N4K+T5p-v-L/N8B!a/d2\#z
*}/F!I1g9|"W+O%U旧内容的批量更新: 通过静态缓存发布的内容,对于以前生成的静态页面的内容很难修改,这样用户访问旧页面时,新的模板根本无法生效。在动态缓存模式中,每个动态页面只需要关心,而相关的其他页面能自动更新,从而大大减少了设计相关页面更新触发器的需要。
,P$s4X*l1K3^8].B
![#Y)w#x#S)A(g8D i-h以前做小型应用的时候也用过类似方式:应用首次访问以后将数据库的查询结果在本地存成一个文件,下次请求时先检查本地缓存目录中是否有缓存文件,从而减少对后台数据库的访问。虽然这样做也能承载比较大的负载,但这样的内容管理和缓存管理一体的系统是很难分离的,而且数据完整性也不是很好保存,内容更新时,应用需要把相应内容的的缓存文件删除。但是这样的设计在缓存文件很多的时候往往还需要将缓存目录做一定的分布,否则一个目录下的文件节点超过3000,rm*都会出错。 tech.techweb.com.cn4u'v8F"\'w#_'i/l3w!b.P
8d3U$B9U:f(Z7xTechWeb-技术社区这时候,系统需要再次分工,把复杂的内容管理系统分解成:内容输入和缓存这2个相对简单的系统实现。
5D,e5Z3J n.r
4v Q6m.^8I.N程序开发,操作系统,服务器,源码下载,Linux,Unix,BSD,PHP,Apach,asp,下载,源码,黑客,安全,技术社区,技术论坛后台:内容管理系统,专心的将内容发布做好,比如:复杂的工作流管理,复杂的模板规则等……
-Q9j#n,w2[&o"K0A
*x'^6Z+`*q+[%g6]前台:页面的缓存管理则可以使用缓存系统实现 +q*_%i1M0{+M
+~$Z"o+})e [TechWeb-技术社区______________________ ___________________ )T&j2s4S2g+g T%B$[3j.e
|Squid Software cache| |F5 Hardware cache|
.I6B0C7M(H"v(u%g0Vtech.techweb.com.cn---------------------- ------------------- "a!R+H(U5b
\ /
#b:j)O-g(a/V,U,L \ ________________ /
1d8o,~%F"s |ASP |JSP |PHP | $x#l8w4T4d4]
Content Manage System $K6~8I6}*N
---------------- :Z9q7F:X2m5j9f0c8~$p
TechWeb-技术社区;t+F5h;I;l8R#L
所以分工后:内容管理和缓存管理2者,无论哪一方面可选的余地都是非常大的:软件(比如前台80端口使用SQUID对后台8080的内容发布管理系 }&Z1K'u,P"s
tech.techweb.com.cn o6h&C#q8R:|8A
统进行缓存),缓存硬件,甚至交给 akamai这样的专业服务商。 %i:t/^;W&x;\9F:f6M
;~:u:J#o3q%@-g5O:~tech.techweb.com.cn面向缓存的站点规划 !X;`;d!N#O(t-P
9~0p,y/|/f h
一个利用SQUID对多个站点进行做WEB加速http acceleration方案:
$C9o*y7\ tTechWeb-技术社区9B {8U8a$J"C(c
原先一个站点的规划可能是这样的: 程序开发,操作系统,服务器,源码下载,Linux,Unix,BSD,PHP,Apach,asp,下载,源码,黑客,安全,技术社区,技术论坛2i;Z+h#\8}!m
1c$G5r!S"b
200.200.200.207 www.chedong.com *V)_(X/G8?$S
!L-_"C'L!w-z4N200.200.200.208 news.chedong.com %G6^0I(t3U6b4^.x(X
程序开发,操作系统,服务器,源码下载,Linux,Unix,BSD,PHP,Apach,asp,下载,源码,黑客,安全,技术社区,技术论坛0n#V!y&O:x-| ~-G4b
200.200.200.209 bbs.chedong.com tech.techweb.com.cn5I2w.f!X%W.S4b(v6l$A
#B8` }#K*{9F'^-?2n
200.200.200.205 images.chedong.com
\.S5b4Z#?!a0]
$`*C*r.|!j6w&s$f.E-e3kTechWeb-技术社区面向缓存服务器的设计中:所有站点都通过外部DNS指向到同一个IP:200.200.200.200/201这2台缓存服务器上(使用2台是为了冗余备份) 6u-i+M,_&z s%c0b&E6q#A7?
:e"N$S4Q6G2I(^+_;o,LTechWeb-技术社区 _____________________ ________ 3t$j,s0m1v3Q
www.chedong.com 请求 \ | cache box | | | / 192.168.0.4 www.chedong.com tech.techweb.com.cn+Q"n(h7L4g$u*S/w!j4d
news.chedong.com 请求 -| 200.200.200.200/201 |-|firewall| - 192.168.0.4 news.chedong.com
/D:s1Q4@%}6H程序开发,操作系统,服务器,源码下载,Linux,Unix,BSD,PHP,Apach,asp,下载,源码,黑客,安全,技术社区,技术论坛bbs.chedong.com 请求 / | /etc/hosts | | box | \ 192.168.0.3 bbs.chedong.com
-Y/x*M'j2m"W(E5^ --------------------- -------- 0K-]"K,{3H;L8y2s
4F&V#k*j$x6v6?2Y$A.I6|1r)G/Y
工作原理: 程序开发,操作系统,服务器,源码下载,Linux,Unix,BSD,PHP,Apach,asp,下载,源码,黑客,安全,技术社区,技术论坛#W(p;l3~4J2q'@3l
:^3y4|3h3B9P$O程序开发,操作系统,服务器,源码下载,Linux,Unix,BSD,PHP,Apach,asp,下载,源码,黑客,安全,技术社区,技术论坛外部请求过来时,设置缓存根据配置文件进行转向解析。这样,服务器请求就可以转发到我们指定的内部地址上。
'G3Q;{:P7d#L
;x5Q%K+@;F在处理多虚拟主机转向方面:mod_proxy比squid要简单一些:可以把不同服务转向后后台多个IP的不同端口上。 'E#Y:u&F(A8g4w6L#O
0o#O&x0}5N c2F'b而squid只能通过禁用DNS解析,然后根据本地的/etc/hosts文件根据请求的域名进行地址转发,后台多个服务器必须使用相同的端口。 TechWeb-技术社区(@*@,];M:c8`%W8j
R%R%x0a+w1M9g%u(U&r使用反向代理加速,我们不仅可以得到性能上的提升,而且还能获得额外的安全性和配置的灵活度: tech.techweb.com.cn!?9^;K$j(d+O
.]!r&e$C'T$]1@,^(Q7tTechWeb-技术社区配置灵活性提高:可以自己在内部服务器上控制后台服务器的DNS解析,当需要在服务器之间做迁移调整时,就不用大量修改外部DNS配置了,只需要修改内部DNS实现服务的调整。
,g(K)a%A4Q%X
+D0i2|0b [0H#e程序开发,操作系统,服务器,源码下载,Linux,Unix,BSD,PHP,Apach,asp,下载,源码,黑客,安全,技术社区,技术论坛数据安全性增加:所有后台服务器可以很方便的被保护在防火墙内。
5T1[&p"u$e6c&S;x程序开发,操作系统,服务器,源码下载,Linux,Unix,BSD,PHP,Apach,asp,下载,源码,黑客,安全,技术社区,技术论坛tech.techweb.com.cn&V8}0Y n"B$I
后台应用设计复杂程度降低:原先为了效率常常需要建立专门的图片服务器images.chedong.com和负载比较高的应用服务器bbs.chedong.com分离,在反向代理加速模式中,所有前台请求都通过缓存服务器:实际上就都是静态页面,这样,应用设计时就不用考虑图片和应用本身分离了,也大大降低了后台内容发布系统设计的复杂程度,由于数据和应用都存放在一起,也方便了文件系统的维护和管理。
|
引用
回复
|
|