猿问

appengine 数据存储超时错误 5 和 11 之间有什么区别?

我正在尝试通过将具有大数据存储PutMulti调用(500 个实体)的 Google App Engine 请求处理程序分成多批实体并运行并发 goroutine 以发送较小的PutMulti调用(每个 100 个实体)来加速它。

在此之前,我常常被获取数据存储错误Call error 11: Deadline exceeded (timeout)从我的PutMulti电话会在最后期限时,我测试了许多并发请求的处理程序。并行化后,处理程序确实加快了速度,但我仍然偶尔会遇到该错误以及另一种类型的错误API error 5 (datastore_v3: TIMEOUT): The datastore operation timed out, or the data was temporarily unavailable.

这个错误 5 是由于数据存储中的争用导致的吗?错误 5 和错误 11 之间有什么区别?


四季花海
浏览 152回答 2
2回答

MM们

这些错误来自两个不同的地方,第一,调用错误,是RPC客户端超时导致的本地错误。它表示等待 RPC 完成的超时。google.golang.org/appengine 中的默认 RPC 超时为 60 秒。第二个错误来自服务端。此错误表示在数据存储中执行操作时发生超时。其中一些操作的超时时间远短于 60 秒,通常这可能表示存在争用。理解这些差异的一种可能更简单的方法是,您会发现,如果您对大量更改进行单个多操作,则可以轻松触发第一次超时。如果您针对单个键或一小组键创建大量并发操作,您将更容易触发后者。由于超时是共享资源饱和度的一般指标,当然有很多方法和组合来生成它们。一般来说,人们会希望适当地重试操作,并适当地调整操作的大小,以及尽可能地聚合热键上的操作,以减少与争用相关问题的机会。正如其他人所建议的那样,python 和 java 文档已经有一些这样的例子。您可能希望使用https://godoc.org/google.golang.org/appengine#IsTimeoutError并且如果您需要增加第一个错误类的超时时间,您可以调整上下文截止日期,请参阅此处的方法:https : //godoc.org/golang.org/x/net/context#WithDeadline注意:您将无法将截止日期延长到请求截止日期之后,但是,如果您在任务或虚拟机中运行您可以延长期限。

喵喔喔

您看到的第一个错误可能只是正常操作中的超时,第二个可能是由于写入争用。更多相关信息:处理数据存储错误https://cloud.google.com/appengine/articles/handling_datastore_errors
随时随地看视频慕课网APP

相关分类

Go
我要回答