容器模型客户端开发短记:别把连接池留给默认值
容器模型客户端开发短记:别把连接池留给默认值
本地调用模型接口正常,进入集群后却出现批量超时,常见原因不在业务逻辑,而在连接与超时没有被显式配置。模型请求持续时间长,遇到 DNS、网关或上游抖动时,无边界的连接建立和等待会占住 goroutine。
客户端应使用独立Transport,设置连接、TLS 握手和请求超时,并按自己的并发预算限制每个主机的连接数。配置缺失时应拒绝启动,密钥通过受控注入方式提供,不能写进镜像或日志。
transport := &http.Transport{ MaxConnsPerHost: maxConns, MaxIdleConnsPerHost: maxConns, TLSHandshakeTimeout: handshakeTimeout, } client := &http.Client{Transport: transport, Timeout: requestTimeout}反例是把存活探针直接依赖模型网关:上游短暂不可用时,实例会被反复重启,反而扩大故障。存活探针只检查进程自身能否工作;就绪探针是否依赖下游,要依据服务是否能安全降级决定。
验证时在隔离环境模拟 DNS 延迟、连接失败和流式消费者变慢,观察请求是否在预算内结束、连接数是否受限、取消是否会中断下游调用。超时值和连接数只对当时负载有效,应连同版本和部署配置记录。
配置变更的核对方式
发布前将连接池参数打印为脱敏的启动摘要,并用一个受控压测脚本制造比池大小更多的并发请求。重点看等待中的请求在取消后能否释放连接,而不是只看成功率;若出现连接持续增长,应先撤回本次配置,再检查响应体是否被完整关闭。
