微服务组件 alibaba-sentinel 介绍?
- 雪崩问题
- 微服务调用链路中的某个服务故障,引起整个链路中的所有微服务都不可用
解决雪崩问题方式
- 超时处理
- 设定超时时间,请求超过一定时间没有响应就返回错误信息,不会无休止等待
- 仓壁模式
- 限定每个业务能使用的线程数,避免耗尽整个tomcat的资源,因此也叫线程隔离
- 熔断降级
- 由断路器统计业务执行的异常比例,如果超出阈值则会熔断该业务,拦截访问该业务的一切请求
流量控制
Sentinel是阿里巴巴开源的一款微服务流量控制组件。官网地址:https://sentinelguard.io/zh-cn/index.html
- 超时处理
簇点链路
- 项目内的调用链路,链路中被监控的每个接口就是一个资源
限流规则
- 流控:流量控制
- 降级:降级熔断
- 热点:热点参数限流,是限流的一种
- 授权:请求的权限控制
- 限流规则点击高级选项可以选择三种流控模式
- 直接:统计当前资源的请求,触发阈值时对当前资源直接限流,也是默认的模式
- 关联:统计与当前资源相关的另一个资源,触发阈值时,对当前资源限流
- 链路:统计从指定链路访问到本资源的请求,触发阈值时,对指定链路限流
- 流控效果
线程隔离有两种方式实现
断路器熔断策略有三种
修改配置,开启sentinel功能
- 修改OrderService的application.yml文件,开启Feign的Sentinel功能
feign:sentinel:enabled: true # 开启feign对sentinel的支持
- 修改OrderService的application.yml文件,开启Feign的Sentinel功能
编写失败降级逻辑
在feing-api项目中定义类,实现FallbackFactory
```java import cn.itcast.feign.clients.UserClient; import cn.itcast.feign.pojo.User; import feign.hystrix.FallbackFactory; import lombok.extern.slf4j.Slf4j;
@Slf4j
public class UserClientFallbackFactory implements FallbackFactory
- 在feing-api项目中的DefaultFeignConfiguration类中将UserClientFallbackFactory注册为一个Bean
```java
@Bean
public UserClientFallbackFactory userClientFallbackFactory(){
return new UserClientFallbackFactory();
}
- 在feing-api项目中的UserClient接口中使用UserClientFallbackFactory ```java import cn.itcast.feign.clients.fallback.UserClientFallbackFactory; import cn.itcast.feign.pojo.User; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable;
@FeignClient(value = “userservice”, fallbackFactory = UserClientFallbackFactory.class) public interface UserClient {
@GetMapping("/user/{id}")
User findById(@PathVariable("id") Long id);
Feign整合Sentinel的步骤
- 在application.yml中配置:feign.sentienl.enable=true
- 给FeignClient编写FallbackFactory并注册为Bean
- 将FallbackFactory配置到FeignClient
