主题
连接池与复用
Pingora 提供内置的 连接池管理机制,用于维护与上游服务器的持久连接,实现高性能的请求转发。
连接池优势
- 减少连接建立开销:复用 TCP/TLS 连接,避免频繁建立和关闭
- 提高请求吞吐量:同时处理更多请求
- 支持负载均衡和故障切换:连接池自动管理可用上游
基本配置
在配置文件中为上游服务器设置连接池参数:
yaml
proxy:
upstreams:
- name: backend
servers:
- "127.0.0.1:8000"
- "127.0.0.1:8001"
max_connections: 50
idle_timeout: 30s
max_connections
:最大并发连接数idle_timeout
:空闲连接超时时间
连接获取与复用示例
rust
let peer = Peer::new("127.0.0.1:8000");
// 从连接池获取可用连接
let mut conn = peer.get_connection()?;
// 使用连接发送请求
let resp = conn.send_request(req).await?;
// 连接自动返回池中以便复用
- Pingora 会自动管理连接的生命周期
- 空闲连接超过
idle_timeout
会被回收 - 失败连接会被标记为不可用,并尝试切换到其他上游
高级技巧
- 合理配置连接池大小:根据请求量和上游能力调整
max_connections
- 启用 keep-alive:长连接可减少 TCP 握手次数,提高性能
- 监控连接池状态:结合 Prometheus 指标监控活跃连接数和空闲连接数
- 错误重试与切换:连接池会自动处理失败连接,避免请求中断
通过 Pingora 的连接池与复用机制,可以显著提升代理的性能和可靠性,保证高并发请求环境下的稳定运行。