“服务器 gateway 如何限流”通常可以从网关层(API Gateway)限流和后端服务限流两个层面来看。下面按常见方案 + 实现方式 + 示例系统说明。
一般从以下几个维度限流:
http {
limit_req_zone $binary_remote_addr zone=ip_limit:10m rate=10r/s;
server {
location /api/ {
limit_req zone=ip_limit burst=20 nodelay;
}
}
}
rate=10r/s:每秒 10 个burst=20:允许突发nodelay:不排队直接拒绝spring:
cloud:
gateway:
routes:
- id: user-service
uri: lb://user-service
predicates:
- Path=/user/**
filters:
- name: RequestRateLimiter
args:
redis-rate-limiter.replenishRate: 10
redis-rate-limiter.burstCapacity: 20
key-resolver: "#{@userKeyResolver}"
@Bean
KeyResolver userKeyResolver() {
return exchange -> Mono.just(
exchange.getRequest().getHeaders().getFirst("X-User-Id")
);
}
✅ 支持:
plugins:
- name: rate-limiting
config:
second: 10
minute: 500
policy: redis
支持:
{
"plugins": {
"limit-req": {
"rate": 10,
"burst": 20,
"key": "remote_addr"
}
}
}
@SentinelResource(value = "getUser", blockHandler = "block")
public User getUser() {
return userService.get();
}
支持:
RateLimiter limiter = RateLimiter.create(10);
if (limiter.tryAcquire()) {
// 处理请求
}
⚠️ 不适合分布式
✅ 必须使用共享存储:
❌ 单机限流 ≠ 集群限流
Client
↓
CDN / LB
↓
API Gateway(限流 + 鉴权)
↓
Service Mesh / 微服务
↓
Sentinel(兜底限流)
429 Too Many RequestsRetry-After| 场景 | 推荐 |
|---|---|
| 简单 IP 限流 | Nginx |
| 微服务网关 | Spring Cloud Gateway |
| 高性能网关 | APISIX / Kong |
| Java 服务保护 | Sentinel |
| 突发流量 | 令牌桶 |
如果你能告诉我:
我可以直接给你可落地的配置示例。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。