AlibabaCloud-sentinel getway限流篇(1)

AlibabaCloud-sentinel限流篇(1)

首先我们来看几个问题吧

  • AlibabaCloud sentinel 是干嘛的?

    Sentinel 可以简单的分为 Sentinel 核心库和 Dashboard。核心库不依赖 Dashboard,但是结合 Dashboard 可以取得最好的效果。

    这篇文章主要介绍 Sentinel 核心库的使用。如果希望有一个最快最直接的了解,可以参考 新手指南 来获取一个最直观的感受。

    我们说的资源,可以是任何东西,服务,服务里的方法,甚至是一段代码。使用 Sentinel 来进行资源保护,主要分为几个步骤:

    1. 定义资源
    2. 定义规则
    3. 检验规则是否生效

    先把可能需要保护的资源定义好(埋点),之后再配置规则。也可以理解为,只要有了资源,我们就可以在任何时候灵活地定义各种流量控制规则。在编码的时候,只需要考虑这个代码是否需要保护,如果需要保护,就将之定义为一个资源。

    对于主流的框架,我们提供适配,只需要按照适配中的说明配置,Sentinel 就会默认定义提供的服务,方法等为资源。

    简单来说就是,服务限流,熔断,资源保护的熔断限流框架

  • 为什么要用sentinel ?

    很大部分是因为,springcloud版熔断器Hystrix已经闭源,都是网alibabacloud方向走,so~你懂的!哈哈哈哈

  • sentinel 的几种使用方式

    sentinel 可以整合Web Servlet、Dubbo、Spring Cloud、gRPC、Spring WebFlux、Reactor 。下面介绍整合nacos版本的cloud,简单概括sentinel 的使用方式有两种 :

    1:基于网关route 维度

    2:基于Api 维度

这个几个问题,小白我简单回答一下吧!哈哈哈哈哈哈哈!!!!!

话不多说,我们先来说一下集成getway的把:

  • 首先得下载阿里巴巴sentinel 控制台:

这里的版本是用的1.8.0,注意sentinel 1.6.0以下版本的熔断机制是不包含业务异常的:

下载地址:

https://github-production-release-asset-2e65be.s3.amazonaws.com/128018428/31fc3d00-e329-11ea-8ee6-0f4c3d54c405?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIWNJYAX4CSVEH53A%2F20200904%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20200904T024259Z&X-Amz-Expires=300&X-Amz-Signature=311db8993367e884aea58afea95cb9617f64acb91912442c08e83acf026d414c&X-Amz-SignedHeaders=host&actor_id=33771942&key_id=0&repo_id=128018428&response-content-disposition=attachment%3B%20filename%3Dsentinel-dashboard-1.8.0.jar&response-content-type=application%2Foctet-stream

  • 启动sentinel-dashboard-1.8.0.jar

    默认端口是,8080,可以自行修改,默认登录名密码 sentinel,sentinel

    java -jar sentinel-dashboard-1.8.0.jar -Dserver.port=8888
    
  • 控制面板

    在这里插入图片描述

  • 网关依赖,主要说与sentinel相关的,启动boot的依赖自行添加,2.0X以上,cloud用匹配的版本就行。

\

<!--网关相关依赖-->
<dependency>
         <groupId>org.springframework.cloud</groupId>
         <artifactId>spring-cloud-starter-gateway</artifactId>
     </dependency>
     <dependency>
         <groupId>org.springframework.cloud</groupId>
         <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
     </dependency>
<!--断点暴露健康检查-->
     <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-actuator</artifactId>
     </dependency>  
<!--sentinel 服务限流-->
     <dependency>
         <groupId>com.alibaba.cloud</groupId>
         <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
     </dependency>

     <dependency>
         <groupId>com.alibaba.cloud</groupId>
         <artifactId>spring-cloud-alibaba-sentinel-gateway</artifactId>
     </dependency>

     <dependency>
         <groupId>org.springframework.cloud</groupId>
         <artifactId>spring-cloud-starter-gateway</artifactId>
     </dependency>  
  • nacos getway 配置,网关相关的自行添加

    spring:
      cloud:
        sentinel:
          transport:
            dashboard: http://localhost:8889 #控制台的端口url,通讯是用的tcp长协议
    #暴露端点,主要与sentinel相关的两个配置
    management:
      endpoints:
        web:
          exposure:
            include: '*'
      endpoint:
        health:
          show-details: ALWAYS
    
    下面可参考我的配置:
    
    server:
      port: 8301
    spring:
      cloud:
        sentinel:
          transport:
            dashboard: http://localhost:8889  
        gateway:
          globalcors:
            corsConfigurations:
              '[/**]':
                allowedOrigins: "*"
                allowedMethods: "*"
                allowedHeaders: "*"
                allowCredentials: true
          routes:
            - id: lcw-Auth-Social
              uri: lb://lcw-Auth
              predicates:
                - Path=/auth/social/**
              filters:
                - name: Hystrix
                  args:
                    name: socialfallback
                    fallbackUri: forward:/fallback/lcw-Auth
            - id: lcw-Auth
              uri: lb://lcw-Auth
              predicates:
                - Path=/auth/**
              filters:
                - name: Hystrix
                  args:
                    name: authfallback
                    fallbackUri: forward:/fallback/lcw-Auth            
            - id: lcw-Server-System
              uri: lb://lcw-Server-System
              predicates:
                - Path=/system/**
              filters:
                - name: Hystrix
                  args:
                    name: systemfallback
                    fallbackUri: forward:/fallback/lcw-Server-System
            - id: lcw-Server-Generator
              uri: lb://lcw-Server-Generator
              predicates:
                - Path=/generator/**
              filters:
                - name: Hystrix
                  args:
                    name: generatorfallback
                    fallbackUri: forward:/fallback/lcw-Server-Generator
            - id: lcw-Server-Job
              uri: lb://lcw-Server-Job
              predicates:
                - Path=/job/**
              filters:
                - name: Hystrix
                  args:
                    name: jobfallback
                    fallbackUri: forward:/fallback/lcw-Server-Job
            - id: lcw-Server-test
              uri: lb://lcw-Server-Test
              predicates:
                - Path=/test/**
              filters:
                - name: Hystrix
                  args:
                    name: testfallback
                    fallbackUri: forward:/fallback/lcw-Server-Test
          loadbalancer:
            use404: true
          default-filters:
            - StripPrefix=1
            - FebsDocGatewayHeaderFilter
    #  autoconfigure:
    #    exclude: org.springframework.boot.autoconfigure.mongo.MongoReactiveAutoConfiguration,org.springframework.boot.autoconfigure.data.mongo.MongoReactiveRepositoriesAutoConfiguration,org.springframework.boot.autoconfigure.mongo.MongoAutoConfiguration
        
    # 网关增强配置
      data:
         mongodb:
           host: ${
          
          mongo.url}
           port: 27017
           database: febs_cloud_route
    
      redis:
        database: 0
        host: ${
          
          redis.url}
        port: 6379
        username: root
        password: 123456
        lettuce:
          pool:
            min-idle: 8
            max-idle: 500
            max-active: 2000
            max-wait: 10000
        timeout: 5000
    
    # 网关增强配置
    febs:
      gateway:
        enhance: true
        jwt:
          secret: 123456
          expiration: 36000
      doc:
        gateway:
          enable: true
          resources: "lcw-Server-System,lcw-Server-Test,lcw-Auth,lcw-Server-Generator,lcw-Server-Job"
    
    hystrix:
      command:
        default:
          execution:
            isolation:
              thread:
                timeoutInMilliseconds: 10000
        socialfallback:
          execution:
            isolation:
              thread:
                timeoutInMilliseconds: 60000    
    
    ribbon:
      eager-load:
        enabled: true
    
    management:
      endpoint:
        health:
          show-details: ALWAYS
      endpoints:
        web:
          exposure:
            #include: health,info,gateway,'*'
            include: '*'
    
    
    

    配置限流规则

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GLXqHnNn-1599203323001)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images)]

    设置网关限流:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-o69VVlrT-1599203323002)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images)]

针对来源就是服务应用后面的后缀。单位阈值是指每秒限制请求多少个,点击确定后找到流控规则。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zUhSvMPo-1599203323005)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images)]

配置资源名,资源路径:

  • 编写测试controller

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AwxP2vra-1599203323006)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images)]

  • 测试接口

    这里我使用的是Apache JMeter测试,模拟并发。

在这里插入图片描述

配置线程组的线程数:

在这里插入图片描述

  • 运行测试

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aooyYUSJ-1599203323009)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20200904143916924.png)]

  • 控制台输出结果

在这里插入图片描述

咦,怎么会有三个,刚刚不是设置的2吗,哈哈哈哈。这是单位1s 中有两个能过去。正常是两个。

Api的话针对,服务接口限流就行。现在返回接果还要处理一下。后面继续say拉!
还要很多限流方式,比如manggo加redis,
思路说一下吧,限流黑名单无非就是ip+url,规则存manggo,读到缓存,每次取redis数据判断就行了,写个计时器。黑名单ip是唯一标识。限流这原始url 是唯一标识。没达到限制此次。incr 行。
当然是看官方文档拉:

https://github.com/alibaba/Sentinel/wiki/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8

https://github.com/alibaba/spring-cloud-alibaba/wiki/Sentinel

猜你喜欢

转载自blog.csdn.net/qq_38893133/article/details/108404636