添加限流规则

SOFAStack 微服务主要通过 SOFARPC 来实现服务的发布和引用,在 SOFAStack 微服务中的限流主要是针对 SOFARPC 框架。微服务的服务限流(Guardian)是一个限流组件,您可通过在业务系统中集成该组件,配置限流规则来提供限流服务,从而保证业务系统不会被大量突发请求击垮,提高系统稳定性。

前提条件

服务限流的规则配置依赖于动态配置推送,所以接入限流前必须先接入动态配置。详情请参见 新增动态配置

操作步骤

  1. 登录 SOFAStack 控制台

  2. 在左侧导航栏,选择 中间件 > 微服务平台 >微服务 > 服务治理

  3. 单击 服务限流,然后单击 新增应用

  4. 输入应用名称后,单击 确定

  5. 在应用列表单击目标应用右侧的 新建规则,然后配置规则参数。

    区域

    参数

    说明

    基本信息

    规则名称

    配置限流规则的名称,用于描述规则。

    限流类型

    配置限流规则的方法,可选值:

    • 接口方法:支持对某个具体的 RPC 接口或普通 Bean 的方法限流。

      您需要在 限流对象 中配置接口路径名称和方法签名。

    • Web 页面:对基于 Spring MVC 的 Web 请求进行限流。

      您需要在 限流对象 中配置请求 URI。

    运行模式

    配置限流规则的运行模式,可选值:

    • 拦截模式:限流生效的模式,会根据配置的规则实际拦截请求。

    • 监控模式:仅打印限流记录日志,不实际产生限流效果。

    限流算法

    配置限流规则的算法,可选值:

    • QPS 计数算法:通过限制单位时间段内允许的请求调用量进行限流。

    • 扩展令牌桶算法:控制发送到网络上的数据的数目,并允许突发数据的发送。

    有关算法的详细说明参见 限流算法说明

    限流后置操作

    限流后操作

    配置限流后进行的后续操作,可选值:

    • 空配置:限流后不做任何处理,返回空值。

    • 抛出异常:限流后返回异常信息。异常信息为填写的输入框内容。

      仅当 限流类型接口方法 时,支持配置。

    • 跳转到指定页面:限流后跳转到指定的页面地址。

      仅当 限流类型Web 页面 时,支持配置。

    • 页面 JSON 报文:限流后直接将指定的 JSON 字符串在 HTML Response 中返回。

      默认返回内容为:

      {success:false,error:"MAX_VISIT_LIMIT"}

      仅当 限流类型Web 页面 时,支持配置。

    • 页面 XML 报文:限流后直接将特定的 XML 字符串在 HTML Response 中返回。

      默认返回内容为:

      <?xml version="1.0" encoding="GBK"?><alipay><is_success>F</is_success><error>MAX_VISIT_LIMIT</error></alipay>

      仅当 限流类型Web 页面 时,支持配置。

    限流阈值

    限流阈值

    配置限流阈值,配置项如下:

    • 条件模型:配置限速的条件。

      可选值如下:

      • 单位时间内服务访问次数或 Web 页面访问次数:根据单位时间内的请求数进行限流。

      • 堆内存使用量:根据当前堆内存使用量进行限流。

      • CPU 负载:根据过去一分钟内的 CPU 平均负载进行限流。

      • 并发线程数:根据单台机器上并发的线程数进行限流。

    • 单位时间:打印限流日志的周期。对于单位时间内访问次数的限流条件,也表示统计周期。

      单位为毫秒(ms)。最小值为 1000 ms。

    • 限流阈值:根据选择的 条件模型 配置限流阈值,超过阈值的流量会被限速。

      • 选择 单位时间内服务访问次数或 Web 页面访问次数 时:配置最大允许的 QPS 数。

      • 选择 堆内存使用量 时:配置最大堆内存使用量,单位为 MB。

      • 选择 CPU 负载 时:配置 CPU 的最大负载,数值为 100 * CPU 负载百分比

      • 选择 并发线程数 时:配置最大并发线程数。

    • 流量类型:配置限流规则针对的流量类型。

      可选值如下:

      • 所有流量:对正常流量和压测流量均限流。

      • 正常流量:仅对正常流量限流。

      • 压测流量:仅对压测流量限流。

    限流对象

    根据选择的 限流类型 配置限流的对象名。

    • 选择 接口方法 时,配置以下参数:

      • 接口:配置限流的接口名称。支持 RPC 服务接口或配置了 Spring AOP 拦截器的 Bean。

      • 方法:配置需要限流的方法。支持带参数或不带参数的方法签名。

      • 参数关系:配置多个参数条件之间的逻辑关系。可选值为 AND(与)和 OR(或)。

    • 选择 Web 页面 时,配置以下参数:

      • URI:需要限流的请求 URI,不包含域名和参数部分。

      • 参数关系:配置多个参数条件之间的逻辑关系。可选值为 AND(与)和 OR(或)。

    限流对象名配置完成后,您还需要添加参数条件。更多信息,请参见 配置限流对象方法签名

  6. 配置完成后,根据需求选择推送方式:

    • 提交:限速规则向所有机器推送限速规则。

    • 灰度推送:单击后选择推送目标,限速规则仅推送给指定机器。

      重要
      • 灰度推送的数据不会保存到数据库,只会保存在被推送到的服务器的内存中。

      • 服务器重启后推送的规则被还原,仍使用灰度推送前的规则。

  7. 在应用列表单击目标应用左侧的加号,然后将目标规则的状态修改为 开启

    限速规则开启后,将根据推送配置将限速规则推送给所有机器或指定机器。您也可以根据需要让限速规则在指定机器上开启:

    • 限速规则状态为 关闭 时:单击 灰度开启,然后选择开启限速规则的机器。

    • 限速规则状态为 开启 时:单击 灰度关闭,然后选择关闭限速规则的机器。