# 上游连接管理（Peer）

URL: https://caijiao.org/pingora/peer_how_to_connect_to_upstream
Source: docs/pingora/peer_how_to_connect_to_upstream.md
Description: 学习如何在 Pingora 中管理上游服务器连接（Peer），实现负载均衡、连接复用与故障切换。

Pingora 支持通过 **Peer** 管理与上游服务器的连接。  
正确配置和管理 Peer 可以提高代理性能、稳定性和可用性。

## 什么是 Peer

- Peer 代表一个上游服务器或服务器组  
- 负责处理客户端请求的转发  
- 提供连接池、复用和故障恢复机制

## 配置上游服务器

在配置文件中定义 Peer：

```yaml
proxy:
  upstreams:
    - name: backend
      servers:
        - "127.0.0.1:8000"
        - "127.0.0.1:8001"
      max_connections: 50
      retry_policy:
        retries: 3
        backoff: 100ms
````

### 参数说明

| 参数                | 说明               |
| ----------------- | ---------------- |
| `name`            | 上游服务器名称          |
| `servers`         | 上游服务器地址列表        |
| `max_connections` | 最大并发连接数          |
| `retry_policy`    | 失败重试策略，包括重试次数和间隔 |

## 连接复用

Pingora 的 Peer 自动管理连接池，支持长连接复用：

```rust
let peer = Peer::new("127.0.0.1:8000");
peer.get_connection()?; // 从连接池获取或新建
```

- 减少频繁建立 TCP/TLS 连接的开销
- 提高请求处理效率
- 支持 HTTP/1.1 和 HTTP/2 多路复用

## 负载均衡策略

Pingora 提供多种上游负载均衡策略：

- **轮询（Round-Robin）**：均匀分配请求
- **最少连接（Least Connections）**：优先发送到活跃连接最少的服务器
- **自定义策略**：可通过过滤器或回调实现

## 故障处理与切换

当某个 Peer 失败或不可用时：

1. 标记该 Peer 为不可用
2. 根据重试策略选择其他可用 Peer
3. 自动记录失败次数，支持恢复检测

---

通过合理配置 Peer 和连接池，Pingora 可以高效、可靠地管理上游服务器连接，实现稳定的代理服务和灵活的负载均衡策略。
