管理限流降级规则

管理限流降级规则

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

前提条件

微服务应用已开启限流降级功能。具体操作,请参见 设置限流降级

配置规则

配置流控规则

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

  1. 登录 SAE 控制台

  2. 在左侧导航栏,单击 应用管理 ,在顶部菜单栏选择地域,然后在 应用列表 页面,单击目标应用名称。

  3. 进入 规则配置 页面。

    • 存量应用:在左侧导航栏,选择 限流降级(仅支持 Java) > 规则配置 。在 规则配置 页面的 接口流控 页签,单击 新增流控规则

    • 新增应用:在左侧导航栏,选择 微服务治理 > 限流降级 。在 限流降级 页面,单击 规则配置 页签,然后在 接口流控 页签,单击 新增流控规则

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

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

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

      配置项

      说明

      是否开启

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

      单机 QPS 阈值

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

      流控效果

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

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

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

    3. 配置防护行为 配置向导,设置 接口类型 关联行为 ,然后单击 新增

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

配置隔离规则

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

  1. 登录 SAE 控制台

  2. 在左侧导航栏,单击 应用管理 ,在顶部菜单栏选择地域,然后在 应用列表 页面,单击目标应用名称。

  3. 进入 规则配置 页面。

    • 存量应用:在左侧导航栏,选择 限流降级(仅支持 Java) > 规则配置 。在 规则配置 页面的 并发隔离 页签,单击 新增隔离规则

    • 新增应用:在左侧导航栏,选择 微服务治理 > 限流降级 。在 限流降级 页面,单击 规则配置 页签,然后在 并发隔离 页签,单击 新增隔离规则

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

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

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

      配置项

      说明

      是否开启

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

      并发数阈值

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

    3. 配置防护行为 配置向导,设置 接口类型 关联行为 ,然后单击 新增

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

配置熔断规则

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

  1. 登录 SAE 控制台

  2. 在左侧导航栏,单击 应用管理 ,在顶部菜单栏选择地域,然后在 应用列表 页面,单击目标应用名称。

  3. 进入 规则配置 页面。

    • 存量应用:在左侧导航栏,选择 限流降级(仅支持 Java) > 规则配置 。在 规则配置 页面的 熔断规则 页签,单击 新增熔断规则

    • 新增应用:在左侧导航栏,选择 微服务治理 > 限流降级 。在 限流降级 页面,单击 规则配置 页签,然后在 熔断规则 页签,单击 新增熔断规则

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

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

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

      配置项

      描述

      统计窗口时长

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

      最小请求数目

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

      阈值类型

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

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

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

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

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

      熔断时长(s)

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

      熔断恢复策略

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

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

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

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

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

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

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

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

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

  1. 登录 SAE 控制台

  2. 在左侧导航栏,单击 应用管理 ,在顶部菜单栏选择地域,然后在 应用列表 页面,单击目标应用名称。

  3. 进入 规则配置 页面。

    • 存量应用:在左侧导航栏,选择 限流降级(仅支持 Java) > 规则配置 。在 规则配置 页面的 热点参数防护(RPC) 页签,单击 新增热点参数防护(RPC)规则

    • 新增应用:在左侧导航栏,选择 微服务治理 > 限流降级 。在 限流降级 页面,单击 规则配置 页签,然后在 热点参数防护(RPC 页签,单击 PC)点参数防护(RPC)规则

  4. 新增热点参数防护(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. 登录 SAE 控制台

  2. 在左侧导航栏,单击 应用管理 ,在顶部菜单栏选择地域,然后在 应用列表 页面,单击目标应用名称。

  3. 进入 规则配置 页面。

    • 存量应用:在左侧导航栏,选择 限流降级(仅支持 Java) > 规则配置 。在 规则配置 页面的 热点参数防护(HTTP 请求) 页签,单击增加 增热点参数防护(HTTP 请求)

    • 新增应用:在左侧导航栏,选择 微服务治理 > 限流降级 。在 限流降级 页面,单击 规则配置 页签,在 热点参数防护(HTTP 请求) 页签,单击 新增热点参数防护(HTTP 请求)

  4. 新增热点参数防护(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. 登录 SAE 控制台

  2. 在左侧导航栏,单击 应用管理 ,在顶部菜单栏选择地域,然后在 应用列表 页面,单击目标应用名称。

  3. 进入 行为管理 页签。

    • 存量应用:在左侧导航栏,选择 限流降级(仅支持 Java) > 规则配置 。在 规则配置 页面的 行为管理 页签,单击 新增行为

    • 新增应用:在左侧导航栏,选择 微服务治理 > 限流降级 。在 限流降级 页面,单击 规则配置 页签,在 行为管理 页签,单击 新增行为

  4. 新增热点参数防护(HTTP 请求) 对话框,配置相关信息,然后单击 新建

    配置项

    说明

    示例

    行为名称

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

    测试行为

    针对的资源类型

    选择为 Web 类型。

    Web

    Web 限流处理策略

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

    自定义返回

    HTTP 返回状态码

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

    429

    返回 content-type

    设置返回内容的格式为 普通文本 JSON 。当 Web 限流处理策略为自定义返回时,需要填写。

    JSON 字符串

    HTTP 返回文本

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

    {"message": "blocked oops"}

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

关联行为

  1. 登录 SAE 控制台

  2. 在左侧导航栏,单击 应用管理 ,在顶部菜单栏选择地域,然后在 应用列表 页面,单击目标应用名称。

  3. 进入 规则配置 页面。

    • 存量应用:在左侧导航栏,选择 限流降级(仅支持 Java) > 规则配置 。在 规则配置 页面的 接口流控 页签,单击 新增流控规则

    • 新增应用:在左侧导航栏,选择 微服务治理 > 限流降级 。在 限流降级 页面,单击 规则配置 页签,然后在 接口流控 页签,单击 新增流控规则

  4. 完成 选择防护场景 配置防护规则 后,在 配置防护行为 区域,完成下列设置。

    1. 选择 接口类型 Web

    2. 关联行为 下拉列表,选择目标行为进行关联,或单击 新增行为 来创建新的行为进行关联。

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

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

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

  5. 单击 新增

使用场景

场景 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。

  • 是否开启 选择开启。