一.微服务中的缓存雪崩
由于微服务链路中的某个服务故障,导致整个链路级联失败,这就是微服务雪崩
1.产生原因:
<1>服务提供者阻塞或者故障
<2>服务调用者没有做好异常处理
<3>整个链路级联失败,导致集群故障
2.解决方案
<1>请求限流
使用一个限流器,当调用某个服务时,先经过限流器,使得同一时间服务请求的并发数小于或者等于限流器的阙值
<2>线程隔离
为不同服务设立最大可用线程,这样一个服务出现故障便不会影响其他服务
<3>服务熔断
编写服务降级逻辑,当服务出现故障或者访问过慢的时候,可以抛异常,也可以发送提示或者数据,当某个业务异常比例过高的时候,证明该服务出现故障,直接实现服务降级
二.运用Sentinel实现微服务保护
1.引入依赖
<!--sentinel-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
2.配置控制台
spring:
cloud:
sentinel:
transport:
dashboard: localhost:8090
3.微服保护
<1>请求限流
<2>线程隔离

<4>服务熔断
1.编写Fallback实现请求降级
<1>创建Itemclient类实现FallbackFactory
@Slf4j
public class ItemClientFallbackFactory implements FallbackFactory<ItemClient>{
@Override
public ItemClient create(Throwable cause) {
return new ItemClient() {
@Override
public Set<ItemDTO> queryItemByIds(Set<Long> ids) {
log.error("查询商品信息失败", cause);
return Set.of();
}
};
}
}
<2>编写配置类注入Bean对象
@Configuration
public class ItemClientConfig {
@Bean
public ItemClientFallbackFactory itemFallbackFactory() {
return new ItemClientFallbackFactory();
}
}
<3>使用ItemClientFallbackFactory
@FeignClient(value = "item-service",fallback = ItemClientFallbackFactory.class)
public interface ItemClient {
@GetMapping("/items")
Set<ItemDTO> queryItemByIds(Set<Long> ids);
}
2.实现服务熔断

3.熔断原理
熔断是依靠断位器来实现的
断路器有三个状态 close open half-open
断路器一开始处于open状态,当慢请求或者异常请求达到所设置的阙值的时候,就会进入close状态,close是一个临时状态,当达到一定时间后会进入half-oepn状态,这时会向服务发送一个请求,如果服务正常则会进入close状态,否则进行open状态。像这样不断循环。