工程实践

流式输出中断的三种常见原因

Easycha 编辑部
#流式#排障#SSE
流式接口看起来只是把响应分片下发,实际链路上有四个可能出问题的环节:客户端、CDN 或反代、站点网关、上游。我们整理了三类最常见的中断,以及各自的判断方法。 第一类是缓冲。反代开启了 gzip 或响应缓冲,会把分片攒成整包再发,表现为「等很久然后一次性出现」。判断方法是看首个分片的到达时间是否接近总时长;如果是,问题在中间层。第二类是静默断流:上游返回 429 或 5xx,网关没有把错误透传,直接关闭连接,客户端只看到连接中断。抓包能看到 TCP FIN 而没有错误帧。第三类是客户端超时:很多 SDK 默认读超时 60 秒,长输出任务会被自己掐断。 排查顺序建议从外到内:先确认客户端超时,再用直连地址绕开 CDN,最后看网关日志。上线前把「断流重试」做成幂等操作,避免重试导致重复计费。 顺带提一个计费问题:断流后的重试如果原请求已经产生计费,重试就是二次付费。稳妥的做法是给每个请求带上幂等键,由网关判断是否复用上次结果;多数站点支持这一约定,但需要在接入时主动声明。