1.3 隔离和降级

一、FeignClient整合Sentinel

  1. 虽然限流可以尽量避免因高并发而引起的服务故障,单服务还会因为其他原因而故障。而要将这些故障控制在一定范围,避免雪崩,就要靠线程隔离(舱壁模式)和熔断降级手段了。

  2. 不管是线程隔离还是熔断降级,都是以对客户端(调用方)的保护

  3. Feign整合Sentinel

    1. 修改yml文件,添加设置(feign与Sentinel坐标都要添加)

      feign:
        sentinel:
        	enable: true  # 开启Feign的Sentinel功能
    2. 给FeignClient编写失败后的降级逻辑

      1. 方式一:FallbackClass,对无法远程调用的异常做处理

      2. 方式二:FallbackFactory,可以对远程调用的异常做处理,可以选择这种

    3. 编写降级方法:

      1. 编写降级方法

        public class UserClientFallbackFactory implements FallbackFactory<UserServiceClient> {
            
            @Override
            public UserServiceClient create(Throwable cause) {
                // 使用匿名内部类取编写
                return new UserServiceClient() {
                    @Override
                    public User findById(Long id) {
                        // 个人操作,输出日志,返回默认什么都可以
                        return new User();
                    }
                };
            }
            
        }
      2. 将编写的方法注册成Bean

        public class UserClientConfig {
            
            @Bean
            public UserClientFallbackFactory userClientFallbackFactory() {
                return new UserClientFallbackFactory();
            }
            
        }
      3. 在远程调用接口(服务对外开放的接口文件)中使用降级工厂

        @FeignClient(value = "user-service", fallbackFactory = UserClientFallbackFactory.class)  // 只添加了这
        public interface UserServiceClient {
        
            @GetMapping("/user/{id}")
            User findById(@PathVariable("id") Long id);
        
        }

二、线程隔离(舱壁模式)

  1. 线程隔离的两种实现方式:

    1. 线程池隔离

      1. 优点

        1. 支持主动超时

        2. 支持异步调用

      2. 缺点:线程的额外开销比较大

      3. 使用场景:低扇出(调用少)

    2. 信号量隔离(Sentinel默认采用)

      1. 优点:轻量级,无额外开销

      2. 缺点:

        1. 不支持主动超时

        2. 不支持异步调用

      3. 使用场景

        1. 高频调用

        2. 高扇出

  2. 设置线程隔离

    1. 添加限流时,阈值类型选择线程数,单机阈值就是最大线程数

三、熔断降级

  1. 熔断降级是解决雪崩问题的重要手段。其思路是由断路器统计服务调用的异常比例、慢请求比例,如果超所阈值则会熔断该服务。即拦截访问该服务的一切请求;而当服务恢复时,断路器会放行访问该服务的请求

    熔断降级流程

  2. 熔断策略

    1. 慢调用

      1. 业务的响应时长(RT)大于制定时长的请求认定为慢调用请求。在制定时间内,如果请求数量超过设定的最小数量,慢调用比例大于设定的阈值,则触发熔断

      2. 新增降级规则,选择慢调用比例,解读如下:统计统计时长内的最小请求数,如果,最大RT比例超过比例阈值(小数,0.及)则触发熔断,熔断时间为熔断时长

    2. 异常比例

      1. 新增降级规则,选择异常比例,解读如下:统计统计时长内的最小请求数,如果,发生异常请求比例超过比例阈值(小数,0.及)则触发熔断,熔断时间为熔断时长

    3. 异常数

      1. 新增降级规则,选择异常数,解读如下:统计统计时长内的最小请求数,如果,发生异常请求数量超过异常调用次数则触发熔断,熔断时间为熔断时长

最后更新于

这有帮助吗?