教程 pingora tutorial

连接池与复用

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 会被回收
  • 失败连接会被标记为不可用,并尝试切换到其他上游

高级技巧

  1. 合理配置连接池大小:根据请求量和上游能力调整 max_connections
  2. 启用 keep-alive:长连接可减少 TCP 握手次数,提高性能
  3. 监控连接池状态:结合 Prometheus 指标监控活跃连接数和空闲连接数
  4. 错误重试与切换:连接池会自动处理失败连接,避免请求中断

通过 Pingora 的连接池与复用机制,可以显著提升代理的性能和可靠性,保证高并发请求环境下的稳定运行。