页面缓存是安装在Web服务器之前的缓存服务器,用于卸载对服务器上的静态和动态对象的请求。该系统或服务器器的常见名称还有反向代理缓存、反向代理服务器和反向代理。经过慎重考虑,我们采用了页面缓存这个术语,因为代理程序还会负责负载平衡或SSL加速,而我们只想专注于缓存服务器对可扩展性的影响。被实现的代理缓存如图64所示。页面缓存会处理部分或所有请求,直到它存储的页面或数据过期了,或服务器收到的请求了它没有存储的数据。请求失败叫做缓存未命中,原因可能是缓存满了,没有空间为最新的请求存储数据,也可能是缓存未满,但请求频率较低或最近重启过。缓存未命中会被传递给Web服务器,Web服务器用该请求回答并填充缓存,从而替换缓存中最近很少使用的记录,或者在空白处写入数据。
在这个原则中,有三个关键点。
第一点,应该在Web服务器前实现页面缓存(反向代理程序),这样你就会得到很大的可扩展性。生成动态内容的Web服务器的工作量会大大减少,因为计算过的结果(或响应)在合适的时间被恰当地缓存了。提供静态内容的Web服务器不需要查询那些内容,可以少用一些缓存。我们同意,静态内容的页面缓存的好处没有动态内容的页面缓存那么大。
第二点,需要利用正确的HTTP头,确保对内容和查询结果进行最大化的缓存(当然还要确保业务正确)。
第三点,尽可能加入RFC2616中的另一个HTTP头,从而最大化内容的可缓存性。这个新的头是ETag,也就是实体标签(entity tag),目的是配合If-None-Match有条件地从服务器获得请求。ETag是由服务器在浏览器第一次请求一个对象时赋予该对象的唯一标识符。如果服务器端的资源改变了,那么服务器会为它分配一个新的Erag。假设能被浏览器(客户端)正确地支持,对象和它的ETag标签就会被浏览器缓存,之后浏览器向Web服务器发送的工f-None-Match请求都会包含该标签。如果标签匹配,服务器会用状态HTIP304 Not Modified进行响应。如果该标签与服务器上的不一致,服务器会发送更新过的对象以及与之相关的Etag-ETag是可选的,但如果要确保在任何特定的网站设计页面或对象的整个网络传输中,页面缓存和代理缓存具有更大的可缓存性,强烈推荐使用Brag。
本文地址://www.qlpinke.com//article/3475.html