我想让我的 Google App Engine 服务中的 db.put() 操作尽可能有弹性,即使在基础设施出现问题或过载的情况下也能最大限度地提高成功的可能性。我目前想出的是捕捉所有可能发生的异常,并创建一个任务,如果第一次尝试失败,则重试提交:
try:
db.put(new_user_record)
except DeadlineExceededError:
deferred.defer(db.put,new_user_record)
except:
deferred.defer(db.put,new_user_record)
此代码是否捕获所有可能的错误路径?或者是否有其他方法 db.put() 可能会失败而不会被此代码捕获?
2013 年 3 月 28 日编辑 - 澄清预期失败的时间
到目前为止,似乎答案假设如果 db.put() 失败,那是因为数据存储已关闭。根据我运行相当高工作负载应用程序的经验,这不一定是必需的。有时您会遇到特定于工作负载的 API 瓶颈,有时一个 API 的缓慢会导致另一个 API 的请求截止日期到期。即使此类事件的频率较低,但如果流量很高,它们的数量可能会很大。这些是我试图涵盖的情况。