第九章-Plone站点缓存加速
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Plone站点缓存加速
如果网站的访问量非常大,在直接使用Plone提供服务生成动态页面的情况下,网站页面打开会非常慢,用户体验不佳。
为了解决这个问题,从Plone2.5开始,Plone自带了一个叫做CacheFu的插件产品。使用CacheFu,可通过内存、缓存代理服务器、浏览器多种缓存的组合,实现完成Plone
站点的加速。一旦配置完成,你的站点可提速近10倍;如果配合Squid,可提速近50倍。对于真正的大负载的Plone网站部署,都是需要采用CacheFu来进行网站加速的。
本章介绍如何利用CacheFu和Squid加速您的站点。本章学习重点:
∙HTTP缓存协议和缓存原理
∙CacheFu的缓存设置
∙squid的设置和缓存清除
9.1 缓存加速原理
9.1.1 基本原理
所谓缓存,是指将计算后的结果保存到内存或者硬盘,下次访问的时候,直接将保存的结果输出,从而避免重复计算导致服务器过载,同时也加快响应速度。
如果将需要网络传输的数据缓存,还可以起到减少网络流量,节省带宽耗用的作用。
同时,配置缓存的时候,需要考虑注意回避如下问题。这也是后面配置缓存时需要设法规避的。
∙缓存可能占用大量的内存、硬盘空间。我们需要权衡缓存生效的时间、保存的数量,避免缓存内容过大。
∙缓存可能带来过时的数据。一旦更新数据,需要刷新缓存。
Zope在数据存取的各个环节,均可设置缓存。
9.1.2 回顾: ZODB的缓存管理
在ZODB一章中,我们介绍了ZEO缓存和ZODB的缓存,回顾如下:
∙ZEO缓存:在zope.conf中的zeoclient中设置,表示对ZEO数据库的缓存。缓存保存在本地硬盘中,避免每次从远程ZEO服务器上读取对象。
∙ZODB的缓存:在zope.conf的zodb_db中设置,表示内存中缓存的ZODB对象数量。缓存保存在内存中,可避免每次都从硬盘中读取。在ZMI中的Control_Panels 中,可对ZODB缓存进行清除和分析。
9.1.3 Zope的缓存管理器
zope提供了一个叫做Zope缓存管理器(CacheManager)可插拔的缓存框架。你可编写一个缓存管理器,然后将支持缓存功能的Zope对象和这个缓存管理器绑定,就可以对这个对象进行缓存。
文件、图片、ZPT、DTML等对象都支持缓存管理。在ZMI中,有个 Cache 标签页用于设置缓存管理器。比如网站的logo图片 portal_skins/custom/logo.jpg 缓存设置界面如图9.1所示。
【图9.1】对象的缓存管理器绑定
在上图中,下拉列表中的HTTPCache、RAMCache等,都是网站的一些缓存管理器,可选择一个,将对象的缓存管理委托给该管理器管理。
在Plone网站根的ZMI界面中,我们可以找到这些缓存管理器,典型如图9.2所示。
【图9.2】Plone预装的几个缓存管理器对象
其中:
∙RAMCache对象是一种叫做RAM Cache Manager 的缓存管理器,他直接用服务器内存进行缓存结果。为避免内存耗用过多,RAMCache一般不适合缓存整个页面,而适合对脚本的中间的结算结果进行缓存。
∙HTTPCache对象是一种叫做Accelerated HTTP Cache Manager 的缓存管理器,他仅仅设置http的缓存消息头,不真正进行缓存,可和squid/apache这样的缓存服务器配合进行缓存。缓存服务器可将动态页面转换为静态页面缓存起来,再次访问的时候,将直接由代理服务器提供服务,从而提升性能,减少Zope的负担。
其中RAMCache缓存管理器的设置界面如图9.3所示。
【图9.3】RAMCache内存缓存管理器的设置
其中:
∙REQUEST variables: request变量中会对结果有影响的参数。根据这个参数的不同,缓存管理器会保留多个结果版本。图中设置AUTHENTICATED_USER,表示系统会为每个登录用户保留一份缓存。
∙Threshold entires: 最多保留多少份缓存数据。这个可避免缓存数量逐步增加,导致内存不够用的情况发生。
∙Maximum age of a cache entry (seconds): 每个缓存的最大存活时间。及时的让缓存失效,可减少数据过时的机会。
∙Cleanup interval (seconds): 数据清理周期时间。定期对数据进行清理。
9.1.4 CacheFu的缓存框架
网站的内容非常多。Zope默认的缓存管理,仅仅能够对内容逐一进行内容的关联,而且操作界面不友好。
针对这一问题,Plone 2.5提供了一个叫做CacheFu的缓存框架,构建了一个基于规则的缓存策略,分离了缓存的条件、缓存方法、缓存消息头,同时提供了一个友好的缓存管理节目。
在内部实现上,CacheFu提供了几个新的缓存管理器:
∙Page Cache Manager:类似RAM Cache Manager, 同时将响应消息头也保存了,适合对某些页面进行缓存。
∙Policy HTTP Cache Manager:基于策略的HTTP缓存管理器,具体的缓存消息头设置是由Cache在Plone的控制面板中设置的,在后面章节中,我们会详细介绍。
9.2 HTTP协议的缓存
浏览网页采用的是HTTP协议实现浏览器和服务器的通讯。HTTP协议中包括了完整的缓存管理规范。
9.2.1 缓存部件
用户通过浏览器来访问Plone服务器的时候,中间可能经过浏览器和缓存服务器,如下结构图所示:
+------------+ +---------------------+ +--------------------+
| Zope/Plone |<--| Squid缓存代理服务器 |<--| 浏览器(FireFox/IE) |<---
用户
+------------+ +---------------------+ +--------------------+
| |
V V
/-------------\ /--------------\
| Proxy Cache | | Brower Cache |
\-------------/ \--------------/
这里,浏览器和缓存服务器都能提供缓存功能:
∙浏览器:一般浏览器都可以进行缓存。浏览器根据接收页面的http 消息头中缓存设置信息进行缓存。浏览器一般都有清除缓存的功能。
∙Squid/Apache缓存服务器proxy:缓存服务器,Squid更加专业。
缓存服务器位于浏览器和,web服务器之间。缓存服务器根据http部分消息头进行缓存。
web服务器可发送purge指令到缓存服务器,清除过时的缓存。
Squid支持多个缓存服务器树状阵列,缓存服务器之间通过ICP协议进行缓存信息交换。如果在zope.conf中开启icp服务器,则Zope可设置为squid的上级缓存服务器,让squid在多个zope服务器之间负载均衡。
9.2.2 观察HTTP消息头
HTTP协议包括消息头和消息体。HTTP缓存消息头可控制网页何时、在哪里缓存。
在Linux下,可用 wget-d ,查看完整的HTTP请求和响应消息头。比如查看访问首页时的消息头如下: