我使用google CDN和google负载均衡器,它有几个后端服务,每个服务都有不同的google 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)
这并不总是发生,例如,在从我们的服务器返回响应后,google负载均衡器返回响应而不进行查询。但是大约一天过去了,他们又开始问了。请注意,我提出的请求几乎相同的地理位置。
经过一些谷歌搜索,我已经在SO上找到了下面的链接,它说google CDN正在积极地驱逐它的内容(说总共只有10MB缓存大小),https://stackoverflow.com/a/54031267/1982282
并且google CDN不保证尊重max-age。Google Cloud CDN ignores max-age over 3600
但是,上述问题的原因是,真的是这种激进的驱逐吗?
实际上,我们的服务器还在开发阶段,所以没有大量的流量,而且总的缓存大小只有10MB或更多。但在我个人感觉,我不能相信谷歌CDN驱逐内容如此之难(在1天内,10MB+大小)。
有没有人能分享你对谷歌CDN驱逐率的经验?
致以敬意,
发布于 2019-12-12 23:40:38
简而言之,CDN缓存内容以及随后的缓存命中受到几个独立因素的影响,特别是缓存内容回收、内容过期、用户请求强度和大小。除此之外,云CDN还可以发起其他请求作为缓存算法的一部分:即验证请求和字节范围请求。
因此,您不应该期望通过调整单个参数(例如max-age )来停止对源服务器的请求。
正如Google Cloud CDN文档中提到的,
对于要从缓存中提供的内容,它必须已插入到缓存中,不能被逐出,并且不能过期。
被逐出的内容可能已过期,也可能未过期。设置过期时间不会影响驱逐。
随着缓存接收更多的流量,它们也会逐出更多缓存的内容。
由于缓存的性质,无法预测特定请求是否会在缓存之外提供服务。
谈论缓存内容的任何类型的“积极驱逐”都是相当不正确的。云CDN缓存的行为就像它应该做的那样。这里清楚地描述了这种行为:
Google Cloud CDN: Caching Details
这篇文档还解释了这里提到的关于这个问题的另外两个“问题”。
https://stackoverflow.com/questions/59278187
复制相似问题