为什么需要服务保护:
雪崩问题:在微服务项目中.因为一个服务故障不可用,导致所有该服务的消费方大量的请求积压,tomcat不可用,导致整个服务调用链上的服务全部不可用的现象

解决雪崩问题的策略:
1.设置超时时间:
当请求超过一定的时间没有响应就返回错误信息,不会让服务进入无休止等待状态(只能缓解雪崩问题,不能从根本意义上解决)
2.舱壁模式
像大型轮船的船舱一样,把每个业务进行分离,限制每个业务能使用的线程数,避免某个业务消耗掉整个tomcat的所有资源,因此也叫线程隔离(但是会有一定的性能浪费) 会通过类似于给每一个业务一个线程池/信号量这样的方案

3.熔断降级
由断路器统计业务的异常比例,如果超出阈值则会熔断业务,拦截访问该业务的一切请求,快速的将这个访问拒绝掉. 直到业务恢复才放行请求

4.流量控制
限制业务的访问QPS,将雪崩问题扼杀在摇篮,避免出现故障

使用Sentinel做服务保护的优点:


运行控制台:使用java -jar就可以轻易的将控制台运行起来,常见可以指定的参数有:端口号,用户名密码等
java -Dserver.port=8090 -jar sentinel-dashboard-1.8.1.jar
微服务整合Sentinel:
1.首选在微服务中增加Sentinel的依赖:
1
2
3
4
5 <!--sentinel-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
2.在yml配置文件中填写sentinel的服务地址配置:
1
2
3
4
5 spring:
cloud:
sentinel:
transport:
dashboard: localhost:8090
3.访问任意一个微服务的端点,即可触发Sentinel的监控
簇点链路: 项目内部的调用链路,链路中被监控的每个接口就是一个资源,默认情况下Sentinel会监控SpringMVC中的每一个端点(Endpint),因此SpringMVC中的每一个端点就是调用链路中的一个资源