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

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

背景信息

热点即经常被访问的数据。例如在以下场景中需要统计某个热点数据中访问频次最高的Top数据,并对其访问进行限制。

  • 针对一段时间内最频繁购买的商品ID进行限制,防止击穿缓存而导致大量请求到数据库的情形。

  • 针对一段时间内频繁访问的用户ID进行限制,防止恶意刷单。

MSE利用LRU(Least Recently Used)策略统计最近最常访问的热点参数,结合令牌桶算法来进行参数级别的流控。

功能入口

  1. 登录MSE治理中心控制台,并在顶部菜单栏选择地域。

  2. 在左侧导航栏,选择治理中心 > 应用治理

  3. 应用列表页面,单击目标应用的资源卡片。

  4. 进入应用之后,选择以下任意一种方式新建流控规则,目前支持 RPC 接口和自定义埋点接口:

    方式一:在接口详情里为接口添加规则
    • RPC 接口:在左侧导航栏,选择接口详情。单击RPC服务页签,选择接口。在右侧单击热点参数防护(RPC)页签,然后单击新增热点参数防护(RPC)规则

    • 自定义接口:在左侧导航栏,选择接口详情。单击自定义接口页签,选择接口。在右侧单击热点参数防护页签,然后单击新增热点参数防护(自定义接口)规则

    方式二:在流量防护页签为接口添加规则。

    在左侧导航栏,选择流量治理 > 流量防护页签,单击热点参数防护(RPC/自定义接口)页签,然后单击新增热点参数防护(RPC/自定义接口)规则。

  5. 新增热点参数防护(RPC/自定义接口)对话框中配置规则信息。单击新增

    参数说明,请参见配置项说明

示例场景一:秒杀场景

秒杀等抢购商品的时候,由于流量较大会导致系统响应不及时,甚至系统崩溃。为保证系统的稳定性,可配置热点规则,超过一定量的阈值后,系统会让购买热点商品的流量排队等待。

例如购买同一商品,1s内调用超过100次请求后,则其余请求进行等待。在新增热点参数防护(RPC/自定义接口)对话框中配置以下规则信息。

  • 填写接口名称

  • 参数位置索引填写埋点传入参数的索引位置,从 0 开始,其对应着实际的 RPC 或者自定义埋点方法中的参数列表中的索引位置。

    例如 RPC 方法com.aliyun.demo:methodA(param0, param1, ……),参数位置 0 是 param0 这个参数;自定义埋点方法 SphU.entry("demoResource",EntryType.IN, 1, param0, param1, ……),参数位置 0 是 param0 这个参数。

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

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

  • 流控效果选择排队等待

  • 超时时间设置为30ms。

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

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

在秒杀场景下,有时候还需要修改下单地址,当调用修改请求较多时,会占用写数据库较多资源,您可以对其进行热点快速失败的处理,稍后再修改。在新增热点参数防护(RPC/自定义接口)对话框中配置以下规则信息。

  • 填写接口名称

  • 参数位置索引填写埋点传入参数的索引位置,从 0 开始,其对应着实际的 RPC 或者自定义埋点方法中的参数列表中的索引位置。

    例如 RPC 方法com.aliyun.demo:methodA(param0, param1, ……),参数位置 0 是 param0 这个参数;自定义埋点方法 SphU.entry("demoResource",EntryType.IN, 1, param0, param1, ……),参数位置 0 是 param0 这个参数。

  • 统计维度选择并发数

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

  • 流控效果选择快速失败

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

配置项说明

新增热点参数防护(RPC/自定义接口)对话框配置项说明如下。

参数

描述

接口名称

适用该规则的资源名称,与埋点传入的资源名保持一致。

参数位置索引

埋点传入参数的索引位置,从 0 开始,其对应着实际的 RPC 或者自定义埋点方法中的参数列表中的索引位置。例如 RPC 方法com.aliyun.demo:methodA(param0, param1, ……),参数位置 0 是 param0 这个参数;自定义埋点方法 SphU.entry("demoResource",EntryType.IN, 1, param0, param1, ……),参数位置 0 是 param0 这个参数。

统计维度

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

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

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

统计周期时间

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

单机阈值

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

流控效果

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

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

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