故障与自动切换
在代理场景中,上游服务器可能出现故障或不可用。
Pingora 提供 自动故障检测与切换机制,确保服务稳定性。
故障检测
Pingora 会监控上游连接状态:
- 请求失败或超时
- TCP/TLS 连接断开
- HTTP 错误响应(如 5xx)
出现上述情况时,Peer 会将该上游标记为不可用。
自动切换(Failover)
当上游不可用时:
- Pingora 会自动选择其他可用上游进行请求转发
- 可配置重试次数和回退策略
- 失败连接会被短暂隔离,避免频繁尝试
配置示例
proxy:
upstreams:
- name: backend
servers:
- "127.0.0.1:8000"
- "127.0.0.1:8001"
max_connections: 50
retry_policy:
retries: 3
backoff: 100ms
`
retries:失败重试次数backoff:重试间隔,防止瞬间过载
高可用策略
- 多上游备份:至少配置两个或以上上游
- 动态权重:根据响应速度动态调整负载分配
- 健康检查:定期检测上游状态,自动恢复已标记不可用的服务器
编程示例
fn handle_request(req: &Request, ctx: &mut Context) -> Result<Response, Error> {
let peer = Peer::select("backend")?;
match peer.send_request(req) {
Ok(resp) => Ok(resp),
Err(err) => {
error!("请求上游失败: {:?}", err);
// 尝试切换到备用上游
let backup_peer = Peer::select_backup("backend")?;
backup_peer.send_request(req)
}
}
}
通过合理配置故障检测和自动切换,Pingora 能够在上游服务器出现故障时继续提供服务,提高代理系统的可用性和稳定性。
相关内容
- 高级主题 (WIP) 探索 Pingora 的高级特性,包括内部机制、异步运行时、线程模型和自定义扩展。
- 后台服务 学习如何在 Pingora 中配置和运行后台服务,包括定时任务、异步执行和守护进程管理。
- 异步上下文中的阻塞代码 学习如何在 Pingora 异步运行时中处理阻塞代码,确保高并发请求环境下的性能和稳定性。
- 构建 HTTP 代理 学习如何使用 Pingora 构建 HTTP 代理服务,包括基本请求转发、上游配置和自定义过滤器。
- 配置文件 了解 Pingora 的配置文件结构、主要参数及其作用,学习如何为不同场景编写高效、清晰的配置。
- 连接池与复用 学习如何在 Pingora 中使用连接池和连接复用,提高代理服务的性能和资源利用率。