2020.3.31笔记——Sentinel应用②

资源定义

在sentinel中所有可以监控的都属于资源,在默认的情况下所有的controller都是资源,资源名就是访问路径。
2020.3.31笔记——Sentinel应用②_第1张图片
在这里插入图片描述
还有一种方式就是通过@SentinelResource指定资源,这样情况下通过value属性设置资源名。
2020.3.31笔记——Sentinel应用②_第2张图片
注意下面这种在controller上面加的@SentinelResource指定的资源和默认的controller资源是属于两个资源,两者独立(各种设置的规则独立)。
2020.3.31笔记——Sentinel应用②_第3张图片
在这里插入图片描述

流控规则

官方文档
https://github.com/alibaba/Sentinel/wiki/%E6%B5%81%E9%87%8F%E6%8E%A7%E5%88%B6

流控规则我们可以直接在簇点链路上选择一个资源设置
2020.3.31笔记——Sentinel应用②_第4张图片

阈值类型

这里先介绍一下阈值类型,存在两种阈值类型

  • QPS:每秒的访问量;
  • 线程数:处理这个请求的线程数。

2020.3.31笔记——Sentinel应用②_第5张图片

流控模式

再就是流控模式,总共三种模式,默认是直接模式
2020.3.31笔记——Sentinel应用②_第6张图片

  • 直接模式

这种模式是默认选择的默认,简单来说就是我们选择的资源触发了设定的阈值,就会开启服务降级或者服务熔断。

  • 关联模式

如下图所示,关联模式下针对的是两个资源,大体的意思是,关联的资源如果触发了我们设置的阈值那么设置规则的资源就会被降级或熔断。
2020.3.31笔记——Sentinel应用②_第7张图片

  • 链路模式

假设有如下的调用链
2020.3.31笔记——Sentinel应用②_第8张图片
上图中来自入口Entrance1和Entrance2的请求都调用到了资源NodeA,Sentinel允许只根据某个入口的统计信息对资源限流。比如我们可以设置FlowRule.strategy为RuleConstant.CHAIN,同时设置FlowRule.ref_identity为Entrance1 来表示只有从入口Entrance1的调用才会记录到NodeA的限流统计当中,而不关心经Entrance2到来的调用。

调用链的入口(上下文)是通过API方法ContextUtil.enter(contextName)定义的,其中contextName即对应调用链路入口名称。

简单来说就是存在一个资源被许多接口调用,但是我们只关心从某个接口调用过来的流控,那么就可以使用链路模式来进行流控。不过这里的来源我们必须通过API的形式定义。

那么假设有如下的两个controller,都调用了testService的test方法,相当于这个资源的链路有两个入口,这里我们只想控制从getUser进入的请求。
2020.3.31笔记——Sentinel应用②_第9张图片
2020.3.31笔记——Sentinel应用②_第10张图片
那么我们就可以设置如下的流控规则
2020.3.31笔记——Sentinel应用②_第11张图片

流控效果

Sentinel总共提供了三种流控效果,默认是快速失败
2020.3.31笔记——Sentinel应用②_第12张图片

  • 快速失败

这种流控效果是默认的,也是最简单的,它的效果就是超过阈值就会响应错误信息。

  • Warm Up

它使用的是令牌桶算法,这种流控效果其实存在两个阈值,平时的阈值为我们设置的单机阈值/3。一旦qps激增,超过我们单机阈值/3,等待我们设置的预热时长后,就会将阈值重新设置为单机阈值,如下图所示,平时阈值是3,如果qps超过3,5秒过后阈值变为10。
2020.3.31笔记——Sentinel应用②_第13张图片

官网描述
2020.3.31笔记——Sentinel应用②_第14张图片

  • 排队等待

采用的漏斗算法,又称为匀速排队。如下所示,如果我们这么设置,单机阈值设置的qps为2,相当于每0.5秒只处理一个请求,每个请求的超时时长为1秒,所有的请求都相当于处于一个队列中,而且有序。
2020.3.31笔记——Sentinel应用②_第15张图片

官方文档
https://github.com/alibaba/Sentinel/wiki/%E6%B5%81%E9%87%8F%E6%8E%A7%E5%88%B6#%E5%8C%80%E9%80%9F%E6%8E%92%E9%98%9F
2020.3.31笔记——Sentinel应用②_第16张图片

降级规则

官方文档
https://github.com/alibaba/Sentinel/wiki/%E7%86%94%E6%96%AD%E9%99%8D%E7%BA%A7

同样我们可以直接在簇点链路处添加降级规则
2020.3.31笔记——Sentinel应用②_第17张图片
降级策略总共有三种
2020.3.31笔记——Sentinel应用②_第18张图片

官方文档
https://github.com/alibaba/Sentinel/wiki/%E7%86%94%E6%96%AD%E9%99%8D%E7%BA%A7#%E9%99%8D%E7%BA%A7%E7%AD%96%E7%95%A5
2020.3.31笔记——Sentinel应用②_第19张图片

RT

在这里插入图片描述
当1s内持续进入5个请求,对应时刻的平均响应时间(秒级)均超过RT设置的时间,那么会在设置的时间窗口的时间内熔断所有的请求。

异常比例

在这里插入图片描述
当资源的每秒请求量 >= 5,并且每秒异常总数占通过量的比值超过上面设置的异常比例,那么资源进入降级状态,在之后设置的时间窗口内对这个方法的调用都会自动地返回进行服务降级。

异常数

在这里插入图片描述
当资源近1分钟的异常数目超过阈值(上面设置的异常数)之后会进行熔断,熔断的时间就是上面设置的时间窗口,注意这里的时间窗口是分钟级别的,因为小于60s,则结束熔断状态后仍可能再进入熔断状态。

服务降级方法

设置服务降级方法,通过@SentinelResource注解实现,这个注解相当于创建了一个资源,这个资源和/getUser资源是两个资源。

blockHandler属性是配置的非程序引起的服务降级,比如qps超过阈值,而且这个降级方法除了可以接收接口传递的参数外还可以接收一个BlockException错误对象。
2020.3.31笔记——Sentinel应用②_第20张图片
fallback配置的是由程序内部引起的报错,如下的被0除报错
2020.3.31笔记——Sentinel应用②_第21张图片
还可以直接设置blockHandlerClass,将降级方法放入一个专门负责降级的类
2020.3.31笔记——Sentinel应用②_第22张图片
注意这里的降级方法必须是静态方法
2020.3.31笔记——Sentinel应用②_第23张图片

热点流控

官方文档
https://github.com/alibaba/Sentinel/wiki/%E7%83%AD%E7%82%B9%E5%8F%82%E6%95%B0%E9%99%90%E6%B5%81

何为热点?热点即经常访问的数据。很多时候我们希望统计某个热点数据中访问频次最高的 Top K 数据,并对其访问进行限制。比如:

  • 商品 ID 为参数,统计一段时间内最常购买的商品 ID 并进行限制
  • 用户 ID 为参数,针对一段时间内频繁访问的用户 ID 进行限制

同样我们可以在簇点链路中直接为某个资源添加热点规则
2020.3.31笔记——Sentinel应用②_第24张图片
首先我们需要选定需要添加热点规则的参数,这里是根据参数的索引进行选择,这里的阈值是对于这个参数整体的阈值,所以一般会设置正常的数值,统计窗口时长就是多少时间到达阈值。
2020.3.31笔记——Sentinel应用②_第25张图片
接着我们需要继续编辑此规则,可以选择参数类型,不过只有7种基本的数据类型
2020.3.31笔记——Sentinel应用②_第26张图片
下面就是代表如果第一个参数的值为zdd这么一个字符串且超过阈值1,那么就会触发限流
在这里插入图片描述
2020.3.31笔记——Sentinel应用②_第27张图片

系统自适应限流

官方文档
https://github.com/alibaba/Sentinel/wiki/%E7%B3%BB%E7%BB%9F%E8%87%AA%E9%80%82%E5%BA%94%E9%99%90%E6%B5%81

在最左侧还有一项系统规则,这里面可以添加各种类型的规则,而且添加的系统规则属于全局规则,可以覆盖我们在前面添加的流控规则、降级规则、热点规则等等。
2020.3.31笔记——Sentinel应用②_第28张图片
2020.3.31笔记——Sentinel应用②_第29张图片

官方文档
https://github.com/alibaba/Sentinel/wiki/%E7%B3%BB%E7%BB%9F%E8%87%AA%E9%80%82%E5%BA%94%E9%99%90%E6%B5%81#%E7%B3%BB%E7%BB%9F%E8%A7%84%E5%88%99
2020.3.31笔记——Sentinel应用②_第30张图片

你可能感兴趣的:(微服务笔记)