我们在谷歌CDN中缓存我们的网页和内容。
谷歌已经为我们提供了一个API,以使特定的页面路径的缓存无效。
我们的网站是使用一个叫AEM(Adobe Experience Manager)的CMS建立的,这个CMS支持持续的页面内容更新,例如,我们可能会更新我们网站上显示的内容。https:/our-webpagehomepage.html。 一天内进行两次。当这样的操作完成后,就需要在谷歌CDN上刷新缓存,以备不时之需。"homepage.html".
这种活动很常见,也就是说 我们需要在一天内发送数个缓存无效化请求(数千个)。
我们发送了这么多的无效请求,以至于一段时间后,我们得到了这样的错误信息。
Caused by: com.google.api.client.googleapis.json.GoogleJsonResponseException: 403 Forbidden
{
"code" : 403,
"errors" : [ {
"domain" : "usageLimits",
"message" : "Rate Limit Exceeded",
"reason" : "rateLimitExceeded"
} ],
"message" : "Rate Limit Exceeded"
}
如何解决这个问题?
我看过这一页 https:/developers.google.comdriveapiv3handle-errors。
其中提到了批量请求。
如何将多个页面的无效请求批量发送至谷歌CDN?
或者是否可以增加或设置API刷新调用限制,使每天的次数更多。
现在,如果我们有100个页面要从CDN刷新,我们就进行下面的HTTP调用100次(每个页面一次)。
CacheInvalidationRule requestBody = new CacheInvalidationRule();
// IMPORTANT
requestBody.setPath(pagePath);
Compute computeService = createComputeService();
Compute.UrlMaps.InvalidateCache request =
computeService.urlMaps().invalidateCache(projectName, urlMap, requestBody);
Operation response = request.execute();
if(LOG.isDebugEnabled()) {
LOG.debug("Google CDN Flush Response JSON :: {}",response);
}
LOG.info("Google CDN Flush Invalidation for Page Path {}:: Response Status Code:: {}",pagePath,response.getStatus());
我们把要刷新的页面设置在 requestBody.setPath(pagePath);
我们能不能用一种更有效的方式,比如在一次HTTP调用中把所有的页面以数组或字符串的形式发送?
比如说:
requestBody.setPath(pagePath)。
其中
pagePath="['/homepage.html','/videos.html','/sports/basketball.html','/tickets.html','/faqs.html']";
Rate Limit Exceeded
是防洪保护,你要快慢你的请求。
实现指数型后退重试请求。
你可以周期性地重试一个失败的请求,在越来越长的时间内处理与速率限制、网络容量或响应时间有关的错误。例如,您可能会在1秒后重试一个失败的请求,然后在2秒后重试,然后在4秒后重试。这种方法被称为指数回退,它用于提高带宽的使用率,并在并发环境中最大限度地提高请求的吞吐量。使用指数回退时,要考虑以下几点。
- 在错误发生后至少一秒开始重试周期。
- 如果尝试的请求引入了变化,例如创建请求,请添加检查以确保没有任何重复。有些错误,如无效的授权凭证或 "未找到文件 "的错误,不是通过重试请求就能解决的。
批量处理对你的帮助不大,你还是会被限制在同样的速率限制问题上,我甚至看到过批量处理时的速率限制错误。
请注意你的链接是来自Google drive api im甚至不确定Cloud CDN是否支持请求的批处理。
我的意思是,如果你在AEM上改变了你的主页,通常你会使所有的子页面也失效(导航可能会改变,...)。
是不是有一种可能性,让google cdn无效的树或子树? 至少这就是我从这个文档中提取的内容 https:/cloud.google.comsdkgcloudreferencecomputeurl-mapsinvalidate-cdn-cache。