容错
sentinel页面配置
- 依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
- 注解:无
- 配置:无
- 依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
- 配置
management:
endpoints:
web:
exposure:
include: '*'
- 注解:无
- 官方下载和自己项目版本搭配的sentinel版本。并运行jar包。
- 添加配置:
sentinel:
transport:
#指定sentinel 控制台的地址
dashboard: localhost:8080
然后我们可以测试一下sentinel的界面,是否成功显示。
网页:localhost:8080/#/login
初试账户密码都是sentinel
这里我们有个注意点:sentinel是懒加载,所以当我们程序运行后,输入sentinel的网址,里面是空的,这是因为sentinel是懒加载,需要我们测试一下链路,然后再刷新一下此网址,便可得到下面的页面。
流控规则
直接
QPS:query per second :每秒的查询率
简单设置一下规则,qps = 2,然后测试
关联
1. http://localhost:8010/actuator/sentinel
2. http://localhost:8010/shares/2
然后我们设置shares里面关联actuator
这个规则解释是:当actuator达到限流的时候,就限制shares端口。
修改接口过快,会影响查询接口的调用;
查询接口调用过快,会影响修改接口的调用;
链路:
我们通过代码来学习一下:
@Autowired
private TestService testService;
@GetMapping("/test-A")
public String testA() {
this.testService.common();
return "test-A";
}
@GetMapping("/test-B")
public String testB() {
this.testService.common();
return "test-B";
}
@Service
@Slf4j
public class TestService {
@SentinelResource("common")
public String common() {
log.info("common");
return "common";
}
直接和关联:是微服务级别的限流
链路是api级别的限流
- 快速失败:抛异常
- warm up:根据codeFactor(默认3)【冷加载因子】的值,从阈值/codeFactor,经过预热时长,才到达设置的QPS阈值。使用场景:秒杀服务。
- 排队等待:匀速排队,让请求以均匀的速度通过,阈值类型必须设成QPS,否则无效;应用场景:适用于应对突发流量,希望应用可以在空闲的时候处理请求,而不是直接拒绝请求。
降级规则
- RT:
表达的意思:如果shares/2这个api秒级统计的RT>1ms,并且在5s内通过的请求>=5次,那么就触发降级,断路器打开,等待5s结束,才会关闭降级(断路器)
sentinel默认的RT最大4900ms,如果我们需要设置更大的RT数值,我们通过:Dcsp.sentinel.static.max.rt=xxx修改。
- 异常比例:秒级别
QSP>=5&&异常比例(秒级统计)超过阈值—>触发降级---->时间窗口结束----->关闭降级 - 异常数:分钟级别
异常数(分钟统计)超过阈值—>触发降级——>时间窗口结束——> 关闭降级
注意点:时间窗口<60s可能会出问题
热点规则
sentinel本身是不支持热点规则的,要使用热点规则,需要自己加代码
在时间窗口以内,一旦方法指定的索引参数,他的QPS达到了阈值,那么就会触发限流
热点规则是特殊的流控规则;
使用场景:适用于存在热点参数,某些参数的qps特别高,并且希望提高api可用性的场景。
参数需要基本类型。
系统规则
- Load:负载
当系统load1(1分钟的load)超过阈值,并发线程数超过系统通量时触发,建议设置为CPU核心数*2.5.(仅对linux/unix机器生效),
RT:所有入口流量的平均RT达到阈值触发
线程数:哦呦入口流量的并发线程数达到阈值触发
入口QPS:所有入口流量的QPS达到阈值触发
授权规则
ok,暂时到这,接下一篇博客spring cloud alibaba 笔记(5)
keep moving~~