You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AWS ECS启用Service Connect后SSE流式传输失效,结果被缓冲返回

解决ECS Fargate Service Connect下SSE流式传输缓冲问题

问题背景

后端服务作为LLM流式代理,前端通过SSE动态接收结果,本地及未启用Service Connect的ECS Fargate环境运行正常,但启用Service Connect后,流式响应被缓冲,仅一次性返回完整结果。服务代码无自定义缓冲逻辑:

@PostMapping(value = "/completions", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
public Flux<String> complete(@Valid @RequestBody CompletionRequest request) {
    return goApiWebClient.post()
            .uri("/v1/chat/completions")
            .bodyValue(completionRequest)
            .retrieve()
            .bodyToFlux(String.class)
            .takeWhile(response -> !response.equals("[DONE]"))
            .onErrorResume(e -> Flux.just("Error while calling ChatGPT API: " + e.getMessage()));
}

问题根源

ECS Service Connect基于Envoy代理实现服务间通信,Envoy默认会缓冲HTTP响应以优化性能,但这会破坏SSE这类流式传输的实时性。

解决方案

无需手动修改Envoy配置文件,可通过以下两种方式在Fargate环境中禁用目标路由的缓冲:

方式1:通过ECS Service Connect路由配置禁用缓冲

  1. 登录AWS控制台,进入ECS服务详情页
  2. 编辑服务的Service Connect配置
  3. 在对应的路由条目(指向你的后端服务的路由)中,添加自定义属性:
    • 键:envoy.route.disable_buffering
    • 值:true
  4. 保存配置并重新部署服务

方式2:通过任务定义环境变量配置

在后端服务的任务定义中,为容器添加以下环境变量之一:

  • 全局禁用所有路由缓冲:
    ENVOY_ROUTE_CONFIG_DISABLE_BUFFERING=true
    
  • 仅针对/completions接口禁用缓冲(更精细控制):
    ENVOY_ROUTE_CONFIG_/completions_DISABLE_BUFFERING=true
    

添加后重新部署任务即可生效。

验证步骤

  1. 重新部署服务后,发起SSE请求测试/completions接口,确认响应是否按流式返回
  2. 若启用了Envoy访问日志,可检查日志中是否包含disable_buffering: true的配置标识

额外注意事项

  • 确保服务返回的响应头包含Cache-Control: no-cache和Connection: keep-alive,避免任何中间层缓存响应
  • 确认Service Connect的路由规则正确匹配/completions接口路径

内容的提问来源于stack exchange,提问作者Sarkhad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 05:12:27