SAE可以通过AHAS监控应用或服务流量的QPS指标,当指标达到流控规则设定的阈值时立即拦截流量,避免应用被瞬时的流量高峰冲垮,从而保障应用的高可用性。本文介绍配置流控规则的操作步骤,以及三种常用场景的流控配置规则。

前提条件

请确保您的Java应用已开启限流降级功能,详情请参见设置限流降级

操作步骤

  1. 登录SAE控制台
  2. 在左侧导航栏单击应用列表,在应用列表页面上方选择地域,单击具体应用名称。
  3. 在左侧导航栏中选择限流降级(Java) > 规则管理
  4. 规则管理页面,单击流控规则,在流控规则页签,单击新增流控规则
  5. 新增流控规则对话框,设置参数,单击新建
    参数说明如下:
    • 单机模式:关闭集群流控的状态。

      flow_control1
      参数 描述
      接口名称 待流控的资源名称。
      来源应用 该规则针对的来源应用,默认来源应用设为default,代表不区分来源应用。
      • 若是Dubbo服务,请填写对应调用方的Dubbo applicationName,注意调用方也需要接入Sentinel。
      • 若是Web服务,请参见扩展接口
      • 若是通过注解、自定义埋点,请参见常用类及其方法,ContextUtil只在调用链入口生效,即首个埋点生效。
      • 当前账号下已经接入了流量防护的其他应用,填写default即表示不特殊区分。
      注意 来源数目不宜过多,200个以内内存使用量可控,过多则会影响性能。
      流量示意图
      统计维度 选择资源调用关系进行流控。
      • 当前接口:直接控制来自来源应用中调用来源的访问流量,如果来源应用default则不区分调用来源。通常应用于流量匀速通过的场景,详情请参见常用场景1
      • 关联接口:控制当前资源的关联资源的流量。通常应用于资源争抢时,留足资源给优先级高接口的场景,详情请参见常用场景2
      • 链路入口:控制该资源所在的调用链路的入口流量。选择链路入口后需要继续配置入口资源,即该调用链路入口的上下文名称。通常应用于预热启动避免大流量冲击的场景,详情请参见常用场景3
      单机QPS 阈值 触发对流控接口的统计维度对象的QPS阈值。
      流控效果 选择流控方式来处理被拦截的流量。
      • 快速失败:达到阈值时,立即拦截请求。按照应用系统设置中的适配模块配置信息,进行内容返回。
      • 预热启动:需设置具体的预热时间。详情请参见Warm Up(冷启动)

        如果系统在此之前长期处于空闲的状态,当流量突然增大的时候,该方式会让处理请求的速率缓慢增加,经过设置的预热时间以后,到达系统处理请求速率的设定值。默认会从设置的QPS阈值的1/3开始慢慢往上增加至设置的QPS值,多余请求会按照快速失败处理。

      • 排队等待:请求匀速通过,允许排队等待,通常用于请求调用削峰填谷等场景。需设置具体的超时时间,达到超时时间后请求会快速失败。 详情请参见削峰填谷
      是否开启 打开开关表示启用该规则,关闭开关表示禁用该规则。开关修改之后会立即生效。
    • 集群流控模式:开启集群流控的状态。

      flow_control_cluster
      参数 描述
      是否集群流控 开启集群流控,对集群内此资源的调用总量进行限制。
      接口集群总QPS 该接口预估的集群最大QPS,表示最大流量,用于为Token Server自动分配提供参考,当流量超出该值的请求会退化到单机模式。
      阈值模式 可选择设置集群阈值单机QPS阈值
      • 集群阈值:设置的阈值等同于整个集群的总阈值。
      • 单机QPS阈值:设置的阈值等同于单机能够承受的限额,Token Server会根据连接数来计算总的阈值。
      失败退化策略 当出现连接失败、通信失败或Token Server不可用等情况时,流控规则是退化到单机限流的模式或是直接通过忽略失败情况。
      • 退化到单机限流:当出现失败的情况时,退化到根据的单机阈值来进行流控。需要设置退化单机阈值,代表单机的兜底阈值。
      • 直接通过:当出现失败的情况时,忽略失败情形,直接通过。

常用场景1 削峰填谷,使流量匀速通过

请求流量具有波峰波谷的特点,流控的原理是将前面的峰值流量延迟(排队时长)到后面再处理,既能最大化满足所有请求,又能保证用户体验。详情请参见削峰填谷

新建流控规则对话框中配置如下规则信息。

  • 统计维度选择当前接口
  • 流控效果选择排队等待
  • 配置匀速模式下请求单机QPS阈值为5。
  • 等待时长为5s。

系统则每200 ms处理一条请求,多余的处理任务将排队;同时设置了等待时长为5s,则预计排队时长超过5s的处理任务将快速失败,直接返回默认流控信息,如文本、静态页面等。

flow_control_Peak peel

常用场景2 当资源争抢时,需留足资源给优先级高的接口

read_dbwrite_db这两个资源分别代表数据库读写。为保证提交的数据不丢失,write_db接口优先级更高。当写库操作过于频繁时,读数据的请求会被限流。详情请参见关联限流

新建流控规则对话框中配置如下规则信息。

  • 统计维度选择关联接口
  • 流控效果选择快速失败
  • 并发数阈值为10。

write_db资源的QPS超过10之后,read_db会被限流以保证留足资源给write_db,避免write_db数据丢失。如下图所示。

flow_control_limiting

常用场景3 预热启动避免大流量冲击

流控的原理是在流量入口处控制流量,让通过的流量缓慢增加,在一定时间内逐渐增加到阈值上限,以便系统可以预热。最适合突发流量的场景。详情请参见Warm Up(冷启动)

新建流控规则对话框中配置如下规则信息。

  • 统计维度选择链路入口
  • 流控效果选择预热启动
  • 单机QPS阈值为60。
  • 预热时间为2s。

预热流控方式下,默认会从设置的QPS阈值的1/3开始慢慢往上增加至QPS设置值。本示例中,当入口的QPS超过20(即60÷3)时,会在预热的2s内缓慢增长至60。如下图所示。

flow_control_preheating

问题反馈

如果您在使用SAE过程中有任何疑问,欢迎您扫描下面的二维码加入钉钉群进行反馈。SAE钉钉群2