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

Parent Caching
如果ats节点无法在其缓存中找到请求的对象,则它会在最终从源服务器检索对象
之前搜索父缓存(它本身可以搜索其它缓存). 可以将ats节点配置为使用多个父缓存,以
便在一个父缓存不可用时,将依次检查其他父缓存,直到请求得到正确服务或者没有
其它父缓存可用时能够联系到原始服务器。称为故障转移。ats支持http和https请求的
父缓存。

如果您不希望所有请求都转到父缓存,则只需将ats配置为将某些请求(包含特定URL
的请求)直接路由到源服务器。可以通过在parent.config中设置父代理规则来实现。

下图说明了一个简单的缓存层次结构,其中ats节点配置为使用父缓存。在以下
方案中,客户端将请求发送到作为缓存层次结构中的子节点的ats节点(因为它配置为将
丢失的请求转发到父缓存)。该请求是缓存未命中,因此ats然后将请求转发到父缓存中
命中。父缓存将内容的副本发送到ats流量服务器,然后将其缓存并提供给客户端。后续
的请求可以直接从ats缓存(直到数据过期或失效)提供相应的服务。

如果请求是父级的缓存未命中,则父级将从源服务器(或从另一个缓存中检索内容,具体取决于父
级的配置). 父级缓存内容,然后将副本发送到ats(其子级), 在该级别将其复制并提供给客户端。

Parent Selection Policies
ats子节点可以使用多个父选择策略;
1. 一致性hash. 子节点为每个URI选择特定父节点。这有效的使父缓存大小成为每个父缓存大小的
总和;
2. 轮询. 子节点循环访问父节点。孩子可以根据客户端IP("true")或严格循环("严格")选择父级。
3. 未命名的。子节点选择列出的第一个活动父节点。这种策略有两种变体.当策略设置为"false"
时,子节点将使用第一个列出的父项(称为p1),直到它标记为关闭,此时子节点将切换到
第二个父项。然后,当重新测试并发现p1时,子节点将重新启用p1. 当选择策略设置为"
已锁定"时,子项将使用p1直到它被标记为关闭,此时它将切换到p2. 当重新测试并发现
p1可用时,子节点将继续使用p2直到它被标记为关闭。

与remap.config进行交互
如果需要重映射规则(proxy.config.reverse_proxy.enabled), 当请求进入子节点时,将在
父选择之前评估其remap.config。这意味着客户端请求是根据重映射规则进行转换的,因此,
应该根据重新映射的主机名进行任何父选择。无论是否启用了pristine主机头(proxy.config.
url_remap.pristine_host_hdr), 都是如此。父节点将接收已转换的请求(因此需要配置为接受它).

Example
客户端向ats请求http://example.com.请求的原始服务器是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

父缓存(parent1.example.com)需要一个类似于remap.config行:
map http://origin.example.com http://origin.example.com

在此示例中,如果parent1.example.com已下线,则子节点将在缓存未命中时自动直接联系
origin.example.com .

Parent Failover
ats支持使用多个父缓存。这可确保如果一个父缓存不可用,则另一个父缓存可以为客户端请求
提供服务。

将ats配置为使用多个父缓存时,ats会检测父缓存不可用并将miss请求发送到另一个父缓存。如果指定两个以上的父缓存,则查询父缓存的顺序取决于parent.config配置文件中配置的父代理规则。默认情况下,将按照配置文件中列出的顺序查询父缓存。

Configuring Traffic Server to Use a Parent Cache
要将ats配置为使用一个或多个父缓存,必须执行下面详述的配置调整。

只需配置子缓存。假设父节点配置为服务器于子服务器的源服务器, 则作为ats父缓存的节点不
需要其他配置。

1. 设置records.config
CONFIG proxy.config.http.parent_proxy_routing_enable INT 1

2. 标识要用于miss的请求提供服务的父缓存。要使用父故障转移,必须标识多个父缓存,以便于
在父缓存不可用时,将请求发送到另一个父缓存;

3. 编辑parent.config以设置父代理规则,该规则指定希望转发请求的父缓存;

以下示例将ats配置为将包含正则表达式和路径/viewpoint的所有请求直接路由到源服务器(绕过
父层次结构);

url_regex=politics prefix=/viewpoint go_direct=true

以下示例将ats配置为将包含http://host1开头的url的所有未命中请求定向到父缓存parent1.如果
parent1无法提供请求,则请求将转发到parent2. 因为round-robin=true, ats会根据客户端ip地址循环
访问父缓存列表。

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

traffic_ctl config reload

ats 分层缓存的更多相关文章

  1. ATS 分级缓存

    理解缓存分级cache hierarchies 缓存分级是由彼此能够相互通信的各级缓存组成的,ATS支持几种类型的缓存分级.所有的缓存分级都有父子缓存概念. 父缓存位于缓存分级的较高级别,ATS能将请 ...

  2. 使用go mod结合docker分层缓存进行自动CI/CD

    本文地址:https://www.cnblogs.com/likeli/p/10521941.html 喜大奔的go mod 官方背书的go mod拯救了我的代码洁癖症! 环境 go v1.12 do ...

  3. ats显示代理缓存

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

  4. ats缓存规则

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

  5. Redis学习之路(一)之缓存知识体系

    转自:https://www.unixhot.com/page/cache 缓存分层 缓存分级 内容 内容简介/主要技术关键词 用户层 DNS 浏览器DNS缓存 Firefox默认60秒,HTML5的 ...

  6. Apache Traffic Server(ats)

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

  7. ATS日志说明

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

  8. 缓存设计(cache-design)

    分布式缓存设计 目前常见的缓存方案都是分层缓存,通常可以分为以下几层: 1.1NG本地缓存,命中的话直接返回 1.2 NG没有命中时则需要查询分布式缓存,如redis 1.3 如果分布式缓存没有命中则 ...

  9. Ehcache3.x学习(二)分层的选项

    Ehcache支持分层缓存的概念. 当想缓存堆内存以外的空间时,会发生下面的事情: 1.将数据添加到缓存意味着必须序列化key和value. 2.从缓存中读取数据意味着可能必须反序列化key和valu ...

随机推荐

  1. 也谈SpringCloud:假如 《复仇者联盟4》是一个微服务

    前言   <复仇者联盟4>(下文<妇联4>) 将于4月24号上映了,漫威迷们是不是迫不及待了.我虽然不是漫威迷,没有看过相关漫画,但是电影确实一步都不落.不过我在想一个问题:假 ...

  2. mysql报错:/usr/sbin/mysqld:unknown variable 'default-character-set=utf8'

    修改mysql的字符集时,为了将默认字符集设置为utf-8,便将/etc/my.cnf下[mysqld]加了一行 default-character-set=utf8, 但是在下次启动系统的时候,my ...

  3. 初识Qt基于http协议网页浏览

    1.新建一个Qt Gui应用,项目名称为http,基类选择为QMainWindow,类名设置为MainWindow. 2.在http.pro文件中的QT  += core gui后添加\ networ ...

  4. 《关于ES6的学习》

    var JavaScript中,我们通常说的作用域是函数作用域,使用var声明的变量,无论是在代码的哪个地方声明的,都会提升到当前作用域的最顶部,这种行为叫做变量提升(Hoisting) 也就是说,如 ...

  5. 串口调试助手vc源程序及其详细编写过程

    串口调试助手vc源程序及其详细编写过程   目次: 1.建立项目 2.在项目中插入MSComm控件 3.利用ClassWizard定义CMSComm类控制变量 4.在对话框中添加控件 5.添加串口事件 ...

  6. MariaDB快速批量插入数据的几种办法

    前言 当要向MariaDB中插入新的数据时,以下过程会影响插入所消耗的时间:(按时间消耗长短降序排序) 将数据sync到磁盘上(它是事务结束的一部分) 添加新的键值.索引越大,更新键值所消耗的时间就越 ...

  7. mysql/mariadb学习记录——创建删除数据库、表的基本命令

    查看已有的数据库: mysql> show databases; +--------------------+ | Database | +--------------------+ | inf ...

  8. 【Linux】LVM逻辑卷管理和RAID

    LVM概述: 是对磁盘分区进行管理的一种机制 是一种将一个或多个硬盘的分区在逻辑上集合,相当于一个大硬盘来使用,当硬盘的空间不 够使用的时候,可以继续将其它的硬盘的分区加入其中,这样可以实现一种磁盘空 ...

  9. Linux服务-ftp

    目录 1. ftp简介 2. ftp架构 3. ftp数据连接模式 4. 用户认证 5. vsftpd 5.1 vsftpd安装 5.2 vsftpd配置 5.3 vsftpd实验配置 5.3.1 安 ...

  10. golang日志收集方案之ELK

    每个系统都有日志,当系统出现问题时,需要通过日志解决问题 当系统机器比较少时,登陆到服务器上查看即可满足 当系统机器规模巨大,登陆到机器上查看几乎不现实 当然即使是机器规模不大,一个系统通常也会涉及到 ...