限速器快速上手
Pingora 提供内置的 限速器(RateLimiter) 功能,可以对请求速率进行控制,保护上游服务并提升系统稳定性。
配置限速器
在配置文件中启用限速器:
ratelimiter:
enable: true
requests_per_second: 100
burst: 20
`
enable:是否启用限速器requests_per_second:每秒允许的请求数burst:允许短时间内的请求突发量
编程示例
在自定义过滤器中使用限速器:
use pingora::ratelimiter::RateLimiter;
fn rate_limit_filter(req: &Request, ctx: &mut Context) -> Result<(), Error> {
let limiter = ctx.get::<RateLimiter>("ratelimiter").unwrap();
if !limiter.try_acquire() {
return Err(Error::new("请求过多,请稍后重试", 429));
}
Ok(())
}
try_acquire():尝试获取一次请求许可- 超过速率时返回 429 错误(Too Many Requests)
使用场景
- 保护上游服务:避免瞬间高并发导致上游压力过大
- 控制 API 调用频率:对公共接口进行速率限制
- 防止滥用:防止恶意请求或爬虫攻击
高级用法
- 按客户端 IP 限速:为每个 IP 创建独立限速器
- 动态调整速率:根据系统负载或时间段调整
requests_per_second - 与日志结合:记录超限请求,便于分析访问模式
通过限速器,Pingora 可以轻松实现请求速率控制,保障服务稳定性和公平性,是高并发代理环境下的必要工具。
相关内容
- 高级主题 (WIP) 探索 Pingora 的高级特性,包括内部机制、异步运行时、线程模型和自定义扩展。
- 后台服务 学习如何在 Pingora 中配置和运行后台服务,包括定时任务、异步执行和守护进程管理。
- 异步上下文中的阻塞代码 学习如何在 Pingora 异步运行时中处理阻塞代码,确保高并发请求环境下的性能和稳定性。
- 构建 HTTP 代理 学习如何使用 Pingora 构建 HTTP 代理服务,包括基本请求转发、上游配置和自定义过滤器。
- 配置文件 了解 Pingora 的配置文件结构、主要参数及其作用,学习如何为不同场景编写高效、清晰的配置。
- 连接池与复用 学习如何在 Pingora 中使用连接池和连接复用,提高代理服务的性能和资源利用率。