我们已在GCP VM上部署了我们的网站,并在VM前启用了GCP CDN。当我们在大多数情况下浏览网站时,GCP CDN向Origin VM发出请求。
我正在使用下面的堆栈驱动程序查询来检查缓存命中。
resource.type="http_load_balancer"
resource.labels.forwarding_rule_name="rule_name"
httpRequest.serverIp="gcpvmip"
httpRequest.requestUrl="request_url"
httpRequest.cacheFillBytes > 0
答案 0 :(得分:1)
根据您的最新评论,您可能希望在不联系原始服务器的情况下,从Cloud CDN的缓存中提供对您网站的所有请求。但是,使用CDN时看到缓存未命中是正常的。每个CDN都运行许多缓存,而不是一个大的全局缓存。一个URL的内容已插入一个缓存这一事实并不意味着它将出现在所有缓存中。此外,不受欢迎的缓存条目通常会从缓存中逐出,以便为更受欢迎的内容腾出空间。
以下是Cloud CDN文档的一些相关摘录:
Cloud CDN在全球多个地方使用缓存。高速缓存 是反应性的,如果a,对象存储在特定的缓存中 请求通过该缓存,如果响应是可缓存的。一个 存储在一个缓存中的对象不会自动复制到其他缓存中 高速缓存;缓存到缓存填充仅在响应a时发生 客户发起的请求。
https://cloud.google.com/cdn/docs/overview
请注意,到期时间是缓存多长时间的上限 入境仍然有效。无法保证缓存条目 保留在缓存中直到它过期。
https://cloud.google.com/cdn/docs/caching
但是请注意,Cloud CDN在其周围运行了大量缓存 世界和旧的缓存条目经常被逐出,以腾出空间 新内容。因此,每个资源有多个缓存填充 预期作为正常运作的一部分。
https://cloud.google.com/cdn/docs/support#low-hit-rate
如果您看到热门内容的缓存命中率较低,那么最后一个链接会提供有用的建议。
答案 1 :(得分:0)
我确切地知道问题出在哪里... GCP CDN不具有Origin Shield功能。更糟糕的是,有了GCP,几乎每个请求都来自其在全球范围内众多CDN PoP中的不同请求。如果没有Origin Shield,则您的应用服务器就是源服务器,它必须填充每个CDN边缘点的缓存。
以我的经验,您应该仅将GCP CDN用于DOS保护和缓存以及改善HTML请求的TTFB性能(特别是减轻SSL握手的负担)。使用另一个CDN来缓存具有更好的“缓存/命中率”的其他资产。
某些CDN提供程序具有Origin Shield,它可以帮助提高缓存命中率。例如。使用具有Origin Shield功能的CDN提供程序创建cdn.yourdomain.com,并从该处提供所有其他静态内容。
我知道在您的CDN前面放一个CDN听起来很疯狂,但是请相信我,它的效果非常好,如果您使用的CDN带宽收费较低,那么您甚至可以省钱。另外,GCP CDN最多只能缓存10MB的内容。