11231041
下一个是 熔断规则是异常数
和异常比例一样 只是换成了异常个数
1秒内的异常数有3个,就熔断2秒
下一步 进行压力测试
11231343
热点规则
没懂这个热点规则存在的意义
某个用户访问过于频繁,对其进行限制,给其他用户访问的机会。毕竟对公司而言,是要尽可能的扩大用户群体。
SentinelResource(Value="hotspot")中的Value指定了资源名称
增加参数类型,参数值,限流阈值
授权规则
根据调用来源判断
11231412
设置白名单
定义一个参数叫 serviceName,这个参数是从哪里传过来的呢?
在地址栏直接增加参数
使用Feign发送请求,奥,这就连起来了呀,用OpenFeign发送请求,授权规则进行处理
用一个拦截器,设置相应的名称
对任何请求进行操作一定是个拦截器
11231449
系统规则
是一整个接口的
集群规则
独立模式
嵌入模式
应用实例 Token Server
Sebtinel规则持久化
数据放在内存中,刷新会消失
11231524
push模式规则不存在本地文件,而是存在Nacos中。重启时,从Nacos读取。
问:这个Sentinel客户端就是服务的客户端么?
怎么把sentinel和Nacos连接上,需要修改源码
11231628
第一步
将
第二步 修改nacos的配置文件
下一步 增加依赖
下一步 添加配置
11231645
RestTemplate整合Sentinel
加上这个语句 SentinelRestTemplate
11231702
下面是OpenFeign整合Sentinel的步骤
第一步 引入相应的依赖
第二步 在配置中开启服务
下面是限流算法
1.计数器固定窗口算法
2.计数器滑动窗口算法
其实实质就是把一秒再细分为多个小间隔
09561124
3.漏斗算法
转换思想,把处理的对象从时间间隔转化成请求本身。
前两种算法都不是连续的
4.令牌桶算法
引入一个新的变量
Sentinel源码
五种方式进行限流
api http restTemplate Feign @SentinelRecource
第一种 使用API进行限流
第二种 使用http进行限流
SphU.entry 在一个拦截器里面使用
形成类 SentinelInvocationHandler 实现InvocationHandler接口
作用点 四个方式 有四个对应
http请求 AbstractSentinelInterceptor
WebMVCConfig
所有请求通过preHandler方法,方法中使用
自动装配类
spring.factories里引入了SentinelAutoConfiguration,还有SentinelFeignAutoConfiguration
返回builder,builder中返回SentinelInvocationHandler,SentinelInvocationHandler中有invok方法,invok方法中有SphU.entry方法
11241102
entry →entryWithPriority→责任链→lookProcessChain
加载8个类,8个槽
类加载过来了,下一步需要通过类构建对象
开始first和end相同,形成一条链
2.包装成为CtEntry
FlowRuleChecker.java里面
先有canPassCheck函数,再passLocalCheck函数 进行流控:快速失败,warm up ,排队等待
调用rule.getRater().canPass()方法,返回DefaultController.canpass()多态的使用,canpass函数
StatisticNode.java
RateLimiterController.java
问:等待时间是已知还是未知?
逻辑是:每200秒通过一个请求
前提是:漏桶每秒处理20个请求,很多请求过来了,堆积到一起,一个队列里面。队列有容量,超过容量的请求直接拒绝。队列有容量100。那么,第100个请求,被处理的时间是当前时间+5秒。
问:等待时间大于超时时间,这个超时时间是什么地方确定的?
11241429
排队完了,进入降级DegradeSlot.java的entry
Sentinel源码中熔断降级的实现
原理图如下
代码的实现 DegradeSlot.java
LeapArray.java
我有问题
问:为什么要这样做?
主体是请求,一个请求过来,对这个请求的相关数据进行分析
问:没有窗口新建一个窗口????这个窗口不是以绝对时间10点1分1秒和10点一分2秒?而是看相对时间?
怎么会没有窗口?我的理解是窗口都是已经确定好了的?
新建一个窗口
第1个
MetricBucket.java
2个窗口 1秒 500毫秒一个窗口
11241514
消耗时间
熔断降级
半开状态
创建时间
打开 关闭的状态
超过阈值
慢调用的比例大于预设的阈值,把熔断器打开
问:源码的修改??又是什么意思?不是直接在源码上改么?保存,打包就行了呀
难道不能保存?