gRPC
gRPC deadline 怎样跨服务传递
给一条调用链分配总预算,避免每跳重新开始计时。
原理
如果上游只剩 200 毫秒,下游却给数据库一个 2 秒超时,就可能在客户端已返回后继续消耗资源。应把剩余预算作为下游调用的上限。
开发中的做法
在服务入口读取 deadline,扣除本地需要的处理时间,再把余量传给子调用。预算不足时及早返回,并在收到取消后停止可中止的工作。
验证与追问
用慢响应的测试服务确认客户端按时收到 DEADLINE_EXCEEDED,再检查下游是否释放请求关联的资源。
代码片段
stub.GetItem(request, timeout=0.2) # Python 客户端,单位秒