From 83fc6beba3b1cac87196e0ecab39ed12baf13da6 Mon Sep 17 00:00:00 2001 From: xfy Date: Fri, 17 Apr 2026 11:31:34 +0800 Subject: [PATCH] =?UTF-8?q?refactor(config):=20=E7=A7=BB=E9=99=A4=20Transp?= =?UTF-8?q?ort.MaxIdleConnsPerHost=20=E9=85=8D=E7=BD=AE=E5=AD=97=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 简化连接池配置,仅保留 MaxConnsPerHost 作为总连接上限。 MaxConnsPerHost 已涵盖活跃和空闲连接,无需单独控制空闲连接数。 Co-Authored-By: Claude Opus 4.7 --- README.md | 2 -- internal/config/config.go | 10 ++-------- internal/config/defaults.go | 6 ++---- internal/config/defaults_test.go | 3 --- internal/config/validate.go | 3 --- internal/config/validate_test.go | 27 ++------------------------- 6 files changed, 6 insertions(+), 45 deletions(-) diff --git a/README.md b/README.md index 7cc44d3..136e80b 100644 --- a/README.md +++ b/README.md @@ -283,7 +283,6 @@ performance: max_size: 268435456 # 256MB inactive: 60s transport: - max_idle_conns_per_host: 100 idle_conn_timeout: 90s max_conns_per_host: 500 @@ -751,7 +750,6 @@ performance: max_entries: 50000 # 根据内存调整 max_size: 268435456 # 256MB transport: - max_idle_conns_per_host: 100 idle_conn_timeout: 90s max_conns_per_host: 500 # 根据后端容量调整 ``` diff --git a/internal/config/config.go b/internal/config/config.go index 3220455..885c68e 100644 --- a/internal/config/config.go +++ b/internal/config/config.go @@ -1377,27 +1377,21 @@ type FileCacheConfig struct { // 配置代理后端连接的连接池参数。 // // 注意事项: -// - MaxIdleConnsPerHost 控制每个后端主机的空闲连接 // - IdleConnTimeout 控制空闲连接的保持时间 -// - MaxConnsPerHost 限制每个后端主机的总连接数 +// - MaxConnsPerHost 限制每个后端主机的总连接数(含活跃和空闲) // // 使用示例: // // transport: -// max_idle_conns_per_host: 10 // idle_conn_timeout: 90s // max_conns_per_host: 100 type TransportConfig struct { - // MaxIdleConnsPerHost 每主机最大空闲连接 - // 单个后端主机的最大空闲连接数 - MaxIdleConnsPerHost int `yaml:"max_idle_conns_per_host"` - // IdleConnTimeout 空闲连接超时 // 空闲连接的最大存活时间 IdleConnTimeout time.Duration `yaml:"idle_conn_timeout"` // MaxConnsPerHost 每主机最大连接数 - // 单个后端主机的总连接数上限 + // 单个后端主机的总连接数上限(包括活跃连接和空闲连接) MaxConnsPerHost int `yaml:"max_conns_per_host"` } diff --git a/internal/config/defaults.go b/internal/config/defaults.go index 9de80b9..2d2a125 100644 --- a/internal/config/defaults.go +++ b/internal/config/defaults.go @@ -173,9 +173,8 @@ func DefaultConfig() *Config { Inactive: 20 * time.Second, }, Transport: TransportConfig{ - MaxIdleConnsPerHost: 32, - IdleConnTimeout: 90 * time.Second, - MaxConnsPerHost: 0, // 0 表示不限制 + IdleConnTimeout: 90 * time.Second, + MaxConnsPerHost: 0, // 0 表示不限制 }, }, Monitoring: MonitoringConfig{ @@ -600,7 +599,6 @@ func GenerateConfigYAML(cfg *Config) ([]byte, error) { fmt.Fprintf(&buf, " max_size: %d # 内存上限(字节,%dMB)\n", cfg.Performance.FileCache.MaxSize, cfg.Performance.FileCache.MaxSize/1024/1024) fmt.Fprintf(&buf, " inactive: %ds # 未访问淘汰时间\n", int(cfg.Performance.FileCache.Inactive.Seconds())) buf.WriteString(" transport: # HTTP Transport 连接池\n") - fmt.Fprintf(&buf, " max_idle_conns_per_host: %d # 每主机空闲连接\n", cfg.Performance.Transport.MaxIdleConnsPerHost) fmt.Fprintf(&buf, " idle_conn_timeout: %ds # 空闲超时\n", int(cfg.Performance.Transport.IdleConnTimeout.Seconds())) fmt.Fprintf(&buf, " max_conns_per_host: %d # 每主机最大连接(0 表示不限制)\n", cfg.Performance.Transport.MaxConnsPerHost) buf.WriteString("\n") diff --git a/internal/config/defaults_test.go b/internal/config/defaults_test.go index c0668d2..81ea87f 100644 --- a/internal/config/defaults_test.go +++ b/internal/config/defaults_test.go @@ -121,9 +121,6 @@ func TestDefaultConfigPerformance(t *testing.T) { } // 验证 Transport 默认值 - if cfg.Performance.Transport.MaxIdleConnsPerHost != 32 { - t.Errorf("Transport.MaxIdleConnsPerHost 期望 32, 实际 %d", cfg.Performance.Transport.MaxIdleConnsPerHost) - } if cfg.Performance.Transport.IdleConnTimeout != 90*time.Second { t.Errorf("Transport.IdleConnTimeout 期望 90s, 实际 %v", cfg.Performance.Transport.IdleConnTimeout) } diff --git a/internal/config/validate.go b/internal/config/validate.go index aea5c1c..70c6769 100644 --- a/internal/config/validate.go +++ b/internal/config/validate.go @@ -1043,9 +1043,6 @@ func validateStream(s *StreamConfig) error { // - error: 验证失败时返回错误信息,成功返回 nil func validatePerformance(p *PerformanceConfig) error { // 检查 Transport 配置(可能导致性能问题) - if p.Transport.MaxIdleConnsPerHost < 0 { - return errors.New("transport.max_idle_conns_per_host 不能为负数") - } if p.Transport.MaxConnsPerHost < 0 { return errors.New("transport.max_conns_per_host 不能为负数") } diff --git a/internal/config/validate_test.go b/internal/config/validate_test.go index 62eb729..8313a7d 100644 --- a/internal/config/validate_test.go +++ b/internal/config/validate_test.go @@ -1048,8 +1048,7 @@ func TestValidatePerformance(t *testing.T) { name: "有效的 transport 配置(零值)", config: PerformanceConfig{ Transport: TransportConfig{ - MaxIdleConnsPerHost: 0, - MaxConnsPerHost: 0, + MaxConnsPerHost: 0, }, }, wantErr: false, @@ -1058,22 +1057,11 @@ func TestValidatePerformance(t *testing.T) { name: "有效的 transport 配置(正值)", config: PerformanceConfig{ Transport: TransportConfig{ - MaxIdleConnsPerHost: 10, - MaxConnsPerHost: 50, + MaxConnsPerHost: 50, }, }, wantErr: false, }, - { - name: "MaxIdleConnsPerHost 负数", - config: PerformanceConfig{ - Transport: TransportConfig{ - MaxIdleConnsPerHost: -1, - }, - }, - wantErr: true, - errMsg: "transport.max_idle_conns_per_host 不能为负数", - }, { name: "MaxConnsPerHost 负数", config: PerformanceConfig{ @@ -1084,17 +1072,6 @@ func TestValidatePerformance(t *testing.T) { wantErr: true, errMsg: "transport.max_conns_per_host 不能为负数", }, - { - name: "多个 transport 字段为负", - config: PerformanceConfig{ - Transport: TransportConfig{ - MaxIdleConnsPerHost: -2, - MaxConnsPerHost: -3, - }, - }, - wantErr: true, - errMsg: "transport.max_idle_conns_per_host 不能为负数", - }, } for _, tt := range tests {