gRPC
流式 RPC 的背压与断线恢复
避免生产速度超过网络和消费者的承载能力。
原理
流式 RPC 适合逐步产生结果。应用如果一边写流一边把所有待发消息塞进无界队列,客户端变慢时服务端内存仍会持续增长。
开发中的做法
对应用队列设置上限,等待可写信号后再生产下一批。需要断线重连时,让消息携带稳定游标,并规定重复消息如何去重。
验证与追问
用慢消费者验证内存有上界,再测试读到一半断线和从游标恢复。明确哪些消息可能重发,哪些必须由应用显式确认。
避免生产速度超过网络和消费者的承载能力。
流式 RPC 适合逐步产生结果。应用如果一边写流一边把所有待发消息塞进无界队列,客户端变慢时服务端内存仍会持续增长。
对应用队列设置上限,等待可写信号后再生产下一批。需要断线重连时,让消息携带稳定游标,并规定重复消息如何去重。
用慢消费者验证内存有上界,再测试读到一半断线和从游标恢复。明确哪些消息可能重发,哪些必须由应用显式确认。