理解緩存分級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去讓配置變動生效