ATS巧玩儿缓存策略增长动态服务吞吐量

缓存有个大原则,就是在不影响用户、不触犯法律的前提下,尽可能多的将资源缓存到本地。哪些HTTP资源能够cache哪些不能cache,ATS对可缓存性有一套系统的判断机制,设置灵活,能够对全局进行配置也能够对个别资源单独配置,能够针对单个url进行配置也能够针对文件后缀类型进行配置,能够对正常资源进行配置也能够对故障信息(状态码400以上)进行配置,能够对静态资源进行配置也能够对动态资源单独配置,如今就剖开看一下

web

1、HTTP响应头信息配置缓存级别
任何cache系统大多数资源都是经过HTTP头信息来判断是否可缓存的,ATS一样如此,此头信息的配置是资源是否cache的一个必要条件,而且根据头部信息的状况将资源分为3个级别,分别是:
二、有明确的缓存生命周期,具体表现是响应头里有expires(到什么时间过时)或者有Cache-Control:max-age,这种设置对用户最负责任,不会出错,咱们线上ATS默认使用这个级别;
一、有Last-Modified头或者有明确的缓存生命周期,这个级别就要松一些了,即便资源没有明确的缓存周期,可是经过Last-Modified头结合ATS自身的算法机制(引进了老化因子的概念)计算出缓存时间,对资源进行缓存;
0、在级别1的基础上,对没有明确头部信息的资源,默认存入本地缓存,而后每次if-modified-since回源。
      具体对应的配置以下:
      proxy.config.http.cache.required_headers  0|1|2    (0是无要求,1是有Last-Modified头或者有明确的缓存生命周期,2是有明确的缓存生命周期)

此为ATS全部内容是否可缓存的必要条件。 
 
2、动态内容是否缓存
ATS不会像人同样经过理性判断去肯定资源是否为动态,他对动静态资源的判断彻底是依赖url特征匹配,咱们线上的默认配置是不缓存,对应的配置参数是:
      proxy.config.http.cache.cache_urls_that_look_dynamic   0|1  (0是不缓存,1是可缓存) 
 此为动态内容ATS是否可缓存的必要条件。
3、带cookie的资源是否缓存
web2.0的网站中,不少资源带有cookie,对于cookie的信息是否缓存,如何缓存才能不影响用户质量考验着cache系统的性能,ATS对于cookie的设置分5个级别:

      proxy.config.http.cache.cache_responses_to_cookies INT  0|1|2|3|4 
0、任何带cookie的资源都不缓存;
一、任何带cookie的资源都缓存;
二、只缓存是图片的cookie资源;
三、除了文本类型其他的cookie资源都缓存。
四、除了系统响应的没有”Set-Cookie”或者有”Cache-Control:public”的文本类型其他的cookie资源都缓存。(咱们线上设备的默认配置级别)
 此为cookie内容ATS是否可缓存的必要条件。
4、故障信息是否缓存
所谓故障信息指的是源站返回的4XX、5XX等错误代码,对于故障信息是否缓存是存在争议的,ATS在处理上将故障信息分为两类,一类是带有明确生命周期的故障,另外一类是没带有生命周期的故障,配置的参数以下:
        proxy.config.http.negative_caching_enabled  0|1  (1对全部故障信息都缓存,0是只缓存有明确生命周期的故障信息,线上默认使用的是0)
        proxy.config.http.negative_caching_lifetime   2s   (对有明确缓存生命周期的故障信息的缓存时间,能够根据时间时间设置,目前线上默认改成2s) 

算法

相关文章
相关标签/搜索