Sentinel概述
Sentinel (分布式系统的流量防卫兵) 是阿里开源的一套用于服务容错的综合性解决方案。它以流量为切入点, 从流量控制、熔断降级、系统负载保护等多个维度来保护服务的稳定性。
Sentinel核心分为两个部分:
核心库(Java 客户端):能够运行于所有 Java 运行时环境,同时对Dubbo /Spring Cloud 等框架也有较好的支持。
控制台(Dashboard):基于 Spring Boot 开发,打包后可以直接运行。
Sentinel限流入门
概述
我们系统中的数据库连接池,线程池,nginx的瞬时并发等在使用时都会给定一个限定的值,这本身就是一种限流的设计。限流的目的防止恶意请求流量、恶意攻击,或者防止流量超过系统峰值
第一步需要添加依赖
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
第二部:配置bootstrap.yml,添加sentinel
spring:
cloud:
sentinel:
transport:
dashboard: localhost:8180 # 指定sentinel控制台地址。
第三步,根据需要创建演示对象
空白
~~~
Sentinel的控制台其实就是一个SpringBoot编写的程序,我们需要将我们的服务注册到控制台上,即在微服务中指定控制台的地址,并且还要在消费端开启一个与sentinel控制台传递数据端的端口,控制台可以通过此端口调用微服务中的监控程序来获取各种信息。
Sentinel是什么?(阿里推出一个流量控制平台,防卫兵)
类似Sentinel的产品你知道有什么?(hystrix)
Sentinel是如何对请求进行限流的?(基于sentinel依赖提供的拦截器)
你了解哪些限流算法?(计数器、令牌桶、漏斗算法,滑动窗口算法,…)
Sentinel 默认的限流算法是什么?(滑动窗口算法)
@SentinelResource
阈值类型
QPS(Queries Per Second):当调用相关url对应的资源时,QPS达到单机阈值时,就会限流。
线程数:当调用相关url对应的资源时,线程数达到单机阈值时,就会限流。
设置限流模式
直接模式
Sentinel默认的流控处理就是【直接->快速失败】
关联模式
当关联的资源达到指定阈值,就限流自己
链路模式
链路模式只记录指定链路入口的流量。也就是当多个服务对指定资源调用时,假如流量超出了指定阈值,则进行限流。被调用的方法用@SentinelResource进行注解,然后分别用不同业务方法对此业务进行调用,假如A业务设置了链路模式的限流,在B业务中是不受影响的
你了解sentinel中的阈值应用类型吗?(两种-QPS,线程数)
Sentinel的限流规则中默认有哪些限流模式?(直连,关联,链路)
Sentinel的限流效果有哪些?(快速失败,预热,排队)
为什么要限流? (请求大,资源处理能力不足)
你了解的限流组件有什么? (Sentinel,…)
Sentinel如何实现限流的?(对请求进行拦截,然后通过限流算法对请求进行限制)
Sentinel这里默认使用的限流拦截器是谁?(AbstractSentinelInterceptor->HandlerInterceptor的子类)
你了解Sentinel限流有哪些算法? (计数器,令牌桶,漏桶,滑动窗口算法~sentinel默认)
Sentinel中出现限流异常的父类类型是什么?(BlockException)
Sentinel中默认的限流异常处理器是谁? (DefaultBlockExceptionHandler)
我们可以自定义限流异常处理器吗?(直接或间接实现BlockExceptionHandler接口并交给spring管理)
你了解Sentinel有哪些阈值类型?(QPS,线程数)
Sentinel的流控模式有哪些? (直接模式,关联模式,链路模式)
如何理解Sentinel的关联限流?(霸权方式,当对A的资源的访问量比较大时,限流其它资源的访问)
如何理解Sentinel的链路限流?(对同一个资源的访问,可能会有多条链路,可以对指定链路进行限流)
@SentinelResource注解的作用是什么?(定义限流切入点方法,底层可以基于aop方式对请求链路进行限制)
Sentinel常见的流控效果有哪些?(快速失败,warm up,排队等待)