流量控制及熔断
随着分布式系统、微服务架构和云计算的普及,系统间的依赖关系变得越来越复杂。在这种环境下,服务间的调用可能因为各种原因出现问题:
- 突发流量:短时间内大量请求涌入,超出服务处理能力
- 依赖服务故障:下游服务响应变慢或不可用
- 资源竞争:多个服务竞争有限资源(如数据库连接、线程池等)
- 网络问题:网络延迟、丢包等导致通信异常
这些问题如果不加控制,可能导致:
- 系统资源耗尽
- 级联故障(一个服务的故障引发整个系统崩溃)
- 服务雪崩效应
一、流量控制
流量控制是指通过一定的策略限制系统或服务的请求处理速率,使其保持在可承受的范围内,防止系统因过载而崩溃。在系统资源有限的情况下,合理分配和限制请求处理速率,确保系统稳定运行。
1. API流控
- 流控
流控控制针对API级别的限制。规则可选次数控制、流量控制,时间维度可选分钟、小时、天。
例如:
以次数控制,一分钟三次为例,API在每分钟前三次请求时能正常调用,第四次时响应429状态码,超出流控阈值。
使用示例:
- 新建流控规则

- 规则新建完成后,在首页通过这两种方式进入API注册

- 在API注册配置页面流控策略中选择刚才新建的流控条目

- 完成当前API的保存注册,之后到API注册审批,通过之前注册的API

- 在API运行管理页面找到刚才的API,通过测试、启动操作后调用API

- 调用启动的API,当调用次数超过流控策略限制时,会限制API的调用。

- 服务降级
在API流控的基础上在做细微的规则控制。
例如:
流量策略:3次/分钟
开启服务降级开关,降级策略为:达到阈值后,降级百分比67%,降级持续时间3分钟。
如果1分钟内连续请求3次,那么:
第1次请求:正常响应
第2次请求:正常响应
第3次请求:正常响应
第4次请求:被拒绝,触发降级策略,降级持续时间为3分钟,从下一分钟开始,在此期间每分钟最多响应2次请求。
3分钟之后,恢复正常:每分钟最多响应3次请求
使用示例:
- 在已经有流控的API上打开服务降级按钮。
- 输入降级百分比、降级持续时间并保存。
2. 应用流控
- 订阅
在API上可以进行应用订阅操作,应用的流控是基于订阅操作完成,用于限制某个应用对于API的有限次调用。
使用前置条件:
- 已成功部署一个API
- 新建一个API门户
- 注册门户用户并通过审批
- 复制门户URL,在浏览器中打开并登录门户用户
使用示例:
- 在规则管理中新建应用级别的流控规则
- 门户登录成功后,在应用系统管理中新建应用。
- 返回API检索,勾选需要订阅的API点击订阅
- 选择需要订阅的应用系统与流控策略点击提交订阅请求
- 在API订阅审批中通过刚才提交的订阅请求
- 审批通过以后返回应用系统管理找到刚才订阅的应用,点击Token按钮,获取应用调用时需要的token
- 携带应用token调用api
二、熔断
熔断是指通过一系列阈值和策略自动限制对上游服务的请求,当检测到上游服务出现异常(如错误率升高、延迟增加或资源耗尽)时,会主动切断或限制对该服务的请求流量,防止故障扩散。
1. 使用示例
- 在API运行管理中点击API名称,进入API详情

- 切换至高级配置,修改熔断配置

2. 参数说明
最大连接数:
表示允许同时与上游服务建立的 活跃 TCP 连接的最大数量。当并发连接数超过该阈值时,会触发熔断逻辑,拒绝新连接的建立。
最大待处理数:
表示 等待队列的最大长度,即将请求转发到上游服务之前,允许在等待队列中暂存的请求数量上限。
最大并行请求数:
表示 同时活跃的最大请求数,即在任意时刻,允许向上游服务转发的并发请求数量上限。当并发请求数超过该阈值时,触发熔断,拒绝新请求。
3. 参数对比与协同
| 参数 | 层级 | 适用协议 | 典型场景 |
|---|---|---|---|
| 最大连接数 | TCP 连接 | 所有协议 | HTTP/1.x、数据库连接等 |
| 最大待处理数 | HTTP 队列 | HTTP/gRPC | 突发流量缓冲,避免直接拒绝 |
| 最大并行请求数 | HTTP 请求 | HTTP/2、gRPC | 多路复用下的请求级并发控制 |
4. 触发逻辑
- HTTP/1.1:每个请求独占连接,
最大连接数与最大并行请求数效果相同。 - HTTP/2:单个连接处理多请求,
最大并行请求数限制总并发数,最大连接数限制连接数。
5. 场景
-
场景 1
:上游服务当前活跃连接数(最大连接数)为 100。
- 新请求尝试建立第 101 个连接时,会直接拒绝,触发熔断。
-
场景 2
:上游服务活跃连接数(最大连接数)为 90,但已有 50 个请求在等待队列中(
最大待处理数**=50**)
- 新请求会被加入等待队列,若队列已满,同样触发熔断。