
ATS 分级缓存
发布日期:2021-05-08 23:26:07
浏览次数:14
分类:博客文章
本文共 3170 字,大约阅读时间需要 10 分钟。
理解缓存分级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.comparent.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 FailoverATS支持使用多个父缓存,这能确保假如一个父缓存不可用时,另一个父缓存能对client请求服务当你使用多个父缓存配置ATS时,ATS探测到一个父缓存不可用时,会将miss请求发送到另一个父缓存。假如你指定了两个以上的父缓存,父缓存查询次序依赖于你在parent.config中配置parent proxy rules,默认按照该配置文件中配置的先后次序查询。配置ATS使用父缓存为了配置ATS使用一个或多个父缓存,你需要向下面那样详细配置。注意你只需要配置子缓存,假设父缓存配置为子缓存的源站,对父缓存不需要额外配置1.在records.config中开启父缓存选项parent caching optionCONFIG proxy.config.http.parent_proxy_routing_enable INT 12.确保你想使用父缓存去服务于 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 PeeringThe 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)
发表评论
最新留言
第一次来,支持一个
[***.219.124.196]2025年03月25日 12时10分43秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
上周热点回顾(3.26-4.1)
2021-05-09
上周热点回顾(6.25-7.1)
2021-05-09
【故障公告】10:30-10:45 左右 docker swarm 集群节点问题引发故障
2021-05-09
工作半年的思考
2021-05-09
不可思议的纯 CSS 滚动进度条效果
2021-05-09
【CSS进阶】伪元素的妙用--单标签之美
2021-05-09
惊闻NBC在奥运后放弃使用Silverlight
2021-05-09
IE下尚未实现错误的原因
2021-05-09
创建自己的Docker基础镜像
2021-05-09
Python 简明教程 --- 20,Python 类中的属性与方法
2021-05-09
KNN 算法-理论篇-如何给电影进行分类
2021-05-09
Spring Cloud第九篇 | 分布式服务跟踪Sleuth
2021-05-09
CODING 敏捷实战系列课第三讲:可视化业务分析
2021-05-09
工作动态尽在掌握 - 使用 CODING 度量团队效能
2021-05-09
CODING DevOps 深度解析系列第二课报名倒计时!
2021-05-09
数据结构第八节(图(下))
2021-05-09
基于Mustache实现sql拼接
2021-05-09
POJ 2260 Error Correction 模拟 贪心 简单题
2021-05-09
gRPC在 ASP.NET Core 中应用学习(一)
2021-05-09
@SuppressWarnings 用法
2021-05-09