当Traffic Server收到一个web对象的请求,它首先尝试着在缓存中定位该对象。如果该对象在缓存中,Traffic Server将会检查该对象是否仍然有效。对于HTTP对象而言,Traffic Server支持可选的作者自定义的有效期。Traffic Server坚持这些有效期;另外,它在对象被改变的频率和管理员选择的有效期方案之间挑选一个有效期。对象也可以和源服务器一起检查器有效来重新生效。

HTTP对象保鲜

Traffic Server通过如下的方式来判断缓存中的HTTP对象是否有效:

  • 检查Expires或者max-age头

一些HTTP对象包含Expires头或者max-age头来明确定义对象可以被缓存的时间。Traffic Server通过比较当前时间和有效期时间来决定该对象是否仍然有效。

  • 检查Last-Modified / Date头

如果HTTP对象没有Expires头或者max-age头,Traffic Server使用下面的公式来计算对象有效期:

freahness_limit = (date – last_modified) * 0.1

这里的date是对象服务器返回的日期,而last_modified是Last-Modified头部的日期。如果没有Last- Modified头部,Traffic Server就使用对象写入缓存的日期。因子0.1(10%)可以根据需要来增加或减小(见Modifying the Aging Factor for Freshness Computations)。

计算的最大有效期被限制在一个最小值和最大值之间,更多信息见(Setting an Absolute Freshness Limit)。

  • 检查绝对有效期极值

如果HTTP对象既没有Expires头部也没有Last-Modified和Date头部,Traffic Server使用一个最大和最小有效期(见Setting an Absolute Freshness Limit)。

  • 检查cache.config文件中的重新生效规则

重新生效规则为特殊的对象提供有效期极值。可以为来自特殊的域或者IP地址的对象,URL中包含指定的正则表达式的对象,来自特殊客户端的对象等(见cache.config)设置有效期极值。

为有效期的计算修改老化因子

如果一个对象没有包含任何截止信息,Traffic Server可以根据其Last-Modified和Date头部来估计它的有效期。默认地,Traffic Server存储该对象从其上次修改后10%的时间。可以根据需要来增大或减小这个百分比。

为有效期的计算修改老化因子

1.        在文本编辑器中打开位于Traffic Server的config目录下的records.config文件。

2.        编辑下面的变量:

变量 描述
proxy.config.http.cache.heuristic_lm_factor 设置这个变量来指定计算有效期的老化因子。Traffic Server存储该对象从其上次修改后这个百分比的时间。默认值为0.1(10%)。

3.        保存并关闭records.config文件

4.        定位到Traffic Server的bin目录

5.        运行traffic_line –x命令来应用配置文件的变更。

设置一个绝对有效期极值

一些对象既没有Expires头部也没有Last-Modified和Date头部。为了控制这些对象在缓存中的时间,需要指定一个绝对有效期极值。

设置一个绝对有效期极值:

1.        在文本编辑器中打开位于Traffic Server的config目录下的records.config文件。

2.        编辑下面的变量:

变量 描述
proxy.config.http.cache.heuristic_min_lifetime 设置这个变量来指定没有截止时间的HTTP对象在缓存中有效期的最小值。默认值为3600秒(1小时)。
proxy.config.http.cache.heuristic_max_lifetime 设置这个变量来指定没有截止时间的HTTP对象在缓存中有效期的最大值。默认值为86400秒(1天)。

3.        保存并关闭records.config文件

4.        定位到Traffic Server的bin目录

5.        运行traffic_line –x命令来应用配置文件的变更。

指定头部的必要条件

为了更好的确保缓存中对象的有效性,可以配置Traffic Server只缓存有特殊头部的对象。默认地,Traffic Server缓存所有的对象(包括没有头部的对象);可以为专门的代理情况改变默认设置。如果配置Traffic Server只缓存有Expires或者max-age头部的HTTP对象,缓存命中率将会明显下降(因为几乎没有对象有明确的截止信息)。

配置Traffic Server只缓存特殊头部的对象:

1.        在文本编辑器中打开位于Traffic Server的config目录下的records.config文件。

2.        编辑下面的变量:

变量 描述
proxy.config.http.cache.required_headers 设置这个变量为下列值之一:

0 = 对头部没有特殊要求

1 = 需要是Last-Modified头部,或者有明确生命期的头部,Expires或者Cache-Control: max-age

2 = 需要明确的生命期,Expires或者Cache-Control: max-age

3.        保存并关闭records.config文件

4.        定位到Traffic Server的bin目录

5.        运行traffic_line –x命令来应用配置文件的变更。

Cache-Control头部

尽管一个对象在缓存中可能是有效的,但是客户端或者服务器经常强加它们自己的不从缓存中获取对象的约束。比如,一个客户端请求一个对象时可能不通过 缓存,即使通过缓存,对象的缓存时间也不能超过10分钟。Traffic Server可以给一个缓存的对象在客户端请求和服务器响应中加上Cache-Control头部。下面的Cache-Control头影响着对象是否可 以通过缓存来服务:

  • 客户端发送的no-cache头部,告诉Traffic Server不能直接从缓存服务任何对象;因此,Traffic Server总是从源服务器获取对象。可以配置Traffic Server忽略客户端的no-cache头部,更多信息见Configuring Traffic Server to Ignore Client no-cache Headers。
  • 服务器发送的max-age头部,用来表示对象的使用期限。如果使用期限小于max-age,表明对象是有效的,可以直接从缓存服务。
  • 客户端发送的min-fresh头部,是一个可接受的有效期容忍。这意味着客户端想让对象至少这次是有效的。如果一个对象在未来的这样一段时间内不再有效,那它会重新生效。
  • 客户端发送的max-stale头部,允许Traffic Server服务过期的对象,倘若这些对象不是太老的话。一些浏览器倾向于使用过期不久的对象来改善性能,尤其在Internet不是很发达的时期。

Traffic Server在HTTP有效期标准之后使用Cache-Control标准。比如,一个对象可能被认为是有效的,但是如果它的使用期限大于它的max-age,它将不会被服务。

重新生效HTTP对象

对客户端请求一个在缓存中过期的对象,Traffic Server将重新生效这个对象。重新生效是询问源服务器检查这个对象有没有被修改。重新生效的结果是下面之一:

  • 如果对象还是有效的,Traffic Server将重新设置这个对象的有效期极值,同时用这个对象来服务。
  • 如果有这个对象的新的拷贝,Traffic Server缓存这个新对象(替换过期对象),同时用新的对象来服务用户。
  • 如果对象在源服务器已经不存在了,Traffic Server将不为这个对象提供服务。
  • 如果源服务器没有响应重新生效查询,Traffic Server在用这个对象服务的同时,会提供111重新生效失败的警告。

默认情况下,Traffic Server重新生效一个缓存中对象,如果它认为该对象已经过期。Traffic Server评估对象的有效性已在HTTP Object Freshness中描述。可以选择如下选项之一来重新配置Traffic Server评估有效性的方式:

  • Traffic Server认为所有在缓存中的对象都是过期的:总是对在缓存中的对象通过源服务器进行重新生效。
  • Traffic Server认为所有在缓存中的对象都是有效的:从不对在缓存中的对象通过源服务器进行重新生效。
  • Traffic Server认为所有没有Expires或Cache-Control头部的HTTP对象都是过期的:重新生效所有没有Expires或Cache-Control头部的HTTP对象。

可以通过在cache.config文件(见cache.config)中设置特殊的重新生效规则来配置Traffic Server重新生效缓存中对象的方式。

配置重新生效选项:

1.        在文本编辑器中打开位于Traffic Server的config目录下的records.config文件。

2.        编辑下面的变量:

变量 描述
proxy.config.http.cache.when_to_revalidate 设置这个变量为下列值之一:

0 = 配置Traffic Server重新生效HTTP对象,当它认为该对象在缓存中已过期(如果可以的话,Traffic Servre检查对象头部和有效期极值)。这是默认配置。

1 = 配置Traffic Server重新生效没有Expires或Cache-Control头部的HTTP对象。

2 = 配置Traffic Server总是重新生效HTTP对象;Traffic Server总是认为HTTP对象是过期的。

3 = 配置Traffic Server从不重新生效HTTP对象;Traffic Server总是认为HTTP对象是有效的。

3.        保存并关闭records.config文件

4.        定位到Traffic Server的bin目录

5.        运行traffic_line –x命令来应用配置文件的变更。

原文出处:http://rdc.taobao.com/blog/cs/?p=507