Google API为CDN缓存无效抛出Rate Limit Exceeded 403异常。

问题描述 投票:0回答:1

我们在谷歌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']";
java google-api aem
1个回答
1
投票

Rate Limit Exceeded 是防洪保护,你要快慢你的请求。

实现指数型后退重试请求。

你可以周期性地重试一个失败的请求,在越来越长的时间内处理与速率限制、网络容量或响应时间有关的错误。例如,您可能会在1秒后重试一个失败的请求,然后在2秒后重试,然后在4秒后重试。这种方法被称为指数回退,它用于提高带宽的使用率,并在并发环境中最大限度地提高请求的吞吐量。使用指数回退时,要考虑以下几点。

  • 在错误发生后至少一秒开始重试周期。
  • 如果尝试的请求引入了变化,例如创建请求,请添加检查以确保没有任何重复。有些错误,如无效的授权凭证或 "未找到文件 "的错误,不是通过重试请求就能解决的。

批量处理对你的帮助不大,你还是会被限制在同样的速率限制问题上,我甚至看到过批量处理时的速率限制错误。

请注意你的链接是来自Google drive api im甚至不确定Cloud CDN是否支持请求的批处理。


0
投票

我的意思是,如果你在AEM上改变了你的主页,通常你会使所有的子页面也失效(导航可能会改变,...)。

是不是有一种可能性,让google cdn无效的树或子树? 至少这就是我从这个文档中提取的内容 https:/cloud.google.comsdkgcloudreferencecomputeurl-mapsinvalidate-cdn-cache。

© www.soinside.com 2019 - 2024. All rights reserved.