ats缓存规则
一. 用户访问过程:
1. ats收到一个用户对web对象的请求;
2. 使用该地址, ats尝试着在其对象数据库(缓存)中用被请求对象的地址来定位该对象;
3. 如果对象在缓存中, ats会检查该对象是否过期,如果对象没有过期, ats以缓冲命中的方式用该对象来响应用户;
4. 如果缓存中的数据已经过期, ats连接源服务器并检查该对象是否仍然可用(重新生效).如果生效,ats直接发送缓存中的对象给用户;
5. 如果对象没有在缓存中(缓存未命中)或者源服务器显示缓存中的对象已经失效,ats会从源服务器重新获取该对象。该对象会同时发送给用户以及ats的本地缓存。由于本地已经有 了最新的缓存,后期对该对象的请求将会被更快的响应。
二. 对象有效期判断:
ats支持可选的作者自定义的有效期。ats首先根据有效期判断,如果有效期不存在,会在对象被改变的频率和管理员选择的有效期方案之间挑选一个有效期。可以通过源服务器检查对象有效性的方式来重新生效对象。
HTTP对象保鲜
1. 检查Expires or max-age头;
2. 检查Last-Modified/Date头;
如果没有上述字段,则freshness_limit = (date - last_modified) * 0.10;
3. 如果没有expires 或者没有Last-Modified 和date头, 使用最大和最小的保鲜限制;
4. 检查cache.config中设置的规则;
设置过期的加权因子
假如对象没有包含失效信息,ats会利用Last-Modified和Date头来估计新鲜度. ats会将对象
存储为上次更改后经过时间的10%, 可以修改proxy.config.http.cache.heuristic_lm_factor; 来修改
加权因子;(traffic_ctl config reload)
设置绝对新鲜度限制
如果对象没有Expires 或者Last-Modified 和Date头, 可以设置绝对新鲜限制:
1.修改 proxy.config.http.cache.heuristic_min_lifetime 和
proxy.config.http.cache.heuristic_max_lifetime
2. 运行 traffic_ctl config reload
ats配置为使用特点标志缓存对象
1. 修改 配置proxy.config.http.cache.required_headers
2. traffic_ctl config reload
缓存控制标头( Cache-Control Headers)
尽管对象在缓存中可能有效, 客户端和服务端也经常施加自己的约束,从而阻止从缓存中检索对象。例如,客户端可能请求不从缓存中进行检索,或者允许检索,但是不能缓存超过10分钟;
1. no-cache ; client 发送;
2. max-age; servers发送;
3. min-fresh: client 发送;
4. min-fresh: client 发送;
5. max-stale: client 发送;
ats在http有效期标准之后使用Cache-Control标准。比如,一个对象可能被认为是有效的,
但是如果它的使用期限大于它的max-age, 它将不会用于响应请求。
重新验证HTTP 对象
当客户端请求在缓存中是失效的对象, ats重新验证该对象。通过对源站发送请求来验证是否已经改变:
1. 如果该对象还是新鲜的,ats重新设置该对象的有效期并且用该对象服务;
2. 如果这个对象已经有了新的拷贝,则缓存新拷贝,并用这个新拷贝服务客户;
3. 如果这个对象在源站已经不存在,则ats则不用这个对象提供服务;
4. 如果源服务器没有响应该有效性查询,则ats用这个过期的对象提供服务,同时提供
111 Revalidation Failed 告警;
为了配置ats重新生效规则, 可以在cache.config中设置具体的规则;
1. 修改 proxy.config.http.cache.when_to_revalidate
2. traffic_ctl config reload
推送内容到缓存
a> 修改配置允许push
1. ip_allow.config , 允许适当的ip能够push;
2. CONFIG proxy.config.http.push_method_enabled INT 1
3. traffic_ctl config reload
缓存http 对象
a> 客户端指令
如果客户端请求带有如下指令则不缓存;
1. Authorization;
2. Cache-Control: no-store
3. Cache-Control: no-cache
4. Cookie (text objects)
可以设置为忽略Cache-Control选项:
1. CONFIG proxy.config.http.cache.ignore_client_no_cache INT 1
2. traffic_ctl config reload
b> Origin Server 指令(源站指令)
ats不缓存源站带有如下的响应头指令:
1. Cache-Control: no-store
2 . Cache-Control: private
3. WWW-Authenticate
4. Set-Cookie
5. Cache-Control: no-cache
6. Expires 值为0或者一个过期的日期;
可以配置过滤, recoreds.config中
CONFIG proxy.config.http.cache.ignore_server_no_cache INT 1 //no cache
CONFIG proxy.config.http.cache.ignore_authentication INT 1
traffic_ctl config reload
禁止http缓存:
默认情况下,ats缓存http的所有对象, 除非在cache.config中设置了never-cache.
可以配置禁止缓存:
CONFIG proxy.config.http.cache.http INT 0
traffic_ctl config reload
缓存动态内容
如果一个URL以.asp结尾,或者包含(?)号,(;)或者cgi. ,则该URL默认为动态的.
CONFIG proxy.config.http.cache.cache_urls_that_look_dynamic INT 0 (0禁止, 1允许)
traffic_ctl config reload
缓存Cookied 对象
CONFIG proxy.config.http.cache.cache_responses_to_cookies
traffic_ctrl config reload
强制缓存
可以强制缓存,而不用考虑Cache-Control响应头
在cache.config 中添加缓存规则:
eg: url_regex=^https?://(www.)?apache.org/dev/ ttl-in-cache=6h
traffic_ctl config reload
缓存http多版本(Alternates)
修改records.config
proxy.config.http.cache.enable_default_vary_headers
proxy.config.http.cache.vary_default_text
proxy.config.http.cache.vary_default_images
proxy.config.http.cache.vary_default_other
traffic_ctl config reload
假如以cokkies设置为不同版本的标识,则设置:
proxy.config.http.cache.cache_responses_to_cookies
设置每个对象缓存不同版本的份数
CONFIG proxy.config.cache.limits.http.max_alts INT 5
使用事务缓冲控制 I/O
在默认情况下, I/O操作和ats, 网络,缓存一样能够全速的运行。但是在大的对象的情况下,如果客户端连接很慢.在这种情况下,大的对象将被缓存在ram中等待被发送给客户端;或者在客户端连接速度很快但是连接源站的速度很慢的情况下,客户端post上传大文件时也会导致内存很大。
通过控制事务使用的缓冲区空间量可以改善此问题,根据使用的字节数设置缓冲大小的高水位和低水位。如果使用的缓冲区空间超过了高水位,则会限制连接以防止其他外部数据到达。内部操作继续全速进行,直到使用的缓冲空间低于低水位线则重新启用外部数据I/O.
虽然这主要是为了限制ats的内存使用量,但它也可以通过设置缓冲区限制,然后再外部或通过转换限制客户端连接来充当原始速率限制器。这将导致与原始服务器的连接大致限制为客户端的连接
速度。
ats 以32k大小进行网络I/O , 所以缓存控制的粒度大概在相同的精度.
缓冲区大小计算包括事务中的所有元素,包括与转换插件关联的任何缓冲区。
可以使用配置变量或插件中的TSHttpTxnConfigIntSet()全局启用事务缓冲控制。
1. 启用buffering : proxy.config.http.flow_control.enabled
TS_CONFIG_HTTP_FLOW_CONTROL_ENABLED
2. 设置高水位: proxy.config.http.flow_control.high_water
TS_CONFIG_HTTP_FLOW_CONTROL_HIGH_WATER_MARK
3. 设置低水位: proxy.config.http.flow_control.low_water
TS_CONFIG_HTTP_FLOW_CONTROL_LOW_WATER_MARK
如果使用TSHttpTxnConfigIntSet(), 必须在不晚于TS_HTTP_READ_RESPONSE_HDR_HOOK
前调用。
减少回源数量
ats减少回源的措施:
1. 写时读 (Read While Writer)
当ats从源站获取内容时,并在收到响应后, 一旦收到对象的
background_fill_completed_threshold%, 就可以允许任意数量的客户端开始提供部分填充的
缓存对象。
尽管一些http 代理允许客户端在代理从源服务器接受数据时立即开始读取响应,但是
ATS在开始读取和处理完整的HTTP响应头之后才可以允许客户端读取. 这是ATS的副作用,
这会阻止了解响应是否可缓存。
由于来自源服务器的不可缓存的响应通常是由于该内容对于不同的客户端请求是唯一
的,因此ats在确定它将能够缓存该对象之前将不启用read-while-writer功能。
如果read-while-writer生效,需要修改records.config:
CONFIG proxy.config.cache.enable_read_while_writer INT 1
CONFIG proxy.config.http.background_fill_active_timeout INT 0
CONFIG proxy.config.http.background_fill_completed_threshold FLOAT 0.000000
CONFIG proxy.config.cache.max_doc_size INT 0
CONFIG proxy.config.cache.read_while_writer.max_retries INT 10
CONFIG proxy.config.cache.read_while_writer_retry.delay INT 50
2. Open Read Retry Timeout (打开读取重试超时)
当ats从源站读取请求时,后续的请求会等待 proxy.config.http.cache.open_read_retry_time
milliseconds, 然后才开始检查是否有缓存。如果仍在提取对象,则后续请求重试
proxy.config.http.cache.max_open_read_retries 次. 故后续请求会等待
(max_open_read_retries X open_read_retry_time) milliseconds, 然后才开始建立自己的原始
连接请求。
默认配置:
CONFIG proxy.config.http.cache.max_open_read_retries INT -1
CONFIG proxy.config.http.cache.open_read_retry_time INT 10
3. 打开读取失败操作(Open Write Fail Action)
proxy.config.http.cache.open_write_fail_action.
ats缓存规则的更多相关文章
- ATS缓存数据结构
ATS缓存数据结构 HttpTunnel类 数据传输驱动器(data transfer driver),包含一个生产者(producer)集合,每个生产者连接到一个或是多个消费者(comsumer). ...
- Thinkphp路由配置和静态缓存规则【原创】
ThinkPHP框架对URL有一定的规范,所以如果你希望定制你的URL格式的话,就需要好好了解下内置的路由功能了,它能让你的URL变得更简洁和有文化. 首先我们在Common/config.php设置 ...
- thinkphp3.2开启静态缓存与缓存规则设置
网站的静态缓存对大访问量有很好的缓解作用,尤其对网站的大并发,可有效的缓解数据库的压力.在thinkphp中实现静态缓存很简单,thinkphp都已经封装好了直接调用即可. 静态缓存 首先设置 H ...
- golang bufio writer,reader 缓存规则
读,写,缓冲区可以杜绝频繁的读,写动作1.写缓存,如果一次write的长度大于buffer长度那么久发送当前缓冲区的内容并且发送要写入的内容,就是不在缓存了.如果发送的内容小于buffer长度,就按缓 ...
- ATS 分级缓存
理解缓存分级cache hierarchies 缓存分级是由彼此能够相互通信的各级缓存组成的,ATS支持几种类型的缓存分级.所有的缓存分级都有父子缓存概念. 父缓存位于缓存分级的较高级别,ATS能将请 ...
- ats 分层缓存
了解缓存层次结构 缓存层次结构由彼此通信的缓存级别组成.ats支持多种类型的缓存层次结构. 所有缓存层次结构都识别父和子的概念. 父缓存是层次结构中较高的缓存, ats可以 将请求转发到该缓存.子缓存 ...
- 细说ASP.NET Core静态文件的缓存方式
一.前言 我们在优化Web服务的时候,对于静态的资源文件,通常都是通过客户端缓存.服务器缓存.CDN缓存,这三种方式来缓解客户端对于Web服务器的连接请求压力的. 本文指在这三个方面,在ASP.NET ...
- c#缓存介绍(转)
缓存主要是为了提高数据的读取速度.因为服务器和应用客户端之间存在着流量的瓶颈,所以读取大容量数据时,使用缓存来直接为客户端服务,可以减少客户端与服务器端的数据交互,从而大大提高程序的性能. 本章从缓存 ...
- iOS关于html缓存
方式一:截取请求正则.图片缓存 实现webview缓存网页内容难点在缓存图片上.html代码的缓存相对简单,具体实现思路是这样的:第1步.先获取html页面里所有图片地址.方法一:离线获取获取到htm ...
随机推荐
- 微信小程序的开发(一)
我现在在学习,微信小程序开发,刚刚看看一篇对我特别有用的博客文章,我就把摘抄过来了,好好的学习一下. 序言 开始开发应用号之前,先看看官方公布的「小程序」教程吧!(以下内容来自微信官方公布的「小程序」 ...
- REST接口设计规范总结
简介 Representational State Transfer 简称 REST 描述了一个架构样式的网络系统.REST 指的是一组架构约束条件和原则.满足这些约束条件和原则的应用程序或设计就是 ...
- Java实现数据库操作
Java实现数据库操作 这里的样例是使用mysql数据库 代码实现 /* MySQLHelper.java */ import java.io.*; import java.util.*; impor ...
- [XML123] XSLT
XSLT简介 http://www.w3school.com.cn/xsl/index.asp XSLT测试 http://www.veryhuo.com/down/html/54703.html
- 【转】numpy中 meshgrid 和 mgrid 的区别和使用
转自:https://www.cnblogs.com/shenxiaolin/p/8854197.html 一.meshgrid函数 meshgrid函数通常使用在数据的矢量化上. 它适用于生成网格型 ...
- HDU 3577Fast Arrangement(线段树模板之区间增减更新 区间求和查询)
Fast Arrangement Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) ...
- HDU1047(多个大数相加)
Integer Inquiry Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)T ...
- oracle中的条件语句
oracle中case when then及decode用法 一.case … when … then 语法: – 写法一: case(条件) when 值1 then 返回值1 when 值 ...
- fastRPC服务使用
现在出现了很多中间件解决跨语言问题,使用RPC远程调用:但是庞大是个问题,而且要按照格式使用.尤其是源码量比较庞大. 为了简单易用,我采用订阅发布模型,在此基础上创建了fastRPC,模拟RPC,调用 ...
- 纯SVG实现的Loading动画,拿走不谢
转载自:https://blog.csdn.net/wo_shi_ma_nong/article/details/88833828 话不多说,直接上代码. ( 到这里看效果: http://www.v ...