流量防护

Serverless 应用引擎 SAE(Serverless App Engine)集成微服务引擎 MSE(Microservices Engine)的流量防护能力,以流量为切入点,从接口流控、并发隔离、熔断规则等多个维度来保障业务的稳定性,提供专业稳定的流量防护手段、秒级的流量水位分布分析功能。本文介绍如何设置流量防护的相关规则以及使用示例。

前提条件

使用限制

仅适用于2023年11月08日起新建的微服务应用。

功能入口

  1. SAE控制台应用管理 > 微服务应用页面顶部菜单栏选择地域,然后在应用列表页面,单击目标应用名称。

  2. 在左侧导航栏,选择微服务治理 > 流量治理,单击流量防护页签。

配置规则

配置流控规则

流控规则通过监控应用或服务流量的QPS指标,当指标达到设定的阈值时立即拦截流量,避免应用被瞬时的流量高峰冲垮,从而保障应用高可用性。

  1. 单击接口流控页签,然后单击新增流控规则

  2. 新增流控防护规则对话框中,配置相关信息。

    1. 选择防护场景配置向导中,选择接口类型流量类型接口名称,然后单击下一步

    2. 配置防护规则配置向导中,配置相关信息,单击下一步

      配置项

      说明

      是否开启

      开启表示规则创建成功后立即生效,默认关闭。

      单机QPS阈值

      触发对流控接口的统计维度对象的QPS阈值。

      流控效果

      选择流控方式来处理被拦截的流量。

      • 快速失败:达到阈值时,立即拦截请求。按照应用系统设置中的适配模块配置信息,进行内容返回。

      • 排队等待:请求匀速通过,允许排队等待,通常用于请求调用削峰填谷等场景。需要设置具体的超时时间,达到超时时间后请求会快速失败。

    3. 配置防护行为配置向导中,选择关联行为,然后单击新增

    规则创建成功后,您可以在接口流控页签对目标规则进行编辑删除等操作。

配置隔离规则

隔离规则通过控制接口或依赖的并发线程数,来保证系统的稳定性。

  1. 单击并发隔离页签,然后单击新增隔离规则

  2. 新增隔离防护规则对话框中,配置相关信息。

    1. 选择防护场景配置向导中,选择接口类型流量类型接口名称,然后单击下一步

    2. 配置防护规则配置向导中,配置相关信息,单击下一步

      配置项

      说明

      是否开启

      开启表示规则创建成功后立即生效,默认关闭。

      并发数阈值

      资源的并发线程数(即该资源正在执行的线程数)阈值。

    3. 配置防护行为配置向导,选择关联行为,然后单击新增

规则创建成功后,您可以在并发隔离页签对目标规则进行编辑删除等操作。

配置熔断规则

熔断规则可以监控应用内部或者下游依赖的响应时间或异常比例。当达到指定的阈值时,系统会立即降低下游依赖的优先级。在指定的时间内,系统不会调用该异常资源,避免应用的不稳定运行,从而保障应用的高可用性。指定时间过后,系统会重新恢复对该资源的调用。

  1. 单击熔断规则页签,然后单击新增熔断规则

  2. 新增熔断防护规则对话框,配置相关信息。

    1. 选择防护场景配置向导,选择接口类型接口名称,单击下一步

    2. 配置防护规则配置向导,配置相关信息,单击新增

      配置项

      描述

      统计窗口时长

      统计的时间窗口长度,取值范围为1秒~120分钟。

      最小请求数目

      触发熔断的最小请求数目,若当前统计窗口内的请求数小于此值,即使达到熔断条件规则也不会触发。

      阈值类型

      选择以慢调用比例(%)异常比例(%)作为阈值。

      • 选择以慢调用比例作为阈值,需要设置允许的慢调用RT(即最大的响应时间),请求的响应时间大于该值则统计为慢调用。

        熔断比例阈值中设置触发熔断的慢调用比例。规则开启后,在单位统计时长内请求数目大于设置的最小请求数目,并且慢调用的比例大于阈值,则接下来的熔断时长(s)内请求会自动被熔断。经过熔断时长后熔断器会进入探测恢复状态,若接下来的一个请求响应时间小于设置的慢调用RT则结束熔断,若大于设置的慢调用RT则会再次被熔断。

      • 选择以异常比例作为阈值,需要在熔断比例阈值中设置触发熔断的异常比例。

        规则开启后,在单位统计时长内业务异常数目大于设置的最小请求数目,并且异常的比例大于阈值,则接下来的熔断时长(s)内请求会自动被熔断。

      熔断时长(s)

      单击显示高级选项后配置。即熔断触发后持续的时间。资源进入熔断状态后,在配置的熔断时长内,请求都会快速失败。

      熔断恢复策略

      单击显示高级选项后配置。熔断器进入恢复阶段(半开启状态)的恢复策略。

      • 单次探测恢复:经过熔断时长后,熔断器会对接下来的一个请求进行探测,若该请求符合预期(不为慢调用或没有异常),则结束熔断;否则重新回到熔断阶段。

      • 渐进式恢复:需要设置恢复阶段数每步最小通过数目

        • 经过熔断时长后,熔断器按照设定的恢复阶段数进行渐进式恢复,若该阶段内请求达到一定量即每步最小通过数目,则触发检查。检查的请求若都未超过阈值,则逐步提高允许通过的请求比例,直到请求完全恢复;若某一步的指标超出阈值,则重新回到熔断阶段。

        • 请求比例T=100/恢复阶段数N,则第一阶段请求比例为T,第二阶段为2T,直到100%。

        • 例如恢复阶段数为3,每步最小通过数目为5,则三个阶段分别按照33%、67%和100%的比例放入请求,当每阶段的请求数目大于等于5时进行检查,若请求的指标未超阈值则进入下一恢复阶段,直至完全恢复。

规则创建成功后,您可以在熔断规则页签对目标规则进行编辑删除等操作。

配置热点参数防护(RPC)规则

为应用配置热点规则后,系统将分析统计参数,即资源调用过程中的调用次数较高的参数,并根据配置的热点规则对包含热点参数的资源调用进行限流,保护系统稳定性。

  1. 单击热点参数防护(RPC)页签,然后单击新增热点参数防护(RPC)规则

  2. 新增热点参数防护(RPC)规则对话框,配置相关信息。

    1. 选择防护场景配置向导,选择接口名称,单击下一步

    2. 配置防护规则配置向导,配置相关信息,单击下一步

      配置项

      描述

      参数位置索引

      埋点传入参数的索引位置。对应SphU.entry(xxx,args)中的参数索引位置。例如在SphU.entry(resourceName,Entry Type.IN,1,paramA,paramB)埋点中,paramA的参数索引是0,paramB的参数索引是1。

      统计维度

      可选择通过请求数或并发线程数。

      • 通过请求数:限制一段时间内的调用次数。

      • 并发数:限制该资源调用的并发数。

      统计周期时间

      统计窗口时间长度(单位为秒)。例如统计窗口时长为10秒,QPS阈值为5代表限制10秒内每个热点参数访问不超过5次。

      单机阈值

      作用于每个热点参数的阈值。

      流控效果

      统计维度通过请求数时,可以选择流控效果来处理被拦截的流量。

      • 快速失败:达到阈值时,立即拦截请求。该模式下可以额外设置一个缓冲请求数,即针对突发请求额外允许的请求数目。

      • 排队等待:请求匀速通过,允许排队等待,通常用于消息队列削峰填谷等场景。需设置具体的超时时间,排队时会计算预计的排队时长,若超过最大超时时间则请求会直接被拒绝。例如,单机阈值配置为5,则代表请求每200毫秒才能通过一个,多出的请求将排队等待通过。超时时间配置1000毫秒,则当前排队请求超过5个(>1000毫秒)时,新到来的请求将会直接被拒绝。

      是否开启

      开启表示规则创建成功后立即生效,默认关闭。

    3. 配置防护行为配置向导,选择关联行为,然后单击新增

规则创建成功后,您可以在热点参数防护(RPC)页签对目标规则进行编辑删除等操作。

配置热点参数防护(HTTP请求)规则

热点参数防护规则(HTTP 请求)面向提供Web服务的应用,针对访问请求中的一些参数项进行精细化的流量控制,可以对请求中IP、Host、Header、URL Param等参数维度的资源调用进行流量控制,保障业务与系统的稳定性。

  1. 单击热点参数防护(HTTP 请求)页签,然后单击新增热点参数防护(HTTP 请求)

  2. 新增热点参数防护(HTTP 请求)对话框,配置相关信息。

    1. 选择防护场景配置向导,选择接口名称,单击下一步

    2. 配置防护规则配置向导中,配置相关信息,单击下一步

      配置项

      说明

      参数属性

      针对所选API的参数属性进行流量控制。

      • Client IP:请求端的IP地址。

        说明

        若请求经过代理,会优先尝试从X-Forwarded-For请求头中获取IP信息,如果其IP信息存在,将会使用该IP作为实际请求端IP地址。

      • Remote Host:请求端的Host Header。

      • Header:根据指定的HTTP Header进行解析,如果填写某个具体的Header Key,则该规则针对这个Header Key下面的热点值分别进行限制。选择Header后,可选择配置请求属性值的匹配策略,只有匹配该模式的请求属性值会被纳入统计和流控。

      • URL参数:根据指定的HTTP请求参数进行解析,需要填写对应的参数名称。选择URL参数后,可选择配置请求属性值的匹配策略,只有匹配该模式的请求属性值会纳入统计和流控。

      阈值类型

      默认为请求数

      阈值

      触发对流控接口的统计维度对象的QPS阈值。设置时,需选择统计时间间隔,支持秒、分钟、小时和天4种维度。

      例如,若阈值填写为10,统计间隔选择,则表示每分钟对应的请求数目不超过10个。

      是否开启

      开启表示规则创建成功后立即生效,默认关闭。

      流控方式

      单击显示高级选项后配置。

      • 快速失败:当阈值类型为QPS时,被拦截的流量将快速失败,即达到阈值时,立即拦截请求。

        说明

        被拦截拒绝掉的请求,将返回行为管理中配置的自定义信息,若未配置会返回默认行为,即429错误码加上默认文本信息。

      • 排队等待:当阈值类型为QPS时,被拦截的请求将匀速通过,允许排队等待。需设置具体的超时时间,预计达到超时时间的请求会立即失败,而不会排队。例如,QPS配置为10,则代表请求每100毫秒才能通过一个,多出的请求将排队等待通过。超时时间代表最大排队时间,超出最大排队时间的请求将会直接被拒绝。

        说明

        排队等待时,QPS不要超过1000(请求间隔1毫秒)。

      Burst size

      单击显示高级选项后配置。当流控方式选择为快速失败时,可以额外设置一个Burst Size,即针对突发请求额外允许的请求数目。

      超时时间

      单击显示高级选项后配置。当流控方式选择为排队等待时,需设置具体的超时时间,单位为毫秒。例如,QPS配置为5,则代表请求每200毫秒才能通过一个,多出的请求将排队等待通过。超时时间代表最大排队时间,超出最大排队时间的请求将会直接被拒绝。

    3. 配置防护行为配置向导,选择关联行为,然后单击新增

规则创建成功后,您可以在热点参数防护(HTTP请求)页签对目标规则进行编辑删除等操作。

管理行为

Web行为可以在Web类型埋点资源触发了某种规则后,返回对应的自定义处理行为,例如,某个Web接口触发流控规则后返回Blocked by Sentinel的提示文本。

新增行为

  1. 单击行为管理页签,然后单击新增行为

  2. 新增行为对话框,配置相关信息,然后单击新建

    Web资源

    参数

    描述

    示例值

    行为名称

    该行为的名称。长度不超过128个字符,同一个应用内名称不能重复。

    测试行为

    针对的资源类型

    选择为Web类型。

    Web

    Web 限流处理策略

    定义Web接口访问触发某种规则后的行为表现。自定义返回:需设置HTTP返回状态码、返回内容的格式和返回的内容。表示Web接口访问触发规则后返回自定义的内容。

    自定义返回

    HTTP 返回状态码

    默认为429。当Web限流处理策略为自定义返回时,需要填写。

    429

    返回 content-type

    设置返回内容的格式为普通文本JSON

    JSON字符串

    HTTP 返回文本

    输入当Web接口访问触发规则后返回的内容。当Web限流处理策略为自定义返回时,需要填写。

    {"message": "blocked oops"}

    RPC资源

    参数

    描述

    示例值

    行为名称

    该行为的名称。长度不超过128个字符,同一个应用内名称不能重复。

    测试行为

    针对的资源类型

    选择为Rpc类型。

    Rpc

    Rpc 限流处理策略

    定义Rpc接口访问触发某种规则后的行为表现。

    • 自定义返回:自定义返回结果。需设置HTTP返回状态码、返回内容的格式和返回的内容。表示Rpc接口访问触发规则后返回自定义的内容。

    • 自定义异常:抛出自定义异常。需设置异常的类名和异常文本,表示Rpc接口访问触发规则后系统会返回指定的异常信息。

    自定义返回/自定义异常

    Rpc 限流处理策略自定义返回

    自定义返回类名

    填写类名称路径。

    说明

    自定义返回目前不支持对象类型中包含未确定类型的泛型,如Map<K, V>、List<T>等。

    com.alibaba.demo.OrderService:getOrder(long)

    自定义返回内容(JSON 格式)

    填写当Rpc接口访问触发规则时返回结果的对象内容。

    {"id": "123", "name": "test"}

    Rpc 限流处理策略自定义异常

    异常类名

    填写异常类名称路径。

    java.lang.RuntimeException

    异常信息文本

    填写Rpc接口访问触发规则后抛出自定义异常的文本信息。

    "Operation failed"

新增的行为会显示在行为管理页签中,您可以对目标行为进行修改删除等操作。

关联行为

  1. 单击进流量防护页签,选择目标页签,单击目标规则操作编辑,配置选择防护场景配置防护规则后,在配置防护行为配置向导,从关联行为下拉列表,选择目标行为进行关联,或者单击新增行为来创建新的行为进行关联。

    说明
    • 如果您不需要自定义限流后的Fallback行为,选择默认行为即可,默认接口类型为空。

    • 新增规则时,如果当前接口已有绑定行为,后续绑定新的行为将覆盖接口下已有的行为。

    • 选择Fallback类型时,如果不选择接口类型,则绑定默认行为;选择接口类型并绑定相应类型行为后,不可修改。

  2. 单击保存

使用场景

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

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

新增流控防护规则对话框,配置以下信息:

  • 配置匀速模式下请求单机QPS阈值为5。

  • 流控效果选择排队等待

  • 超时时间为5s。

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

场景2:保障自身资源充足

当运行该请求的响应时间变长,会导致线程的并发数变大。当并发数超过阈值以后,AHAS将拒绝多余的请求,直到堆积的任务完成,并发线程数变少。达到将异常隔离,减小不稳定性的效果。例如某个SQL执行时间为20毫秒,预期该请求每秒有20个。

新增隔离防护规则对话框,配置以下信息:

  • 填写接口名称

  • 并发数阈值为10。

设置完成后,当这个SQL发生死锁或者存在性能问题时,该SQL运行变慢,成为慢SQL,此时即使请求不断进来,也仅仅会占用10个线程,不会因为持续进来的请求(请求也无法在短时间内退出),从而耗光进程的活跃线程。当这个SQL恢复正常后,并发数会迅速减少。当并发数减少至低于预设的阈值时,系统就不会拒绝请求,应用的处理能力也快速的恢复。通过上述方式,起到根据响应时间自动调节的效果,隔离不稳定的应用。

场景3:慢调用熔断

例如调用第三方服务,但响应时间太慢,会影响当前接口,所以对其进行熔断操作。

新增熔断防护规则对话框,配置以下信息。

配置项

示例

说明

接口名称

test

接口名称。

统计窗口时长

1

统计时长为1秒。

最小请求数目

10

触发熔断的最小请求数目为10。

阈值类型

慢调用比例

选择以慢调用比例作为阈值。

慢调用RT

1000

超过1000毫秒则判定为慢请求。

熔断比例阈值

80%

触发熔断的慢调用比例阈值为80%。

熔断时长(s)

10

熔断时长有10秒。

熔断恢复策略

单次探测恢复

经过熔断时长后,熔断器会对接下来的一个请求进行探测,若该请求符合预期(不为慢调用或没有异常),则结束熔断;否则重新回到熔断阶段。

场景4:异常熔断

例如第三方内容展示时,系统会出现异常,当异常比例较高时,可以对其进行熔断操作,以保证更好的用户体验。

新增熔断防护规则对话框,配置以下信息。

配置项

示例

说明

接口名称

test

接口名称。

统计窗口时长

1

统计时长为1秒。

最小请求数目

10

触发熔断的最小请求数目为10。

阈值类型

异常比例

选择以异常比例作为阈值。

熔断比例阈值

80%

触发熔断的异常比例阈值为80%。

熔断时长(s)

10

熔断时长有10秒。

熔断恢复策略

单次探测恢复

经过熔断时长后,熔断器会对接下来的一个请求进行探测,若该请求符合预期(不为慢调用或没有异常),则结束熔断;否则重新回到熔断阶段。

场景5:秒杀场景

秒杀等抢购商品的时候,由于流量较大会导致系统响应不及时,甚至系统崩溃。为保证系统的稳定性,可配置热点规则,超过一定量的阈值后,系统会让购买热点商品的流量排队等待。例如购买同一商品,1秒内调用超过100次请求后,则其余请求进行等待。

新增热点参数防护(RPC)规则对话框,配置以下信息:

  • 填写接口名称

  • 统计维度选择通过请求数

  • 统计周期时间设置为1秒,单机阈值设置为100。

  • 流控效果选择排队等待

  • 超时时间设置为30毫秒。

1秒内调用此接口超过100次,多余的请求要进行排队等待,等待时长超过30毫秒的请求就会立即失败。

场景6:调用请求频繁,占用较多系统资源

在秒杀场景下,有时候还需要修改下单地址,当调用修改请求较多时,会占用写数据库较多资源,您可以对其进行热点快速失败的处理,稍后再修改。

新增热点参数防护(RPC)规则对话框,配置以下信息:

  • 填写接口名称

  • 统计维度选择并发数

  • 统计周期时间设置为1秒,单机阈值设置为100。

  • 流控效果选择快速失败

表示1秒内只能最多处理100个并发请求,其余超出的请求都会快速失败。

场景7:热点商品秒杀

在秒杀等抢购商品的场景下,由于流量较大,可能会导致系统响应不及时甚至崩溃。为保证系统稳定,可配置热点参数防护规则,超过一定阈值后,系统会拒绝多余的热点商品流量。

例如购买同一商品,希望1秒内同个商品超过100次请求后,对多余的请求进行拒绝,可在新增热点参数防护(HTTP 请求)对话框,配置以下信息,表示1秒内,针对热点商品ID进行下单的请求,每个单独商品ID每秒最多只能允许100个请求,其余超出的当前商品下单请求都会被拒绝,返回自定义的信息。

  • 参数属性选择URL参数

    说明

    在参数属性中,选择当前热点商品ID所对应的参数字段,例如,假设URL参数中存在一个stockId字段对应请求的商品ID,那么参数属性可以选择URL参数,并在参数名称中填写属性在请求中对应的字段名称。

  • URL参数名称输入stockId。

  • 阈值输入100个请求/每

  • 流控方式选择快速失败

场景8:防止恶意刷单

例如在促销活动中,某些恶意刷单请求较多的时候,会占用较多商品库存或服务器资源。这种情况下可以针对其IP来源进行排队等待的处理,使访问请求匀速通过,防止过量的请求对服务稳定性产生影响。

新增热点参数防护(HTTP 请求)对话框中配置以下规则信息,表示每个不同来源IP调用此接口的请求会以每10毫秒一个的速度匀速通过(1秒/100=10毫秒),后续多余的请求要进行排队等待。排队中的请求如果等待时长超过30 ms就会立即失败。

  • 参数属性选择Client IP

  • 阈值类型默认选择请求数

  • 阈值输入100个请求/每

  • 流控方式选择排队等待

  • 超时时间输入30。

  • 是否开启选择开启。