主题
限速器快速上手
Pingora 提供内置的 限速器(RateLimiter) 功能,可以对请求速率进行控制,保护上游服务并提升系统稳定性。
配置限速器
在配置文件中启用限速器:
yaml
ratelimiter:
enable: true
requests_per_second: 100
burst: 20
enable
:是否启用限速器requests_per_second
:每秒允许的请求数burst
:允许短时间内的请求突发量
编程示例
在自定义过滤器中使用限速器:
rust
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 可以轻松实现请求速率控制,保障服务稳定性和公平性,是高并发代理环境下的必要工具。