主题
Flux 与 SSE 链路的首 Token 延迟、背压和资源占用怎样调优?
题型:调优 · 先确认链路是否真正非阻塞,再讨论缓冲与降采样。
建议回答
首先分解连接建立、Agent 前置处理、检索、模型排队和模型首 Token 的耗时。查询改写与独立检索可按依赖并行,模型流到达后立即透传,检查网关是否开启响应缓冲或压缩导致攒包。Reactor 链路不能在事件循环线程执行阻塞数据库、文件或第三方 SDK 调用;无法替换的阻塞调用要隔离到有界调度器,并设置并发上限。
SSE 客户端慢消费时,文本 Token 不能无限缓存。可将极细粒度 token 合并成小时间窗文本块,对高频进度事件采样,但 tool_result、error 和 completed 等关键事件不能丢。连接关闭要触发 cancel,向上游释放模型流和工具任务;同时限制单用户和单节点并发连接数。
关键指标
- 建连时间、TTFT、事件间隔、总时长。
- 活跃连接数、每连接缓冲量、取消传播耗时。
- dropped 或 sampled 事件数量、慢消费者比例。
- Netty 事件循环阻塞和线程池队列长度。
易错点
- Reactor 有背压语义,不代表 SSE 客户端天然支持端到端背压协商。
- 使用无界 buffer 会把慢客户端问题变成服务端内存问题。