# 连接池与复用

URL: https://caijiao.org/pingora/connection_pooling_and_reuse
Source: docs/pingora/connection_pooling_and_reuse.md
Description: 学习如何在 Pingora 中使用连接池和连接复用，提高代理服务的性能和资源利用率。

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 的连接池与复用机制，可以显著提升代理的性能和可靠性，保证高并发请求环境下的稳定运行。
