流量控制规则
1.可以通过调用FlowRuleManager.loadRules()方法来用硬编码的方式定义流量控制规则。
2.流量规则FlowRule定义中的重要属性如下:
| Field | 说明 | 默认值 |
|---|---|---|
| resource | 资源名,资源名是限流规则的作用对象 | |
| count | 限流阈值 | |
| grade | 限流阈值类型,QPS模式(1),或并发线程数模式(0) | QPS模式 |
| limitAPP | 流控针对的调用来源 | default,代表不区分调用来源 |
| strategy | 调用关系限流策略:直接、链路、关联 | 根据资源本身(直接) |
| controllBehavior | 流控效果(直接拒绝/WarmUP/匀速+排队等待),不支持按调用关系限流 | 直接拒绝 |
| clusterMode | 是否集群限流 | 否 |
1.调用关系策略
直接:直接对某个资源的访问进行限流
场景示例:假设有一个资源A,我们设置了直接策略,对该资源的QPS(每秒请求数)进行限制,当超过设定的阈值时,后续的请求将被拒绝或降级处理。
链路:链路策略用于对调用链路中的资源进行限流控制。它不仅关注单个资源,还关注调用链中的关系,尤其是入口资源到目标资源的调用路径。通常用于控制从某个入口资源开始到特定资源的调用流量。
场景示例:假设有一个入口资源X,通过调用链依次调用A,B,C。我们可以设置链路策略,对从入口资源到资源A的调用进行限流。
关联:关联策略用于对相关联的资源进行限流,即根据一个资源的访问情况,控制另一个资源的流量。常用于有依赖关系的资源,或者需要根据某个资源的状态来调节其他资源的访问流量。
场景示例:假设资源A和资源B有关联性。我们可以设置关联策略,当资源A的QPS达到一定阈值时,对资源B的访问进行限流。
2.流控效果
直接拒绝: 直接拒绝是一种最简单的流控效果,当流量超过预设阈值时,直接拒绝后续的请求。
warmup: 预热策略时通过限制初始阶段的流量,逐步提升允许的请求速率,直到达到最大阈值。主要用于系统刚启动时,避免瞬时高流量冲击系统,确保系统能够平稳过渡到高负载状态。
匀速排队: 匀速排队策略是通过排队的方式控制请求速率,确保请求以恒定速率进入系统。适用于对延迟容忍度较高,但需要控制流量平稳进入系统的场景。