2012-03-31 101 views
7

我最近遇到了一个名为Varnish的http网络加速器。从我读过的内容看,Varnish通过使用反向代理配置优化与HTTP服务器的每个HTTP通信过程来加速网站的交付。清漆+静态HTML页面

我的问题是,如果您有一个网站的缓存机制一直配置为静态html文件,那么Varnish会对此产生多大影响?反向代理是否减少了HTTP服务器执行的处理请求的工作?如果你已经在服务器端广泛地缓存了所有内容(HTTP标头,Etags,Expires Headers,Database Caching,Fragment和Page caching),那么HTTP加速器会做些什么来改进呢? HTTP缓存服务器端缓存

回答

20

首先,我们应该在一个正常的网络系统走在两个不同类型的缓存之间进行区分。

HTTP缓存由HTTP报头的控制,特别是当你指出ETag和各种期满机制(包括ExpiresCache-Control各个方面)。这全部包含在RFC 2616 (HTTP), section 13中,并且允许HTTP 高速缓存返回来自客户端的HTTP请求的响应,而无需返回到原始服务器。实际上,在某些情况下,HTTP缓存机制允许客户端和服务器之间的另一台机器充当服务器的角色。这实际上就是清漆的功能,正如我们稍后会看到的;许多人熟悉的另一个常见用途是当ISP在其网络中提供HTTP缓存时,它们通常可以比其网络外的原始服务器更快地对其订户作出响应(并因此提高感知性能)。

服务器端缓存包括数据库高速缓存,以及片段和页面缓存,这是真正的Web服务器,避免做一些昂贵的操作都只是方式(比如,数据库查询,或使一个模板的特定部分)做一次,然后将结果保存在缓存中一段时间​​。

我刚才说清漆是一个HTTP缓存,这意味着即使是静态文件,它也可以比Web服务器更有效。考虑一下Web服务器必须做:

  1. 解析HTTP请求
  2. 的URI(以及任何相关的请求头,如Accept-Encoding)映射到一个文件
  3. 拉起关于建立文件信息响应中的HTTP标头;这些公知为实体头RFC 2616 section 7.1,其包括诸如Content-LengthContent-Type和在HTTP缓存使用的ExpiresLast-Modified头)
  4. 弄清楚什么额外响应头RFC 2616 section 6.2;这些包括ETagVary, ()HTTP缓存的两个重要份)和一般报头字段RFC 2616 section 4.5需要
  5. 写入HTTP状态行和首部到网络
  6. 写该文件的内容到网络

通过比较,清漆是所有这一切的上游,因此,所有它必须要做的是:

  1. 解析HTTP请求
  2. 映射URI (和任何相关的请求标头)到其内部缓存中的条目上
  3. 查看是否有条目;如果有,请将其写入网络; HTTP标头将被存储在缓存中

如果没有一个条目,清漆做一些更多的工作:

  • 连接到Web其背后的服务器将通过在第一个列表1-6生成响应
  • 写入网络的响应,其中包括所有的HTTP报头中的所有步骤来运行
  • 存储在其高速缓存中的响应
  • 特别是因为HTTP头和实体主体(整个响应)可以通过varnish进行缓存,所以如果它可以从缓存中提取,那么它的工作量就会减少。当您在服务器中动态生成响应时,差异会变得更加明显:假设您有一个需要5秒钟生成的页面,但每个用户点击您的网站都是一样的,清漆应该能够在从缓存中取出大部分毫秒(加上通过网络向HTTP客户端获取响应所需的时间),并且有一个简洁的机制(grace period),因此它可以在一次点击后端服务器的同时继续执行以刷新缓存的页面版本。

    当然,您可以引入服务器端缓存来提高Web服务器处理请求的速度,但是如果您有响应,则可以缓存清漆,但通常会更快。 (有各种各样的东西难以在清漆中缓存,特别是如果您使用的是Cookie或具有根据用户查看的页面而改变的页面。虽然在这些情况下可以继续使用清漆,除非您需要真正令人难以置信速度,据我所知大多数人开始优化这些案件之前使用服务器端缓存和其他技术,然后点击清漆。)

    (请注意,清漆也可以编辑标题以及进出缓存的数据,这会使事情变得复杂化,但主要观点仍然存在,即使在飞行清漆上进行编辑的速度也非常快)。

    +0

    很好的回应。所以它可以安全地说,在一个高度缓存的网站(在服务器端),有大量的静态内容(静态页面,JavaScript文件,样式表,图像等),然后清漆甚至可以提高速度这以及:)真棒。非常感谢您的回复。 – matsko 2012-04-03 03:03:11