前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >教程系列(三):Spring Cloud Tencent 接入限流中心

教程系列(三):Spring Cloud Tencent 接入限流中心

原创
作者头像
小乐兜
发布2022-06-20 21:50:12
9110
发布2022-06-20 21:50:12
举报
文章被收录于专栏:Spring Cloud TencentSpring Cloud Tencent

导读

限流能力是服务自我保护最重要的能力之一,市面上服务限流的组件也非常多。Spring Cloud Tencent 限流能力最大的特定是完全无侵入,对常见的限流场景做了比较好的支持。例如表达式标签自动从 Request 里提取参数等。

Github 地址: Spring Cloud Tencent

模块简介

服务限流是最常见的一种服务自我保护措施之一,防止流量洪峰打垮服务。Spring Cloud Tencent Rate Limit 模块内置了针对 Spring Web 和 Spring WebFlux 场景的限流 Filter,结合 Polaris 的限流功能帮忙业务快速接入限流能力。

支持的限流场景包括:

  1. 服务级限流
  2. 根据 path 限流
  3. 根据 Request 中的 QueryParam、Header 等参数细粒度限流

如果您对源码感兴趣,可以查看核心限流 Filter 实现类 RateLimitFilter

快速入门

本章节将介绍如何在 Spring Cloud 项目中使用 Spring Cloud Tencent RateLimit 的功能。

完整的 Example 代码请参考:polaris-ratelimit-example

第一步:引入 Polaris 服务端

方式一:搭建本地北极星服务

搭建北极星服务请参考 Polaris Getting Started

方式二:使用北极星开源提供的体验环境

  • Console Address : http://14.116.241.63:8080/
  • Username: polaris
  • Password: polaris
  • Server Address: grpc://183.47.111.80:8091

方式三:使用腾讯云北极星服务

腾讯云提供了免运维的北极星云服务,基于云服务可以快速开通生产级高可用北极星集群 了解更多

第二步:引入 Spring Cloud Tencent Rate Limit 依赖

  1. 参考 Spring Cloud Tencent 版本管理 文档获取最新的版本号,引入 Spring Cloud Tencent Bom,例如:
代码语言:html
复制
<dependencyManagement>

    <dependencies>

        <dependency>

            <groupId>com.tencent.cloud</groupId>

            <artifactId>spring-cloud-tencent-dependencies</artifactId>

            <version>1.5.0-Hoxton.SR9</version>

            <type>pom</type>

            <scope>import</scope>

        </dependency>

    </dependencies>

</dependencyManagement>
  1. 引入 Spring Cloud Tencent Rate Limit Starte
代码语言:html
复制
<dependency>

    <groupId>com.tencent.cloud</groupId>

    <artifactId>spring-cloud-starter-tencent-polaris-ratelimit</artifactId>

</dependency>

第三步:增加 Spring Cloud Tencent Rate Limit Starter 的配置文件

  1. 在您的 bootstrap.yml 配置文件中加入以下配置内容
代码语言:yaml
复制
spring:

  application:

    name: ${application.name}

  cloud:

    polaris:

      address: grpc://${修改为第一步部署的 Polaris 服务地址}:8091

      namespace: default

第四步:配置限流规则

您可以在北极星控制台动态配置限流规则。

4.1 创建服务

如果您没有使用 Spring Cloud Tencent Discovery 能力,则需要在控制台手工创建服务信息。如下图所示:

4.2 创建限流规则

  1. 点击服务名进入服务主页
  2. 切换到 服务限流 tab
  3. 创建规则
  4. 按要求填写规则内容。其中,单机限流可以设置限流效果为快速失败或者匀速排队(匀速排队限流可点击此处了解详情),分布式限流目前仅支持快速失败。

**表达式标签,自动解析 Query、Header、Cookie 里的参数**

把 Http 请求里的某些字段作为流量标签,并且只针对带有某些标签的请求进行限流。例如 Query Param 有一个 uid 字段,期望只对某些 uid 限流。为了支持这种场景,我们定义了一套标签规则表达式,例如 ${http.query.uid} 表示请求 Query Param 里的 uid 字段,如下图所示,表示 uid=1000 的用户。

当前支持的标签规则表达式如下:

  • ${http.query.xxx}
  • 表示查询请求的参数
  • ${http.header.xxx}
  • 表示请求头里的参数
  • ${http.cookie.xxx}
  • 表示 cookie 里的参数
  • ${http.method}
  • 表示请求的方法,GET、POST、PUT 等
  • ${http.uri}
  • 表示请求的 Path,注意 / 开头,例如:/use

**对 Path 中带有参数的请求限流**

按照 Restful 规范,Path 中经常带有请求参数,例如以下 GET 请求 /users/{userId}/orders 表达的含义是获取特定用户的订单列表。通过正则表达式即可实现这类接口的限流 /users/.\*/orders ,如下图所示:

4.2.1 使用分布式限流
  1. 页面创建限流规则时,选择 分布式限流 规则
  2. 额外部署限流 Server (分布式限流需要依赖额外中心限流集群来协调多节点)
  3. 客户端默认情况下,无需任何配置,使用默认值即可

如需使用分布式限流,则需要部署限流 Server,并把限流 Server 注册到北极星(限流 Server 部署参考文档),限流客户端通过北极星获取限流 Server 的服务地址。限流 Server 默认服务名为 polaris.limiter 并注册到 Polaris 命名空间下。如自定义限流 Server 服务名,则需要在 resources/polaris.yml 配置限流 Server 服务名,如下所示:

代码语言:yaml
复制
provider:

  # 限流配置

  rateLimit:

    # 限流服务的命名空间

    limiterNamespace: Polaris

    # 限流服务名,改为自定义服务名

    limiterService: polaris.limite

第五步:启动应用

应用启动成功后,访问应用的 http 接口,测试限流是否生效。如果请求被限流将会返回以下内容:

代码语言:txt
复制
The request is deny by rate limit because the throttling threshold is reached

HttpCode 默认为 429

被限流时,可通过 spring.cloud.polaris.ratelimit.rejectRequestTips 自定义响应内容,详细参考配置列表。

至此即已完成限流的接入。

配置列表

| 配置项Key | 默认值 | 是否必填 | 配置项说明 |

| --- | --- | --- | --- |

| spring.cloud.polaris.ratelimit.enabled | true | 否 | 是否开启服务限流 |

| spring.cloud.polaris.ratelimit.rejectRequestTips | | 否 | 自定义拒绝请求响应的文本内容 |

| spring.cloud.polaris.ratelimit.rejectRequestTipsFilePath | | 否 | 自定义拒绝请求响应内容的文件地址,常用于返回 html 文件内容等。目前仅支持 classpath 下的文件,放在 resources 目录。 |

| spring.cloud.polaris.ratelimit.rejectHttpCode | 429(Too Many Request) | 否 | 自定义拒绝请求响应的 Http 状态码 |

| spring.cloud.polaris.ratelimit.maxQueuingTime | 1000 | 否 | 匀速排队限流最大排队时间 |

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 导读
  • 模块简介
  • 快速入门
    • 第一步:引入 Polaris 服务端
      • 方式一:搭建本地北极星服务
      • 方式二:使用北极星开源提供的体验环境
      • 方式三:使用腾讯云北极星服务
    • 第二步:引入 Spring Cloud Tencent Rate Limit 依赖
      • 第三步:增加 Spring Cloud Tencent Rate Limit Starter 的配置文件
        • 第四步:配置限流规则
          • 4.1 创建服务
          • 4.2 创建限流规则
        • 第五步:启动应用
        • 配置列表
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
        http://www.vxiaotou.com