gRPC调用、失败与演进契约
RPC调用模型与截止时间
前置:理解客户端/服务端、请求响应、流式返回与期限;本机示例使用 Python 3.10+,依赖版本见下文。教学范围为proto3;Python3.10+;grpcio/grpcio-tools1.76.0;protobuf6.33.0。核对日期2026-10-17。示例未执行,本轮没有安装依赖、生成协议代码、启动服务或浏览器预览。完整文件与输入见图书查询协议、服务端与客户端示例;推演结论只适用于写明的模型。
gRPC与本地调用差异
gRPC与本地调用差异在于远程交互会延迟、失败和产生不确定结果。生成的客户端桩让调用形式相似,却不能抹去连接、序列化与截止时间。服务定义列出方法和消息,业务方仍须定义认证、幂等和错误语义。
四类RPC消息形状
四类RPC消息形状包含单次请求单次响应、服务端流、客户端流和双向流式。流内部有序不等于多个调用之间全局有序,两个方向独立推进也不保证业务关联自动匹配。选流式前先确定背压、结束条件与断线后的续读位置。
截止时间如何传递
截止时间如何传递需要计算剩余预算,不能每个下游再给一份完整超时。客户端超时可能发生在服务端已完成之后;服务端应感知取消并停止不必要工作,但已提交的副作用不会自动撤销。本文只读官方语义,没有执行RPC。
调用链共享同一截止预算
假设入口总预算2秒,服务A已花费0.4秒,下游B最多只能使用剩余1.6秒,还应为回传留余量。若A重新给B两秒,就可能让工作超过调用方等待期限。取消需要服务端及其后台任务配合检查;它不会撤销已完成的事务。具体语言如何传播上下文,按官方截止时间指南核对。
查看图表代码
消息数量决定调用形状
下面的“一”与“多”表示一次RPC内请求和响应消息的数量,不表示网络连接数。双向流的两条消息序列各自有序,但请求与响应的业务对应仍需协议字段说明。流结束后重新连接是否续传,必须另定义游标或业务确认。
查看图表代码
来源与适用边界
- 英文官方、作者或规范原文:本专题机制依据;按上述固定版本族阅读。
- 中文官方或作者资料:用于术语和讲解交叉核对,冲突以原始规范为准。
- 截止时间、取消、生成工具1.76.0:源码仅静态复核,兼容与网络流程未执行。
gRPC状态码、安全重试与流控
状态码如何表达
状态码如何表达业务失败要稳定区分:INVALID_ARGUMENT用于参数自身非法,NOT_FOUND用于资源不存在。UNAVAILABLE通常指暂时不可用,却不证明重试没有副作用;错误详情避免泄露内部异常堆栈,客户端按契约处理而非解析随意文本。
重试何时安全
重试何时安全取决于业务幂等与提交状态,不能看见网络错误就重复收费。只读查询通常更容易重试,有副作用方法需稳定请求标识、去重存储和结果查询。自动重试还受服务配置、状态码与总截止时间限制。
流控与应用缓冲
流控与应用缓冲并非同一个队列。传输背压不能阻止应用无限积压待发消息;消费慢时应限制业务队列、取消无用工作并定义丢弃或拒绝规则。写入API返回也不等于对端已处理消息,必须根据语言实现核对阻塞语义。
错误分类之后才决定重试
参数非法应先修正输入,资源不存在应检查ID;只有契约允许重试且剩余期限足够时,才进入有限退避。对于写请求,还必须先确认幂等或查询原请求状态。把所有非OK都重试,会放大负载并掩盖调用错误。
查看图表代码
来源与适用边界
- 英文官方、作者或规范原文:本专题机制依据;按上述固定版本族阅读。
- 中文官方或作者资料:用于术语和讲解交叉核对,冲突以原始规范为准。
- 截止时间、取消、生成工具1.76.0:源码仅静态复核,兼容与网络流程未执行。
gRPC身份认证与服务演进
通道与身份边界
通道与身份边界分别处理传输保护与业务授权。TLS加密连接并验证配置的证书身份,但不自动判定某个用户能读某本书。元数据可携带令牌,服务端仍应核验;本机无TLS示例没有账号,不代表生产身份方案。
服务升级如何兼容
服务升级如何兼容同时检查方法名、消息字段号与应用语义。新增字段通常比改字段号安全,但改变“缺省值”的业务解释仍会破坏旧客户端。长连接滚动升级需考虑正在进行的流与优雅关闭,本课程没有部署演练。
gRPC规范与版本证据
gRPC规范与版本证据采用官方核心概念、截止时间和取消指南,中文微软文档作交叉核对。生成器和运行库固定1.76.0教学族,protobuf固定6.33.0;这不是声称最新版本或已验证兼容,读者安装前应在隔离环境复核维护与安全状态。
身份认证与资源授权逐层检查
TLS解决连接保护和配置的对端身份,令牌认证确认当前调用主体,资源授权判断该主体能否访问目标书目。即使三层都通过,也仍需校验book_id等业务参数。滚动升级时同时运行新旧客户端,应分别检查消息兼容与默认语义,而不是只看握手成功。
查看图表代码
来源与适用边界
- 英文官方、作者或规范原文:本专题机制依据;按上述固定版本族阅读。
- 中文官方或作者资料:用于术语和讲解交叉核对,冲突以原始规范为准。
- 本课程调用模型:回顾远程调用与消息形状,和本页升级、安全边界对照。
- 截止时间、取消、生成工具1.76.0:源码仅静态复核,兼容与网络流程未执行。
继续阅读
- 协议与完整应用