0

我将谷歌 CDN 与谷歌负载均衡器一起使用,它有一些后端服务,每个服务都有不同的谷歌 CDN 设置,如下所示。

service A: google CDN disabled (API server)
service B: google CDN enabled, 1day (Cache-Control: public, max-age=86400), cache-key: full URL
service C: google CDN enabled, 1year (Cache-Control: public, max-age=31536000), cache-key: full URL

问题是,service C从谷歌负载均衡器得到请求,昨天已经请求了哪个 URL 并正确处理。( status 200, with Cache-Control header and Content-Length)

它并不总是发生,例如,在从我们的服务器返回响应之后,谷歌负载均衡器返回响应而不进行查询。但大约一天过去了,他们又开始问了。请注意,我提出了几乎相同的地理位置。

经过一番谷歌搜索后,我已经在 SO 上找到了以下链接,上面说谷歌 CDN 积极驱逐其内容(总共只有 10MB 缓存大小), https://stackoverflow.com/a/54031267/1982282

谷歌 CDN 不保证尊重 max-age。 Google Cloud CDN 忽略超过 3600 的 max-age

但上述问题的原因是,真的是这种激进的驱逐吗?

实际上,我们的服务器仍处于开发阶段,因此没有大量流量,总缓存大小也只有 10MB 左右。但以我个人的感觉,我无法相信谷歌 CDN 会如此努力地驱逐内容(在 1 天内,10MB+ 大小)。

任何人都可以分享您关于谷歌 CDN 驱逐率的经验吗?

问候,

4

1 回答 1

1

简而言之,CDN 缓存内容和因此缓存命中受到几个独立因素的影响,特别是缓存内容驱逐、内容过期、用户请求强度和大小。除此之外,Cloud CDN 还可以发起其他请求作为缓存算法的一部分:即验证请求和字节范围请求。

因此,您不应期望通过调整单个参数(例如max-age.

正如 Google Cloud CDN 文档所述,

对于要从​​缓存中提供的内容,它必须已经插入到缓存中,不能被驱逐,也不能过期。

被驱逐的内容可能已过期,也可能不会。设置过期时间不会影响驱逐。

随着缓存接收更多流量,它们也会驱逐更多缓存内容。

由于缓存的性质,无法预测特定请求是否会在缓存之外提供服务。

谈论缓存内容的任何类型的“积极驱逐”都是不正确的。Cloud CDN 缓存的行为与应有的完全一样。此处清楚地描述了此行为:

谷歌云 CDN:概述

Google Cloud CDN:缓存详细信息

本文档还解释了此处提到的关于该问题的另外两个“问题”。

于 2019-12-12T15:40:37.710 回答