理解缓存分级cache hierarchies

缓存分级是由彼此能够相互通信的各级缓存组成的,ATS支持几种类型的缓存分级。所有的缓存分级都有父子缓存概念。

父缓存位于缓存分级的较高级别,ATS能将请求转发(farward)转发给它。子缓存就是将ATS作为父缓存的缓存。

ATS支持父缓存和ICP两种形式的缓存选项。

父级缓存Parent Caching

假如ATS节点在自身缓存中找不到请求对象,那么它将查询父缓存,父缓存找不到的情况下,会继续查找其它缓存,如果父缓存都找不到,就会回源去取。

你能够配置ATS节点去使用多个父缓存,以便假如某个父缓存不可用时,转而去查询另一个父缓存,依次下去,直至要么能有资源响应该请求,要么在没有更多父缓存的情况下

去源站回源。这种情况叫做父缓存故障转移Parent Failover。ATS支持HTTP和HTTPS的父级缓存。

假如你不想将所有的请求都转发到父缓存,那么可以只简单配置ATS让一部分请求(比如含有特殊URL的那些请求)直接回源,只需要在parent.config中设置

父缓存规则parent proxy rules。

下图描述了一个配置使用父缓存的ATS节点的简单分级缓存,在该场景scenario中,client向分级缓存的ATS子缓存发送请求,子缓存cache
miss,然后子缓存转发请求到父缓存,并cache
hit,父缓存发送内容副本到ATS子缓存,子缓存保存一份,并响应给client。后续对该资源的请求将会直接从子缓存处命中,直至该资源变旧stale或是失效expired

加入请求在父缓存cache miss,父缓存会回源或是从其它缓存获取,依据父缓存的配置而定。父缓存缓存该内容后,将副本返回给子缓存ATS,子缓存缓存后再返回给client。

与remap.config结合

假如要求使用remap规则(配置了proxy.config.reverse_proxy.enabled),当请求到达子节点是,它的remap.config将在parent规则之前处理。这意味着client的请求先安装remap rule转换,

因而任何parent规则将会基于改写后的主机名remapped host name,这不管pristine host
header是否启用(proxy.config.url_remap.pristine_host_hdr)
都成立。父缓存将会接收转换后的请求,因此需要配置去接受该情况。

示例

客户端发送请求到 http://example.com. 上的ATS,发到源站的请求是http://origin.example.com;父节点是parent1.example.com,子节点被配置为反向代理

子缓存节点

remap.config中添加

map http://example.com http://origin.example.com

parent.config中添加

dest_domain=origin.example.com method=get parent="parent1.example.com:80

父缓存节点

remap.config中配置

map http://origin.example.com http://origin.example.com

该例子中,假如 parent1.example.com宕机,子节点在cache miss的情况下,会自动直连源站 origin.example.com

父缓存故障转移Parent Failover

ATS支持使用多个父缓存,这能确保假如一个父缓存不可用时,另一个父缓存能对client请求服务

当你使用多个父缓存配置ATS时,ATS探测到一个父缓存不可用时,会将miss请求发送到另一个父缓存。假如你指定了两个以上的父缓存,父缓存查询次序依赖于你在parent.config中配置parent
proxy rules,默认按照该配置文件中配置的先后次序查询。

配置ATS使用父缓存

为了配置ATS使用一个或多个父缓存,你需要向下面那样详细配置。
注意

你只需要配置子缓存,假设父缓存配置为子缓存的源站,对父缓存不需要额外配置

1.在records.config中开启父缓存选项parent caching option

CONFIG proxy.config.http.parent_proxy_routing_enable INT 1

2.确保你想使用父缓存去服务于 service missed requests。如果另外要使用parent failover,你必须指定一个以上的父缓存,以便当一个父缓存不可用时,请求可以转发到另一个父缓存

3.配置parent.config中的parent proxy rules 

下面的例子配置ATS子缓存将所有path为/viewpoint 和含有正则表达式politics的请求直接发往源站(跳过任何父缓存)

url_regex=politics prefix=/viewpoint go_direct=true

下面的例子配置ATS子缓存将所有以http://host1开头的URL的missed请求转发到父缓存,假如parent1不能服务,就转发到parent2.

因为round-robin=true, ATS会基于client IP address轮询方式遍历父缓存列表

dest_host=host1 scheme=http parent="parent1;parent2" round-robin=strict

运行traffic_ctl config reload命令去让配置变动生效。

ICP Peering

The Internet Cache Protocol (ICP)被代理缓存使用去交换彼此的资源信息,ICP query消息去查询其它缓存是否存有指定的URL?

ICP response消息会应答为hit或miss。缓存只会和自己相邻的,并且能够接收ICP消息的特定ICP peer交换ICP消息。一个ICP缓存可以是一个

sibling缓存(在分级缓存中同级)或是parent缓存(在分级缓存中高一级)

假如ATS开启了ICP caching,那么当HTTP请求cache miss时,它发送ICP query到ICP peers。假如ICP peers都没有hit,但是存在父级缓存,它会使用轮询策略

(round-robin policy)选择一个父缓存。假如没有ICP父缓存存在,ATS会将请求转发到HTTP父缓存。假如没有HTTP父缓存,ATS会转发请求到源站。

为了配置ATS节点作为ICP分级缓存的一部分,你必须执行下面的任务:

  • 确定ATS是否只能接收ICP消息,或者是否发送和接收ICP消息
  • 确定ATS是否可以直接将消息发给每个ICP peer,或者在指定多播通道发送单个消息
  • 指定ICP消息使用的端口
  • 确定能与ATS通信的ICP peer(siblings and parents)

在records.config中配置如下选项来使用ICP分级缓存ICP cache hierarchy

proxy.config.icp.enabled

proxy.config.icp.icp_port

proxy.config.icp.multicast_enabled

proxy.config.icp.query_timeout

配置icp.config,对每个你想识别的ICP peer,给出一条单独的规则

运行traffic_ctl config reload去让配置变动生效

ATS 分级缓存的更多相关文章

  1. ats 分层缓存

    了解缓存层次结构 缓存层次结构由彼此通信的缓存级别组成.ats支持多种类型的缓存层次结构. 所有缓存层次结构都识别父和子的概念. 父缓存是层次结构中较高的缓存, ats可以 将请求转发到该缓存.子缓存 ...

  2. ats显示代理缓存

    如果要将ats用作显示代理缓存,则必须配置客户端软件(即浏览器)以将请求直接发送到ats. 如果没有将ats配置为使用透明度选项(通过交换机或路由器在路由到源服务器的情况下拦截客户端请求并重新路由到a ...

  3. ats缓存规则

    一. 用户访问过程:1. ats收到一个用户对web对象的请求;2. 使用该地址, ats尝试着在其对象数据库(缓存)中用被请求对象的地址来定位该对象;3. 如果对象在缓存中, ats会检查该对象是否 ...

  4. .Net缓存管理框架CacheManager(转)

    转载地址:http://www.cnblogs.com/JustRun1983/p/CacheManager.html Cache缓存在计算机领域是一个被普遍使用的概念.硬件中CPU有一级缓存,二级缓 ...

  5. .Net缓存管理框架CacheManager

    using System; using CacheManager.Core; namespace ConsoleApplication { class Program { static void Ma ...

  6. Web开发基本准则-55实录-缓存策略

    续上篇<Web开发基本准则-55实录-Web访问安全>. Web开发基本准则-55实录-缓存策略 郑昀 创建于2013年2月 郑昀 最后更新于2013年10月26日 提纲: Web访问安全 ...

  7. Apache Traffic Server(ats)

    零.前言1.官网 http://trafficserver.apache.org/2.国内社区 https://blog.zymlinux.net3.简洁明了的配置:http://blog.csdn. ...

  8. 5个强大的Java分布式缓存框架推荐

    在开发中大型Java软件项目时,很多Java架构师都会遇到数据库读写瓶颈,如果你在系统架构时并没有将缓存策略考虑进去,或者并没有选择更优的 缓存策略,那么到时候重构起来将会是一个噩梦.本文主要是分享了 ...

  9. ATS日志说明

    在ATS日志中我们经常遇到形形色色的缓存结果码,为了更清晰地认识它们,相关资料整理到这里: TCP_HIT 请求对象的一份合法拷贝被缓存,ATS将发送该对象给client TCP_MISS 请求对象未 ...

随机推荐

  1. 迁移数据库数据到SQL Server 2017

      概述 本篇我们将利用DMA一步一步实现SQL Server 的迁移.帮助大家理解现在的SQL Server与新版本的融合问题,同时需要我们做哪些操作来实现新版本的升级或者迁移. SQL Serve ...

  2. fastboot模式

    快速启动. 在安卓手机中fastboot是一种比recovery更底层的刷机模式. fastboot是一种线刷,就是使用USB数据线连接手机的一种刷机模式. recovery是一种卡刷,就是将刷机包放 ...

  3. mongodb 聚合查询

    操作符介绍: $project:包含.排除.重命名和显示字段 $match:查询,需要同find()一样的参数 $limit:限制结果数量 $skip:忽略结果的数量 $sort:按照给定的字段排序结 ...

  4. Centos7安装ES 和 Docker搭建ES

    本文版权归博客园和作者吴双本人共同所有 转载和爬虫请注明原文地址 www.cnblogs.com/tdws 一.linux centos7.x安装ES 1.下载java sudo yum instal ...

  5. 【Java学习笔记之二十七】Java8中传多个参数时的方法

    java中传参数时,在类型后面跟"..."的使用:        public static void main(String[] args){       testStringA ...

  6. bzoj 1935: [Shoi2007]Tree 园丁的烦恼

    Description 很久很久以前,在遥远的大陆上有一个美丽的国家.统治着这个美丽国家的国王是一个园艺爱好者,在他的皇家花园里种植着各种奇花异草.有一天国王漫步在花园里,若有所思,他问一个园丁道: ...

  7. codeforce 367dev2_c dp

    codeforce 367dev2_c dp 标签: dp 题意: 你可以通过反转任意字符串,使得所给的所有字符串排列顺序为字典序,每次反转都有一定的代价,问你最小的代价 题解:水水的dp...仔细想 ...

  8. c语言基础学习02_windows系统下的cmd命令

    =============================================================================注意:cmd的命令很多,需要用的时候可以查询即 ...

  9. c++(爬楼梯)

    前两天上网的时候看到一个特别有意思的题目,在这里和朋友们分享一下: 有一个人准备开始爬楼梯,假设楼梯有n个,这个人只允许一次爬一个楼梯或者一次爬两个楼梯,请问有多少种爬法? 在揭晓答案之前,朋友们可以 ...

  10. C++ 默认参数(转载)

    函数的默认参数值,即在定义参数的时候同时给它一个初始值.在调用函数的时候,我们可以省略含有默认值的参数.也就是说,如果用户指定了参数值,则使用用户指定的值,否则使用默认参数的值. void Func( ...