AlibabaCloud-sentinel限流篇(1)
首先我们来看几个问题吧
-
AlibabaCloud sentinel 是干嘛的?
Sentinel 可以简单的分为 Sentinel 核心库和 Dashboard。核心库不依赖 Dashboard,但是结合 Dashboard 可以取得最好的效果。
这篇文章主要介绍 Sentinel 核心库的使用。如果希望有一个最快最直接的了解,可以参考 新手指南 来获取一个最直观的感受。
我们说的资源,可以是任何东西,服务,服务里的方法,甚至是一段代码。使用 Sentinel 来进行资源保护,主要分为几个步骤:
- 定义资源
- 定义规则
- 检验规则是否生效
先把可能需要保护的资源定义好(埋点),之后再配置规则。也可以理解为,只要有了资源,我们就可以在任何时候灵活地定义各种流量控制规则。在编码的时候,只需要考虑这个代码是否需要保护,如果需要保护,就将之定义为一个资源。
对于主流的框架,我们提供适配,只需要按照适配中的说明配置,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: '*'
配置限流规则
设置网关限流:
针对来源就是服务应用后面的后缀。单位阈值是指每秒限制请求多少个,点击确定后找到流控规则。
配置资源名,资源路径:
-
编写测试controller
-
测试接口
这里我使用的是Apache JMeter测试,模拟并发。
配置线程组的线程数:
-
运行测试
-
控制台输出结果
咦,怎么会有三个,刚刚不是设置的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