Sentinel的一些知识二

11231041

下一个是 熔断规则是异常数  

和异常比例一样 只是换成了异常个数

Sentinel的一些知识二_第1张图片

1秒内的异常数有3个,就熔断2秒

Sentinel的一些知识二_第2张图片

下一步 进行压力测试

11231343

热点规则

没懂这个热点规则存在的意义

某个用户访问过于频繁,对其进行限制,给其他用户访问的机会。毕竟对公司而言,是要尽可能的扩大用户群体。

Sentinel的一些知识二_第3张图片

SentinelResource(Value="hotspot")中的Value指定了资源名称

Sentinel的一些知识二_第4张图片

Sentinel的一些知识二_第5张图片

增加参数类型,参数值,限流阈值

Sentinel的一些知识二_第6张图片

授权规则

根据调用来源判断

Sentinel的一些知识二_第7张图片

Sentinel的一些知识二_第8张图片

11231412

设置白名单

定义一个参数叫 serviceName,这个参数是从哪里传过来的呢?

Sentinel的一些知识二_第9张图片

Sentinel的一些知识二_第10张图片

在地址栏直接增加参数

Sentinel的一些知识二_第11张图片

使用Feign发送请求,奥,这就连起来了呀,用OpenFeign发送请求,授权规则进行处理

用一个拦截器,设置相应的名称

Sentinel的一些知识二_第12张图片

Sentinel的一些知识二_第13张图片

对任何请求进行操作一定是个拦截器

11231449

系统规则

Sentinel的一些知识二_第14张图片

Sentinel的一些知识二_第15张图片

是一整个接口的

Sentinel的一些知识二_第16张图片

集群规则

Sentinel的一些知识二_第17张图片

独立模式

Sentinel的一些知识二_第18张图片

嵌入模式

应用实例 Token Server

Sentinel的一些知识二_第19张图片

Sebtinel规则持久化

Sentinel的一些知识二_第20张图片

数据放在内存中,刷新会消失

11231524

Sentinel的一些知识二_第21张图片

Sentinel的一些知识二_第22张图片

push模式规则不存在本地文件,而是存在Nacos中。重启时,从Nacos读取。

Sentinel的一些知识二_第23张图片

问:这个Sentinel客户端就是服务的客户端么?

Sentinel的一些知识二_第24张图片

怎么把sentinel和Nacos连接上,需要修改源码

11231628

第一步

test 去掉

Sentinel的一些知识二_第25张图片

第二步 修改nacos的配置文件

Sentinel的一些知识二_第26张图片

下一步 增加依赖

Sentinel的一些知识二_第27张图片

下一步 添加配置

Sentinel的一些知识二_第28张图片

Sentinel的一些知识二_第29张图片

11231645

RestTemplate整合Sentinel

加上这个语句 SentinelRestTemplate

Sentinel的一些知识二_第30张图片

11231702

下面是OpenFeign整合Sentinel的步骤

第一步 引入相应的依赖

Sentinel的一些知识二_第31张图片

第二步 在配置中开启服务

Sentinel的一些知识二_第32张图片

下面是限流算法

1.计数器固定窗口算法

2.计数器滑动窗口算法

其实实质就是把一秒再细分为多个小间隔

Sentinel的一些知识二_第33张图片

09561124

3.漏斗算法

转换思想,把处理的对象从时间间隔转化成请求本身。

前两种算法都不是连续的

4.令牌桶算法

引入一个新的变量

Sentinel源码

五种方式进行限流

api http restTemplate Feign @SentinelRecource

第一种 使用API进行限流

Sentinel的一些知识二_第34张图片

第二种 使用http进行限流

SphU.entry 在一个拦截器里面使用

Sentinel的一些知识二_第35张图片

Sentinel的一些知识二_第36张图片

形成类 SentinelInvocationHandler 实现InvocationHandler接口

Sentinel的一些知识二_第37张图片

Sentinel的一些知识二_第38张图片

作用点 四个方式 有四个对应

http请求 AbstractSentinelInterceptor

WebMVCConfig

所有请求通过preHandler方法,方法中使用

自动装配类

Sentinel的一些知识二_第39张图片

spring.factories里引入了SentinelAutoConfiguration,还有SentinelFeignAutoConfiguration

Sentinel的一些知识二_第40张图片

Sentinel的一些知识二_第41张图片

返回builder,builder中返回SentinelInvocationHandler,SentinelInvocationHandler中有invok方法,invok方法中有SphU.entry方法

Sentinel的一些知识二_第42张图片

11241102

entry →entryWithPriority→责任链→lookProcessChain

加载8个类,8个槽

Sentinel的一些知识二_第43张图片

类加载过来了,下一步需要通过类构建对象

Sentinel的一些知识二_第44张图片

Sentinel的一些知识二_第45张图片

开始first和end相同,形成一条链

Sentinel的一些知识二_第46张图片

2.包装成为CtEntry

FlowRuleChecker.java里面

先有canPassCheck函数,再passLocalCheck函数  进行流控:快速失败,warm up ,排队等待

Sentinel的一些知识二_第47张图片

调用rule.getRater().canPass()方法,返回DefaultController.canpass()多态的使用,canpass函数

Sentinel的一些知识二_第48张图片

StatisticNode.java

RateLimiterController.java

Sentinel的一些知识二_第49张图片

问:等待时间是已知还是未知?

逻辑是:每200秒通过一个请求

前提是:漏桶每秒处理20个请求,很多请求过来了,堆积到一起,一个队列里面。队列有容量,超过容量的请求直接拒绝。队列有容量100。那么,第100个请求,被处理的时间是当前时间+5秒。

问:等待时间大于超时时间,这个超时时间是什么地方确定的?

Sentinel的一些知识二_第50张图片

11241429

排队完了,进入降级DegradeSlot.java的entry

Sentinel的一些知识二_第51张图片

Sentinel源码中熔断降级的实现

原理图如下

Sentinel的一些知识二_第52张图片

代码的实现  DegradeSlot.java

LeapArray.java

我有问题

问:为什么要这样做?

主体是请求,一个请求过来,对这个请求的相关数据进行分析

Sentinel的一些知识二_第53张图片

问:没有窗口新建一个窗口????这个窗口不是以绝对时间10点1分1秒和10点一分2秒?而是看相对时间?

怎么会没有窗口?我的理解是窗口都是已经确定好了的?

新建一个窗口

第1个

MetricBucket.java

2个窗口 1秒  500毫秒一个窗口

11241514

消耗时间

Sentinel的一些知识二_第54张图片

熔断降级

半开状态

创建时间

打开 关闭的状态

超过阈值

慢调用的比例大于预设的阈值,把熔断器打开

问:源码的修改??又是什么意思?不是直接在源码上改么?保存,打包就行了呀

难道不能保存?

Sentinel的一些知识二_第55张图片

你可能感兴趣的:(sentinel)