AWS 大型机现代化服务(托管运行时环境体验)不再向新客户开放。有关类似于 AWS 大型机现代化服务(托管运行时环境体验)的功能,请浏览 AWS 大型机现代化服务(自我管理体验)。现有客户可以继续正常使用该服务。有关更多信息,请参阅AWS 大型机现代化可用性变更。
本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
为 AWS Blu Age 运行时配置速率限制
AWS Blu Age Runtime 包括内置的速率限制功能,可保护 gapwalk 应用程序免受过多请求和潜在滥用的侵害。速率限制系统使用 Token Bucket 算法来提供突发容量和持续速率限制。
速率限制概述
速率限制系统提供以下功能:
- 代币桶算法
-
允许高达配置的突发容量的突发流量
根据每分钟的请求量以稳定的速度充值代币
在不阻塞合法流量峰值的情况下提供平滑的速率限制
- 客户识别
-
通过 IP 地址识别客户端,支持代理服务器
支架 X-Forwarded-For和 X-Real-IP标题
处理负载均衡器和反向代理方案
- 自动内存管理
-
自动清理过期的速率限制存储桶
可配置的清理间隔和过期时间
防止长时间运行的应用程序出现内存泄漏
- HTTP 集成
-
超过限制时返回 HTTP 429(请求过多)
在响应中包含标准速率限制标题
为客户提供重试信息
配置属性
在application-main.yaml文件中配置速率限制:
gapwalk: ratelimiting: enabled: true # Enable/disable rate limiting requestsPerMinute: 1000 # Sustained rate limit per minute burstCapacity: 1500 # Maximum burst requests allowed includeHeaders: true # Include X-RateLimit-* headers cleanupIntervalMinutes: 5 # Cleanup interval for expired buckets bucketExpiryHours: 1 # Hours after which unused buckets expire errorMessage: "Too many requests. Try again later." # Custom error message whitelistIps: "" # Comma-separated IPs to bypass limiting perEndpointLimiting: false # Apply limits per endpoint (not implemented)
属性描述
- 已启用
-
用于启用或禁用速率限制功能的主开关。默认值:
false - requestsPerMinute
-
持续速率限制每分钟允许的请求数。这代表代币充值率。默认值:
1000 - 爆发容量
-
在应用速率限制之前,突发中允许的最大请求数。应高于
requestsPerMinute以允许流量激增。默认值:1500 - 包含标题
-
是否在 HTTP 响应中包含标准速率限制标头 (
X-RateLimit-LimitX-RateLimit-Remaining,,X-RateLimit-Reset)。默认值:true - cleanupIntervalMinutes
-
自动清理过期速率限制存储桶之间的间隔(以分钟为单位)。有助于防止内存泄漏。默认值:
5 - bucketExpiryHours
-
以小时为单位的时间,在此之后未使用的速率限制存储桶被视为已过期且有资格进行清理。默认值:
1 - errorMessage
-
超过速率限制时,JSON 响应中返回的自定义错误消息。默认值:
"Too many requests. Try again later." - Whitelis提示
-
以逗号分隔的 IP 地址列表,这些地址完全绕过速率限制。对运行状况检查或可信系统很有用。默认值:
empty - perEndpointLimiting
-
是否对每个端点应用单独的速率限制,而不是仅对每个客户端应用速率限制。目前尚未实施。默认值:
false
启用速率限制
要使用默认设置启用速率限制,请执行以下操作:
gapwalk: ratelimiting: enabled: true
客户识别
速率限制系统使用以下优先级顺序识别客户端:
X-Forwarded-For 标头(如果用逗号分隔,则第一个 IP)
X-Real-IP 标题
来自 HTTP 请求的@@ 远程地址
这样可以确保在应用程序落后时正确识别客户端:
负载均衡器
反向代理
CDNs
API 网关
客户识别示例
# Direct connection Client IP: 192.168.1.100 # Behind load balancer with X-Forwarded-For X-Forwarded-For: 203.0.113.45, 192.168.1.100 Client IP: 203.0.113.45 (first IP used) # Behind reverse proxy with X-Real-IP X-Real-IP: 203.0.113.45 Client IP: 203.0.113.45
速率限制标题
启用后includeHeaders,以下标头将添加到 HTTP 响应中:
- X-RateLimit-极限
-
客户端的速率限制上限(每分钟请求数)
- X-RateLimit-剩余
-
当前速率限制窗口中剩余的请求数
- X-RateLimit-重置
-
速率限制窗口重置的时间(Unix 时间戳)
响应标头示例
X-RateLimit-Limit: 1000 X-RateLimit-Remaining: 847 X-RateLimit-Reset: 1640995200
超出响应速率限制
当超过速率限制时,系统会返回:
- HTTP 状态
429 请求过多
- Content-Type
application/json
- Retry-After
重试前等待的秒数
{ "error": "Rate limit exceeded", "message": "Too many requests. Try again later.", "retryAfter": 60, "timestamp": 1640995140000 }
内存管理
速率限制系统会自动管理内存,以防止长时间运行的应用程序出现泄漏:
- 自动清理
-
每
cleanupIntervalMinutes分钟运行一次移除长达数小时未使用的
bucketExpiryHours存储桶记录清理活动以供监视
- 内存效率
-
使用并发数据结构确保线程安全
延迟创建存储桶(仅在需要时)
高效的代币桶实现
监视清理活动
检查日志中是否有清理消息:
INFO RateLimitingService - Cleaned up 15 expired rate limiting buckets