我正在运行并行工作,将数据从Heroku复制到Google云端存储,最终复制到Bigquery。我现在正在这样做的方法是将查询范围[61500000,62000000]中的ID分成40个任务队列任务,并在每个任务处理程序内负责子范围说[ 61500000,61512500)。在每个任务队列任务处理程序中,它产生了3个goroutine来并行地查询我们的Heroku API,还有一个额外的goroutine来插入Google云端存储。 3 HTTP API输入goroutines泵数据到GCS插入goroutine的方式是通过io.Pipe()。
然而,出于某种原因,除了玩具工作量之外,我无法让它工作。实际上每次都会有一些碎片因错误而失败:
从storage.ObjectsInsertCall.Do()返回。
我到处查看了我们达到结算应用配额的可能位置: * urlfetch total限制developers.google.com/appengine/docs/quotas#UrlFetch *实例内存developers.google.com/appengine/docs/go/modules/#Go_Instance_scaling_and_class 但仍无法找到原因。 下面我解释为什么我排除了上述可能性:
urlfetch总限额 在3个goroutines中使用urlfetch来查询我们的API服务器以获取JSON数据。然后,这3个goroutine处理数据并通过io.Pipe()将它们发送到GCS goroutine。代码看起来像
cl:= urlfetch.Client(c) resp,错误:= cl.Get(“pic-collage.com / ...”) if err!= nil { if appengine.IsOverQuota(err){ c.Errorf(“collageJSONByID over quota:%v”,错误) } 回报错误 }
然而,虽然我们看到许多“POST www.googleapis.com/upload/storage/v1beta2 ...:Over quota:”错误,但我们从来没有看到与urlfetches相关的日志“collageJSONByID ...”到我们的Heroku服务器
我还在"Over quota" when using GCS json-api from App Engine中描述的serviceaccounts中应用了缓存修复程序,但问题仍然存在。
我想知道我们是否可以获得有关我们超出的特定App Engine配额的更多信息?或者,Google云端存储还有其他隐藏的配额,文档中没有提到这些配额?
答案 0 :(得分:0)
当您达到每日结算限额时,可能会发生Over quota:
消息。如果您已为自己的应用程序启用了结算功能,请确保每日预算足够高,以满足您的使用需求。