服务容错保护Hystrix

服务容错保护Hystrix_第1张图片

作用

       保护服务整体可用性,防止服务之间调用故障而引发的故障蔓延。

功能

       服务降级、服务熔断、线程和信号量隔离、请求缓存、请求合并等功能

使用方式

       @HystrixCommand或者HystrixCommand重写对应run() 方法。指定服务降级后备方法,继承方式重写getFallback()方法实现降级逻辑,注解指定参数fallback为降级方法(方法必须是@HystrixCommand注解标志所在的类)

触发降级的异常

1)异常处理:run()方法抛出除了HystrixBadRequestException之外,其他都会触发调用降级逻辑如果希望某个一次异常不触发降级,可以抛出HystrixBadRequestException不触发降级;使用注解是使用ignoreException=(BadRequestException.class)Hystrix会包装异常为HystrixBadRequestException抛出这样就不会触发降级逻辑。

2)异常获取:可以在getFallback()方法或者注解标识方法参数中增加Throwable对象这样在方法内部就可以针对不同异常做不同处理。

依赖隔离

1)通过实现对依赖服务的线程池隔离,不会因为个别依赖服务出现问题而引起非相关服务的异常同时,也使得我们的应用变得更加灵活,可以在不停止服务的情况下,配合动态配置刷新实现性能配置上的调整。

2)通过设置分组、命令名以及线程池信息实现资源分组,同时也便于组织和统计命令告警、仪表盘等信息。

请求缓存

        请求缓存通过开启请求缓存,优化服务依赖调用,降低服务调用压力。

请求合并

       将处于一个时间窗口(默认10ms)内对同一个依赖服务的多个请求进行整合并以批量方式发起请求功能(服务提供也需要提供相应的批量实现接口)。

触发降级的异常​​​​​​​

1)异常处理:run()方法抛出除了HystrixBadRequestException之外,其他都会触发调用降级逻辑

如果希望某个一次异常不触发降级,可以抛出HystrixBadRequestException不触发降级;使用注解是

使用ignoreException=(BadRequestException.class)Hystrix会包装异常为HystrixBadRequestException抛出

这样就不会触发降级逻辑。

2)异常获取:可以在getFallback()方法或者注解标识方法参数中增加Throwable对象

这样在方法内部就可以针对不同异常做不同处理。

依赖隔离

1)通过实现对依赖服务的线程池隔离,不会因为个别依赖服务出现问题而引起非相关服务的异常。同时,也使得我们的应用变得更加灵活,可以在不停止服务的情况下,配合动态配置刷新实现性能配置上的调整。

2)通过设置分组、命令名以及线程池信息实现资源分组,同时也便于组织和统计命令告警、仪表盘等信息。

请求缓存

       请求缓存通过开启请求缓存,优化服务依赖调用,降低服务调用压力。

请求合并

       将处于一个时间窗口(默认10ms)内对同一个依赖服务的多个请求进行整合并以批量方式发起请求功能(服务提供方也需要提供相应的批量实现接口)。

属性配置

Command属性:对应服务降级、熔断、信号量功能

1run方法属性配置

       方法执行的隔离策略(线程或信号量隔离);

       是否启用超时;超时时间设置,使用信号量隔离策略时信号量数;

       方法执行超时是否中断等。

2fallback属性配置

       是否启用降级策略;

       降级最大并发请求数等。

3circuitBreaker断路器属性

       当服务请求命令失败时,是否使用断路器来跟踪其健康指标和熔断请求;

       在滚动时间窗内收到多少请求失败打开熔断器;

       熔断器打开的错误百分比等。

       注:断路器的状态有关闭、打开和半开三种状态,断路器处于打开状态时,链路处于非健康状态,命令执行时,直接调用降级逻辑。

4metrics配置:断路器收集统计指标

       执行HystrixCommandHystrixObservableCommand中捕获的指标信息。(通过动态刷新配置不会产生效果,这样做是为了避免出现运行期检测数据丢失)。包括收集信息的时间窗口;在收集健康指标的时间窗口内,拆分桶的数量;是否采用百分比统计等。

5requestContext配置:对应请求缓存上下文,只有在同一个请求上下文缓存才会有效

Collapser属性
       对应请求合并功能。包括合并请求最大数;批量执行的延迟时间、是否开启请求缓存等。

ThreadPool属性

       对应线程隔离功能。包括执行命令的核心线程数;线程池最大队列大小;队列拒绝阀值等。

断路器响应过程​​​​​​​

服务容错保护Hystrix_第2张图片

 

 

 

 

 

你可能感兴趣的:(Spring,Cloud)