首页 > ATS 5.3.0分级缓存

ATS 5.3.0分级缓存

本文档翻译自参考文献[1]



理解缓存分级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去让配置变动生效



参考文档

[1].https://docs.trafficserver.apache.org/en/latest/admin/hierachical-caching.en.html#configuring-traffic-server-to-use-a-parent-cache

[2].https://docs.trafficserver.apache.org/en/latest/reference/configuration/parent.config.en.html

更多相关:

  • (给DotNet加星标,提升.Net技能)转自:HueiFengcnblogs.com/yyfh/p/12361255.html前言本章将介绍客户端缓存将介绍浏览器缓存和服务端缓存,使用浏览器缓存将减少对web服务器的请求次数,同时可以提升性能,避免重复的运算浪费。ASP.NET Core对于HTTP缓存分为两种:客户端(浏览器缓...

  • 事先说明 标题说是“坑”,并没有说是“bug”,也就是多半是玩的姿势不对。 线上问题 我司(lecloud)目前线上大小文件都是使用的ATS 6.2.1版本,昨天运维反馈有文件超过缓存时间并不回源刷新,截图如下: 现象就是:age超过max-age了,过期了不更新! 另外需要说的一点就是,源站是可以正常回源的。 复...

  • 将追加的主题 内存常驻副本(resident alternates)缓存对象刷新(object refresh) 缓存一致性(Cache Consistency) ATS缓存是完全一致性的,除非你不小心踢掉电源,让ATS突然关机。如果要禁用硬盘驱动器自身的缓存,你需要使用下面的命令 hdparm -W0 缓存系统会校验可用...

  • ATS名词术语 副本(alternate) 缓存对象(cache object)的一种变体,最初创建该术语是为了处理HTTP协议中的VARY机制(RFC2616#sec14.44),现在多用于其它的目的。一个对象的所有副本必须以某种方式等价,也就是说,它们是同一个流的等价形式,最常用的一个例子就是,一个流既有普通版本也有压缩版本。...

  • 该博文翻译自参考文献[1] parent.config parent.config文件识别用在缓存分级中的父代理,用这个文件去执行下面的配置: 搭建父分级缓存,兼容多父级缓存和父级缓存故障转移配置指定的URL请求避开父代理缓存 仅当父缓存选项开启后,ATS才能使用parent.config文件。 当你修改parent.conf...

  • 我的博客上已经有很多这样的ats安装实录了,这次的笔记有些不一样,因为它是ATS目前最新的LTS版本6.2.1的安装,写出来更多的是整理自己的思路,因为很多东西搞过不整理,过一段时间就完全忘记掉了。 安装环境: 在rMBP 15.4上上面安装了VMware Fushion 专业版8.5.1,操作系统是MacOS Sierra 10...

  • 2011年我曾有机会精心研究了ATS Cache Module部分的大部分源码,也绘制了一些蹩脚的图片,但是对比专家和大牛的作品还相去甚远,下面的图片摘自Fall Summit 2014中的ATS committer Alan M. Carroll的ppt,仅作研读ATS源码时作参考和对照,更是对高手极致境界的尊崇和反思。...

  • 转载自https://blog.zymlinux.net/index.php/archives/129 首先申明本人是个实实在在的菜鸟,现在也只是搭建起来ats玩玩简单的,写本文只是为了给完全的小白一个参考而已。 本人刚开始接触ats的时候,从ats安装到配置也遇到了很多基本的问题,在查阅资料解决不了的时候基本都是豪哥耐心...

  • 转载自 https://blog.zymlinux.net/index.php/archives/540 ATS插件开发需要提前了解ATS的插件的一些设计思想,以及系统提供的一些不同方向。我们将会介绍ATS的基础开发知识,以利于后续的插件开发课程讲解。 ATS的SDK文档,是了解ATS的核心设计、接口设计的很重要资料,甚至是老...

  • ue4商城资源 Car Configurator Template 汽车配置器模板 ue4商城资源 Car Configurator Template 汽车配置器模板 Unreal Engine虚幻游戏引擎素材资源 Unreal Engine Marketplace –Car Configurator Template 4...

  • 一直在尝试一些写代码方便,阅读代码也很方便的工具,因为使用的是Mac,所以阅读源码上面sourceInsight就没办法用了。 从vscode – sublime – clion 想要可配置性强一点,软件轻一点,也能提供足够的便捷操作,不论是写代码还是快速索引源码,都希望在检索上面节省足够的时间。 vscode 和 sublime...

  • 每日杂事缠身,让自己在不断得烦扰之后终于有了自己的清静时光来熟悉一下我的工具,每次熟悉源码都需要先在windows端改好,拖到linux端,再编译。出现问题,还得重新回到windows端,这个过程太耗费时间。 vim作为唯一能够和windos 下的source insight一争高低的linux端的源码阅读器,只要将它短时间内合理利用...

  • 使用ubuntu(18.04) 作为软路由器连接互联网 背景: 最近要用ubuntu机器作为中继路由,需要配置一下,但是内网外网网上找了一圈,五花八门的,照着做没有一个靠谱的,遇到的问题也没有任何说明,遂写一篇教程以记录一下 功能说明: 简单来说,就是用其他机器的网络上互联网, 比如可以用其他机器的wifi上网等等场景 示意...

  • Spring-Boot 攻略 day01 spring-boot 一. 基本配置加运行 1. 导入配置文件(pom.xml 文件中) org.springframework.bootspring-boot-starter-parent