登录
推荐 文章 Go 技术 课程 下载 专题 AI
首页 >  Golang >  Go教程

Go Transport 连接复用:高并发下别把短连接当默认答案

来源:Golang学习网专题原创

时间:2026-06-09 00:06:00 609浏览 收藏

HTTP 调用慢,不一定是下游业务慢,也可能是你的客户端不停建连。Transport 是 Go HTTP 客户端的连接池,高并发服务必须显式配置它,而不是依赖默认值。

空闲连接不是浪费

合理的空闲连接可以避免频繁 TCP/TLS 握手,降低延迟和 CPU 消耗。对于稳定调用的内部服务,应保留足够的 idle 连接。

MaxConnsPerHost 是保护阀

如果某个下游只能承受有限并发,可以用 MaxConnsPerHost 给客户端加硬上限。否则入口高峰会直接扩散到下游。

连接复用依赖正确关闭 body

如果没有读完或关闭响应体,连接无法回到池里。线上表现通常是连接数升高、延迟抖动、goroutine 堆积。

生产场景

适用于高频内部 HTTP/RPC 调用、微服务聚合接口和长连接复用明显的服务。Transport 配置不合理时,慢点可能来自客户端建连而不是业务处理。

关键指标

  • 每个下游的连接复用率与新建连接数
  • MaxConnsPerHost 排队等待和连接错误
  • TLS 握手耗时与空闲连接数量

常见误区

  • 每次请求创建新的 http.Client 或 Transport
  • 没有限制 MaxConnsPerHost,入口高峰直接扩散到下游
  • body 未关闭导致连接池失效

落地建议

建议进程级复用 Transport,按下游设置连接池参数。高峰期观察连接数、建连耗时和下游错误,必要时用 MaxConnsPerHost 把客户端变成保护阀。

代码示例

transport := &http.Transport{
    MaxIdleConns:        200,
    MaxIdleConnsPerHost: 50,
    MaxConnsPerHost:     80,
    IdleConnTimeout:     90 * time.Second,
}
client := &http.Client{Transport: transport, Timeout: time.Second}

上线检查

  • 每个重要下游都有连接池配置。
  • 连接池指标和错误率一起看。
  • 所有响应体都正确关闭。
声明:本文转载于:Golang学习网专题原创 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>