跳到主要内容

流量控制及熔断

随着分布式系统、微服务架构和云计算的普及,系统间的依赖关系变得越来越复杂。在这种环境下,服务间的调用可能因为各种原因出现问题:

  1. 突发流量:短时间内大量请求涌入,超出服务处理能力
  2. 依赖服务故障:下游服务响应变慢或不可用
  3. 资源竞争:多个服务竞争有限资源(如数据库连接、线程池等)
  4. 网络问题:网络延迟、丢包等导致通信异常

这些问题如果不加控制,可能导致:

  • 系统资源耗尽
  • 级联故障(一个服务的故障引发整个系统崩溃)
  • 服务雪崩效应

一、流量控制​

流量控制是指通过一定的策略限制系统或服务的请求处理速率,使其保持在可承受的范围内,防止系统因过载而崩溃。在系统资源有限的情况下,合理分配和限制请求处理速率,确保系统稳定运行。

1. API流控​

  • 流控

流控控制针对API级别的限制。规则可选次数控制、流量控制,时间维度可选分钟、小时、天。

例如:

以次数控制,一分钟三次为例,API在每分钟前三次请求时能正常调用,第四次时响应429状态码,超出流控阈值。

使用示例:

  1. 新建流控规则 新建流控规则图示
  2. 规则新建完成后,在首页通过这两种方式进入API注册 API注册入口图示
  3. 在API注册配置页面流控策略中选择刚才新建的流控条目 选择流控策略图示
  4. 完成当前API的保存注册,之后到API注册审批,通过之前注册的API API注册审批图示
  5. 在API运行管理页面找到刚才的API,通过测试、启动操作后调用API API启动图示
  6. 调用启动的API,当调用次数超过流控策略限制时,会限制API的调用。 调用API验证图示
  • 服务降级

在API流控的基础上在做细微的规则控制。

例如:

流量策略:3次/分钟

开启服务降级开关,降级策略为:达到阈值后,降级百分比67%,降级持续时间3分钟。

如果1分钟内连续请求3次,那么:

第1次请求:正常响应

第2次请求:正常响应

第3次请求:正常响应

第4次请求:被拒绝,触发降级策略,降级持续时间为3分钟,从下一分钟开始,在此期间每分钟最多响应2次请求。

3分钟之后,恢复正常:每分钟最多响应3次请求

使用示例:

  1. 在已经有流控的API上打开服务降级按钮。
降级1图示
  1. 输入降级百分比、降级持续时间并保存。
降级2图示

2. 应用流控​

  • 订阅

在API上可以进行应用订阅操作,应用的流控是基于订阅操作完成,用于限制某个应用对于API的有限次调用。

使用前置条件:

  • 已成功部署一个API
  • 新建一个API门户
  • 注册门户用户并通过审批
  • 复制门户URL,在浏览器中打开并登录门户用户

使用示例:

  1. 在规则管理中新建应用级别的流控规则
应用0图示
  1. 门户登录成功后,在应用系统管理中新建应用。
应用1图示
  1. 返回API检索,勾选需要订阅的API点击订阅
应用2图示
  1. 选择需要订阅的应用系统与流控策略点击提交订阅请求
应用3图示
  1. 在API订阅审批中通过刚才提交的订阅请求
应用4图示
  1. 审批通过以后返回应用系统管理找到刚才订阅的应用,点击Token按钮,获取应用调用时需要的token
应用5图示
  1. 携带应用token调用api
应用6图示

二、熔断​

熔断是指通过一系列阈值和策略自动限制对上游服务的请求,当检测到上游服务出现异常(如错误率升高、延迟增加或资源耗尽)时,会主动切断或限制对该服务的请求流量,防止故障扩散。

1. 使用示例​

  1. 在API运行管理中点击API名称,进入API详情 API详情入口图示
  2. 切换至高级配置,修改熔断配置 熔断配置图示

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**

    )

    • 新请求会被加入等待队列,若队列已满,同样触发熔断。