外观
并发限制 ⚡
网关支持对请求进行并发限制,防止系统过载,提高服务稳定性。
功能特性
- 灵活配置:支持启用/禁用并发限制
- 许可证控制:许可证可以限制最大并发数上限
- 队列机制:超出并发限制的请求会进入队列等待
- 超时处理:队列等待超时后会拒绝请求
- 自定义响应:可配置拒绝请求时的状态码和消息
配置说明
在 config.yaml
中的 gateway.concurrency
部分配置并发限制:
yaml
gateway:
# 并发限制配置
concurrency:
enabled: true # 是否启用并发限制
max-concurrent: 1000 # 最大并发数,0表示不限制
queue-timeout: "3m" # 队列等待超时时间
reject-status-code: 503 # 拒绝请求时返回的状态码
reject-message: "Service temporarily unavailable due to high concurrency" # 拒绝请求时返回的消息
reject-content-type: "text/plain; charset=utf-8" # 拒绝请求时返回的内容类型
配置参数详解
参数 | 类型 | 默认值 | 说明 |
---|---|---|---|
enabled | boolean | false | 是否启用并发限制功能 |
max-concurrent | int | 0 | 最大并发数,0表示不限制 |
queue-timeout | string | "3m" | 队列等待超时时间,支持时间格式如:30s , 1m , 5m |
reject-status-code | int | 503 | 拒绝请求时返回的HTTP状态码 |
reject-message | string | "Service temporarily unavailable due to high concurrency" | 拒绝请求时返回的消息内容 |
reject-content-type | string | "text/plain; charset=utf-8" | 拒绝请求时返回的内容类型 |
工作原理
- 请求到达:当请求到达网关时,首先检查是否启用了并发限制
- 并发检查:如果当前并发数未达到限制,直接处理请求
- 队列等待:如果达到并发限制,请求进入队列等待
- 超时处理:如果等待时间超过
queue-timeout
,返回拒绝响应 - 请求完成:请求处理完成后,释放并发槽位
许可证限制
网关的许可证可能包含并发数限制,此时:
- 许可证优先:如果许可证设置了并发限制,配置的并发数不能超过许可证限制
- 自动调整:配置的并发数超过许可证限制时,会自动调整为许可证限制值
- 强制启用:即使配置禁用了并发限制,许可证有限制时也会强制启用
日志示例
# 配置超过许可证限制
WARN 配置的最大并发数(2000)超过许可证限制(1000),已调整为许可证限制值
# 配置未设置但许可证有限制
INFO 配置未设置并发限制,使用许可证限制: 1000
# 配置禁用但许可证要求限制
WARN 配置禁用了并发限制,但许可证要求限制并发数为: 1000
使用示例
基础配置
yaml
gateway:
concurrency:
enabled: true
max-concurrent: 500
queue-timeout: "30s"
高并发场景
yaml
gateway:
concurrency:
enabled: true
max-concurrent: 2000
queue-timeout: "1m"
reject-status-code: 429
reject-message: "Too Many Requests"
开发环境(禁用限制)
yaml
gateway:
concurrency:
enabled: false
监控指标
当启用监控功能时,可以观察以下指标:
- 当前并发数:实时并发请求数量
- 队列长度:等待处理的请求数量
- 拒绝请求数:因并发限制被拒绝的请求数量
- 平均等待时间:请求在队列中的平均等待时间
性能建议
并发数设置
- CPU密集型应用:建议设置为 CPU 核心数的 1-2 倍
- IO密集型应用:可以设置更高的并发数
- 内存限制:考虑每个请求的内存占用
超时时间设置
- 快速响应:对于要求快速响应的API,设置较短的超时时间(如 10s-30s)
- 批处理:对于批处理类请求,可以设置较长的超时时间(如 5m-10m)
状态码选择
- 503 Service Unavailable:服务暂时不可用(默认)
- 429 Too Many Requests:请求过多,建议客户端重试
- 500 Internal Server Error:内部服务器错误
故障排查
常见问题
请求被频繁拒绝
- 检查并发数设置是否过低
- 观察实际请求量和处理能力
- 考虑增加并发数或优化后端服务
队列等待时间过长
- 检查后端服务响应时间
- 考虑减少超时时间或增加并发数
- 优化后端服务性能
许可证限制冲突
- 检查许可证并发限制
- 联系技术支持升级许可证
- 调整配置以符合许可证限制
日志级别
建议在生产环境中将日志级别设置为 info
或 warn
,以便观察并发限制的工作状态。
yaml
log:
level: info
注意事项
- 资源消耗:并发限制会消耗一定的内存和CPU资源
- 配置更新:支持通过Nacos动态更新配置,无需重启服务
- 许可证限制:许可证限制具有最高优先级,无法通过配置绕过
- 监控重要性:建议启用监控功能,实时观察并发状态
- 测试验证:在生产环境使用前,建议在测试环境进行充分验证