博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

ATS 简介

Posted on 2017-06-09 15:27  bw_0927  阅读(447)  评论(0)    收藏  举报

 

 

由于工作原因,我需要考虑缓存方案。后续我想更新缓存和存储架构,缓存内容会大大的加大,所以varnish是一定不适合了(内存缓存严重依赖内存大小)。而squid磁盘缓存根据我已有的经验,性能上确实不是很理想(也可能我配置的问题)。

 

 

Traffic Server 代理支持直接代理缓存方式, 这种方式需要客户端 软件配置成直接发送请求给 Traffic Server 代理

 

records.config是一个主配置:控制特定功能的开启和关闭,

具体的功能控制分别在各种不同的配置文件中,例如

多级缓存的配置: parent.config

icp(internet 缓存协议)的配置:   icp.config

 

下面大概描述一下 Traffic Server 如何响应用户的请求。
1. Traffic Server 收到一个用户对 web 对象的请求。
2. Traffic Server 尝试着在其对象数据库(缓存)中用被请求对象的地址来定 位该对象。
3. 如果对象在缓存中, Traffic Server 会检查该对象是否过期, 如果对象没有 过期, Traffic Server 以缓冲命中的方式用该对象来响应用户。

4. 如果缓存中的数据已经过期, Traffic Server 连接源服务器并检查该对象是 否仍然可用(重新生效)。如果生效, Traffic Server 直接发送缓存中的对 象给用户。
5. 如果对象没有在缓存中(缓存未命中) 或者源服务器显示缓存中的对象 已经失效, Traffic Server 会从源服务器重新获取该对象。 该对象会同时发 送给用户以及 Traffic Server 的本地缓存(见图 3)。 由于本地已经有了最 新的缓存, 后期对该对象的请求将会被更快的响应

 

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

 

proxy.config.http.cache.required_headers  

设置这个变量为下列值之一:
0 = 对头部没有特殊要求
1 = 需要是 Last-Modified 头部,或者 有明确生命期的头部, Expires 或者
Cache-Control: max-age
2 = 需要明确的生命期, Expires 或者Cache-Control: max-age

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

 

客户端发送的 no-cache 头部, 告诉 Traffic Server 不能直接从缓存获取任 何对象;因此, Traffic Server 总是从源服务器获取对象。可以配置 Traffic Server 忽略客户端的 no-cache 头部

服务器发送的 max-age 头部,用来表示对象的使用期限

 

配置 Traffic Server 接受 PUSH 请求

filter.config 文件添加如下的过滤规则来确保只有某些 IP 地址可以向缓存发送PUSH 请求:
domain=. src_ip=ipaddress method=PUSH action=allow
domain=. method=PUSH action=deny

records.config proxy.config.http.push_method_enabled

 

固定缓存选项配置 Traffic Server 保证一些 HTTP 对象一段指定的时间内都在 缓存中。 可以使用这个选项来确保一些最热点的对象在需要的时候会在缓存中, 阻止 Traffic Server 删除重要的对象。 

cache.config

为每个想让 Traffic Server 保留在缓存中的 URL 添加一条如下的规则:
url_regex=URL pin-in-cache=12h

records.config  proxy.config.cache.permit.pinning 设置这个变量为 1 来开启固定缓存选项。

 

当 Traffic Server 收到一个对没有在缓存中的对象的请求, 它从源服务器取回 这个对象并用其来响应用户。同时, 在缓存中缓存这个对象以便服务后来的请求 之前, Traffic Server 先检查这个对象是否可以缓存

 

  • 直接代理缓存

如果想使用 Traffic Server 充当直接代理缓存,必须配置客户端软件(比如浏 览器)直接向 Traffic Server 发送请求。
HTTP 直接代理缓存 如果没有配置 Traffic Server 使用透明选项( 客户端发送给源服务器的请求被 交换机/路由器中途拦截并重路由给 Traffic Server), 客户端必须通过配置其浏览 器从 PAC 文件( Proxy Auto-Configuration 文件)去下载代理配置指令来使浏览器 直接给 Traffic Server 代理缓存发送请求。

PAC 文件是一个专门的 JavaScript 函数定义, 浏览器通过调用它来决定如何 处理请求。 可以将 PAC 文件存储在 Traffic Server(或者网络中的任一服务器),并 为客户端提供这个文件的 URL

 

反向代理缓存(又称服务器加速或虚拟主机托管) 和前向代理不同,因为Traffic Server 作为源服务器的代理缓存并存储内容。 Traffic Server 被配置为用户 直接连接的源服务器( 典型的用法是将源服务器的主机名解析到 Traffic Server)。

 

Traffic Server 可以在大洋彼 岸充当镜像站点, 不需要通过昂贵的国际连接发送请求和获取内容就可以服务用 户。

 

反向代理的工作方式 当浏览器有请求,它一般直接发送这些请求到源服务器。 当 Traffic Server 工 作在反向代理模式, 它在这些请求到达源服务器之前就拦截它们。

典型的用法是 将源服务器的 DNS 入口(主机名)解析成 Traffic Server 的 IP 地址。当 Traffic Server 被配置为源服务器,浏览器会和 Traffic Server 而非源服务器建立连接。 更多信息 见 HTTP Reverse Proxy。 注意:为了避免 DNS 冲突,源服务器的主机名和外在 DNS 主机名必须不同。

 

Traffic Server在 remap.config文件中定位映射规则并重新映射这个请求到 一个指定的源服务器( realhost.com)。

 

records.config proxy.config.reverse_proxy.enabled

 

父节点缓存:

records.config proxy.config.http.parent_proxy_routing_enable

parent.config

客 户端向在多级缓存中位于子节点(因为它配置了转发未命中的请求到父节点缓 存)的 Traffic Server 发送请求。 请求在缓存中未命中, Traffic Server 就将其转发 给了其父节点缓存并且在父节点缓存中命中。 随后这个内容的请求可以直接由
Traffic Server 来服务(直到数据过期或失效)。

如果请求在父节点缓存也未命中, 父节点会从源服务器获取请求的内 容(或者从其它缓存,取决于父节点的配置)。 父节点缓存该内容并将内容的拷 贝发送给 Traffic Server(其子节点), Traffic Server 缓存该内容并响应客户端

 

Traffic Server 支持使用若干个父节点缓存。 这样确保在一个父节点缓存不可 以的情况下,其它的父节点缓存仍然可以服务客户端请求。 当配置 Traffic Server 使用的父节点缓存多于一个, Traffic Server 在检测到一 个父节点不可用时,会发送未命中的请求到另一个父节点缓存。

如果指定了多于 两个父节点缓存,父节点被询问的顺序取决于父节点代理规则在 parent.config 配 置文件中的顺序。 默认情况下, 父节点缓存被询问的顺序是它们在配置文件中的 顺序。

 

Internet 缓存协议( ICP)是代理缓存用来交换内容信息的协议。

ICP 查询消 息询问其它的缓存是否存储了一个特殊的 URL; ICP 响应消息回应一个命中或未 命中的应答。 一个缓存只和特定的 ICP 节点交换消息,只有相邻的缓存可以收到ICP 消息

一个 ICP 节点可以是一个兄弟节点缓存(在多级缓存中的同一级)或 者是一个父节点缓存(在多级缓存中的上一级)。

如果 Traffic Server 开启了 ICP 缓存, 当有未命中的请求时,它会向其 ICP 节 点发送 ICP 查询。 如果都没有命中但有父节点存在, 将会用轮询策略来选择父节 点

如果没有 ICP 父节点存在, Traffic Server 就将请求转发给它的 HTTP 父节点。 如果没有 HTTP 父节点缓存, Traffic Server 将请求转发给源服务器。

如果 Traffic Server 从 ICP 节点收到一个命中消息, Traffic Server 就将 HTTP 请 求发送到命中的节点。

然而, 由于源 HTTP 请求的头部信息并没有进行 ICP 查询, 缓存未命中仍然有可能发生。 如果一个 ICP 命中导致了一个未命中, Traffic Server 转发这个请求到其 HTTP 父节点缓存或者源服务器

ats默认遵循了源服务器对缓存的控制,由于nginx那边没有定义缓存图片,ats默认遵循了这个所以就没有写缓存了。

配置ats在源服务器没有定义缓存的情况缓存文件

traffic_line -s proxy.config.http.cache.required_headers -v 0

traffic_line -x