对于网站建设来说,页面缓存是安装在网站服务器之前的缓存服务器,用于卸载对于服务器上的静态和动态对象的请求。在或建站软件中页面缓存还有其它常见名称,如反向代理缓存,反向代理服务器和反向代理。经过慎重考虑,最后还是采用了页面缓存这个术语,因为在建站系统中代理程序还会负责负载平衡或SSL加速,而我们只想专注于缓存服务器对可扩展性的影响。
页面缓存会处理部分或所有请求,直到它存储的页面或数据过期,或服务器收到的请求需要没有被缓存的数据。请求失败叫做缓存未命中,原因可能是缓存满了,没有空间为最新的请求缓存数据,也可能是缓存未满,但请求的频率较低或最近重启过。未命中缓存的请求会被直接传递给web server,并且用该请求回答并填充缓存,从而替换缓存中最近很少使用的数据,或者在空白处写入数据。
在这个过程中,有三个关键点。
第一,应该在web server处理请求之前实现页面缓存,这样建站系统就会得到很大的可扩展性。生成动态内容的web server工作量会大大减少,因为计算过的结果在合适的时间被恰当的缓存了。提供静态内容的web server不需要查询的内容,可以少用一些缓存空间。因此,对于静态网站来说,缓存的作用就不那么明显了,因为输出内容本身就没有太大的计算量和负担。
第二,建站系统中要实现缓存必须使用正确的http头,确保对内容和查询结果进行最大化的缓存,并且时避免通过meta标签刷新页面,如<meta refresh=’ http://www.lywebs.com’/>(当然是在确保业务正确性的前提下)。
第三点,尽可能加入RFC2616标准中的另一个http响应头参数,从而最大化内容的可缓存性。这个新的参数是ETag,也就是实体标签,目的是配合If-None-Match有条件地从服务器获得请求。ETag是由服务器端的资源改变了,那么服务器会为它分配一个新的ETag。假设能被浏览器正确地支持,对象和它的ETag标签就会被浏览器缓存,之后浏览器向web server发送的If-None-Match请求都会包含该标签。如果标签匹配,服务器会用http 304 not modified进行响应。如果该标签与服务器上的不一致,服务器会发送更新过的对象以及与之相关的ETag。
在大多数建站系统中ETag是可选的,但如果要确保在任何特定的页面或对象的整个网络传输中,页面缓存和代理缓存具有更大的可缓存性,强烈推荐使用ETag。最后再次建议所有人员都重视页面缓存,利用好缓存将节省大量的硬件投入成本。