AIP-194 自动重发配置
·
[tommwq@126.com]
编号 | 194 |
---|---|
原文链接 | https://google.aip.dev/194 |
状态 | 批准 |
创建日期 | 2019-08-16 |
更新日期 | 2019-08-16 |
远程过程调用可能失败。此时,调用远程过程的客户端需要知道能否安全的重新执行操作。如果多个API使用统一的错误码,客户端可以妥善处理失败。
指南
客户端 应当 自动重发那些重复执行时不会引发意外状态变化的、非事务性的单次调用。
客户端 不应 重发事务性请求。相反这些请求 应当 存在应用层级的重发逻辑,从开始处重新执行完整事务。
客户端 不应 自动重发那些重复运行会导致意外状态变化的请求。
注意 本AIP不设计客户端流或双向流。
注意 关于客户端库中的客户端重发行为,请参考AIP-4221。
可重发状态码
对于上面提到的可重发的方法,客户端 应当 在遇到以下状态码时重发请求:
UNAVAILABLE
此状态码通常由网络故障引起,通常是暂时的。如果预期连接将(很快)恢复,可以重发请求。
不可重发状态码
遇到下列状态码时 不应 自动重发请求:
OK
请求成功。CANCELLED
应用服务可以取消请求, 必须 遵守此规则。DEADLINE_EXCEEDED
应用服务可以设置截止时间, 必须 遵守此规则。INVALID_ARGUMENT
重发带有无效参数的请求永远不会得到成功。DATA_LOSS
不可恢复的错误, 必须 立即向应用服务报告。
通常不可重发状态码
遇到以下状态码时,通常 不应 重发请求:
RESOURCE_EXHAUSTED
这可能是配额耗尽的信号。因此几小时内重发请求可能都不会成功。同时,重发啊请求可能会产生费用。如果RESOURCE_EXHAUSTED
用于配额以外的其他原因,并且资源恢复的预期时间较短,可以重发请求。INTERNAL
这个状态码通常意味着系统的某些内部模块失败,通常意味着应该向系统提交错误报告。这种情况 应当 立即向应用服务报告。UNKNOWN
和INTERNAL
不同,此状态码保留给系统真正未知的错误,因此不可能安全重发请求。这些 应当 立即向应用服务报告。ABORTED
此状态码通常意味着请求由于序列检查不通过或事务中止而失败。 不应 对单个请求重发, 应当 在更高层次(例如整个事务)重新执行。
如果系统不同组件之间没有同步或信号,遇到一些状态码时可以自动重发。例如,客户端可能在读操作遇到 NOT_FOUND
时重发,该操作设计成在资源创建之前一直挂起。当然通常不鼓励这种类型的系统。
因此收到以下状态码时 不应 重发请求:
NOT_FOUND
客户端 不应 重发请求,直到资源创建。ALREADY_EXISTS
客户端 不应 重发请求,直到资源被删除。PERMISSION_DENIED
客户端 不应 重发请求,直到获得许可。UNAUTHORIZED
客户端 不应 重发请求,直到获得授权。UNAUTHENTICATED
客户端 不应 重发请求,直到获得认证。FAILED_PRECONDITION
客户端 不应 重发请求,直到系统状态满足。OUT_OF_RANGE
客户端 不应 重发请求,直到范围扩展。UNIMPLEMENTED
客户端 不应 重发请求,直到系统实现接口。
进一步阅读
- 关于消除并行或重发请求歧义的方法,请参考AIP-154。