PHIL / NOTES
← 返回笔记目录
gRPC

gRPC deadline 怎样跨服务传递

给一条调用链分配总预算,避免每跳重新开始计时。

原理

如果上游只剩 200 毫秒,下游却给数据库一个 2 秒超时,就可能在客户端已返回后继续消耗资源。应把剩余预算作为下游调用的上限。

开发中的做法

在服务入口读取 deadline,扣除本地需要的处理时间,再把余量传给子调用。预算不足时及早返回,并在收到取消后停止可中止的工作。

验证与追问

用慢响应的测试服务确认客户端按时收到 DEADLINE_EXCEEDED,再检查下游是否释放请求关联的资源。

代码片段

stub.GetItem(request, timeout=0.2)  # Python 客户端,单位秒