第一章 Sentinel

1. 雪崩问题

1.1 应对方案

2. Sentinel

2.1 流控模式

(1)直接模式:统计当前资源的请求,触发阈值时对当前资源直接限流,也是默认的模式

(2)关联模式:统计与当前资源相关的另一个资源,触发阈值时,对当前资源限流

(3)链路模式:统计从指定链路访问到本地资源的请求,触发阈值时,对指定链路限流

2.2 流控效果

流控效果是指请求到达流控阈值时应该采取的措施。

(1)快速失败:达到阈值后,新的请求会被立刻拒绝并抛出FlowException异常。是默认的处理方式。

(2)warm up:预热模式,对超出阈值的请求同样是拒绝并抛出异常。但这种模式阈值会动态变化,从一个较小值逐渐增加到最大阈值。

(3)排队等待:让所有的请求按照先后次序排队执行,两个请求的间隔不能小于指定时长。

2.3 线程隔离

2.3.1 线程隔离的两种手段是?

信号量隔离

线程池隔离

2.3.2 信号量隔离的特点是?

基于计数器模式,简单,开销小;

Sentinel的线程隔离就是信号量

2.3.3 线程池隔离的特点是?

基于线程池模式,有额外开销,但隔离控制更强

2.4 熔断降级

2.4.1 熔断策略

(1)慢调用比例:

超过指定时长的调用为慢调用,统计单位时长内慢调用的比例,超过阈值则熔断。

(2)异常比例:

统计单位时长内异常调用的比例,超过阈值则熔断

(3)异常数:

统计单位时长内异常调用的次数,超过阈值则熔断

2.5 规则持久化

(1)原始模式:保存在内存

(2)pull模式:保存在本地文件或数据库,定时去读取

(3)push模式:保存在nacos,监听变更实时更新

3. 踩坑记录

1.依赖兼容性

https://www.jianshu.com/p/9e847aca49c3

这个兼容性问题让我吃了不少苦😭

2.在编写feign的降级逻辑代码时,出现一个想法:

在UserClientFallBackFactory类上添加@Component注解,而不是用@Bean注解在逻辑上不是一样吗?

通过实际运行程序,发现报错:找不到该对象。后来仔细想了想发现问题的原因:

在Spring框架中,当你想要将第三方库中的组件集成到你的应用中时,由于你无法修改第三方库的源代码来添加 @Component注解,因此不能直接使用Spring的自动装配功能。这是因为 @Component是一个类级别的注解,它允许Spring通过类路径扫描自动检测并注册这些组件为Bean。但是,对于第三方库中的类,你并没有这样的权限或能力去修改它们的代码。

在这种情况下,你可以使用 @Bean注解来达到相同的目的。@Bean是一个方法级别的注解,它允许你在配置类中声明一个Bean,并提供更多的灵活性。通过在配置类中使用 @Bean注解的方法,你可以创建并配置第三方库中的组件实例,并将其注册为Spring容器管理的Bean。这样,你就可以在应用中像使用其他Spring管理的Bean一样使用这些第三方组件了。

代码中的FallbackFactory就是第三方库,所以不能用@Component。

3.更换jdk版本一直失败

之前jdk的环境变量版本是17,在运行Spring项目时一直报错:无效的标记: --release。查找资料后发现可能是本地jdk版本与IDEA的jdk版本不一致的问题,但是在修改环境变量并且多次重启电脑后还是jdk17.

在查找相关资料后得知,jdk17会自动配置环境变量:

将自己配置的jdk路径上移,就能更改jdk的优先级了。

相关推荐
我命由我1234541 分钟前
Java NIO 编程 - NIO Echo Server、NIO Client(NIO 异步客户端、NIO Selector 异步客户端)
java·开发语言·网络·java-ee·intellij-idea·intellij idea·nio
嗯、.41 分钟前
使用Itext9生成PDF水印,兼容不同生成引擎的坐标系(如: Skia、OpenPDF)
java·pdf·itextpdf·openpdf·坐标变换矩阵
前端炒粉2 小时前
35.LRU 缓存
开发语言·javascript·数据结构·算法·缓存·js
星释3 小时前
Rust 练习册 75:ETL与数据转换
开发语言·rust·etl
happyjoey2173 小时前
使用Qt自带的Maintenance Tool将Qt6.9升级为QT6.10
开发语言·qt
断剑zou天涯4 小时前
【算法笔记】窗口内最大值或最小值的更新结构
java·笔记·算法
m***66734 小时前
SQL 实战—递归 SQL:层级结构查询与处理树形数据
java·数据库·sql
鲸沉梦落6 小时前
Java中的Stream
java
yihuiComeOn6 小时前
[源码系列:手写Spring] AOP第二节:JDK动态代理 - 当AOP遇见动态代理的浪漫邂逅
java·后端·spring
p***h6437 小时前
JavaScript在Node.js中的异步编程
开发语言·javascript·node.js